Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何播放Live555从流媒体获取的数据帧?_Ios_Ipad_H.264_Live555 - Fatal编程技术网

Ios 如何播放Live555从流媒体获取的数据帧?

Ios 如何播放Live555从流媒体获取的数据帧?,ios,ipad,h.264,live555,Ios,Ipad,H.264,Live555,我的iOS应用程序是一个从监控摄像头播放流式视频的播放器。有两种流模式:HTTP和RTP/RTSP HTTP:  媒体容器:MPEG-2 TS  视频编解码器:H.264(MPEG-4 AVC)  音频编解码器:AAC RTP/RTSP:  媒体容器:MPEG4  视频编解码器:H.264(MPEG-4 AVC)  音频编解码器:AAC 在HTTP模式下,我可以使用MPMoviePlayerViewController成功播放 在RTP/RTSP模式下,我使用Live555实现协议RTP/R

我的iOS应用程序是一个从监控摄像头播放流式视频的播放器。有两种流模式:HTTP和RTP/RTSP


HTTP:

 媒体容器:MPEG-2 TS

 视频编解码器:H.264(MPEG-4 AVC)

 音频编解码器:AAC

RTP/RTSP:

 媒体容器:MPEG4

 视频编解码器:H.264(MPEG-4 AVC)

 音频编解码器:AAC


在HTTP模式下,我可以使用MPMoviePlayerViewController成功播放

在RTP/RTSP模式下,我使用Live555实现协议RTP/RTSP。我们刚刚从流媒体中获取数据,并将其存储到温度文件中,如data.MP4。我们不使用ffmpeg对数据进行解码,因为许可证是无效的

我使用mpmovieplayervewcontroller来播放DATA.MP4文件,但它不能。如上所述,HTTP和RTP/RTSP具有相同的视频配置文件H.264,因此我想知道为什么MPMoviePlayerViewController不能播放数据。MP4?

顺便说一下,我正在尝试使用OpenH264(Cisco)来解码DATA.MP4,但我不知道如何使用这个库。因为它不是关于它的更多文档任何有这方面经验的人,你能给我分享一些样品吗?


谢谢大家!

您可以使用openRTSP将RTSP steam保存到mp4,openRTSP还提供了一个如何实现的源代码示例

我已经设法使用openh264解码了一个RTSP流,但是有一些事情需要注意。有关概述,请参阅

  • 从MediaSink派生一个新类
  • 有关openh264解码器API的概述,请参阅
  • 在初始化h264解码器之前,需要从子会话获取一些参数:string spropParams=subsession->fmtp_spropparametersets();并将其传递到水槽对象中
  • 在解码过程中,接收器的AfterGettingFrame方法会被重复调用。每次都会传入一个H264“NAL帧”,它是一个H264帧片段或一组H264参数
  • 在将每个帧发送到解码器之前,需要在缓冲区中预先添加一个开始代码0x00000001。请参阅H264or5VideoFileSink.cpp(在live555源代码中)以了解如何执行此操作的示例
  • sprop参数应在发送任何其他数据之前发送到解码器。请参见h264或5videofilesink.cpp了解此信息
  • 使用openh264中的DecodeFrameNoDelay(用于立即显示多片数据)或DecodeFrame2(用于仅显示完整帧)函数进行解码
  • 只有当sDstBufInfo.iBufferStatus为true时,帧才准备就绪
  • 帧通常在一些非RGB颜色空间(如I420)中编码。解决这个问题的一种方法是opencv的cvtColor和COLOR_YUV2BGR_I420选项
  • 当RTSP在UDP上工作时,我遇到了一些无法解码的帧的问题(我遇到了dsRefLost错误)。这可能是由于一些帧大于网络的MTU,导致分组丢失。一种解决方法是将TCP用于RTSP,或者只是增加网络MTU
我希望这有帮助