Ios 如何播放Live555从流媒体获取的数据帧?
我的iOS应用程序是一个从监控摄像头播放流式视频的播放器。有两种流模式:HTTP和RTP/RTSPIos 如何播放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
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李>