【问题标题】:How can I play the data frame get from streaming by Live555?如何播放 Live555 流式传输的数据帧?
【发布时间】:2014-06-05 04:20:24
【问题描述】:

我的 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 解码数据,因为许可证。

我使用 MPMoviePlayerViewController 播放 DATA.MP4 文件,但它不能。如上信息,HTTP和RTP/RTSP具有相同的视频配置文件H.264,所以不知道为什么MPMoviePlayerViewController不能播放DATA.MP4?

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

谢谢!

【问题讨论】:

    标签: ios ipad h.264 live555


    【解决方案1】:

    您可以使用 openRTSP 将 RTSP 流保存到 mp4,它还提供了如何执行此操作的源代码示例。 http://www.live555.com/openRTSP/

    我已经设法使用 openh264 解码 RTSP 流,但有一些事情需要注意。有关概述,请参阅 http://www.live555.com/liveMedia/faq.html#testRTSPClient-how-to-decode-data

    • 从 MediaSink 派生一个新类
    • 有关 openh264 解码器 API 的概述,请参阅https://github.com/cisco/openh264/wiki/UsageExampleForDecoder
    • 在初始化h264解码器之前,需要从子会话中获取一些参数:string spropParams = subsession->fmtp_spropparametersets();并将其传递到您的接收器对象中。
    • 在解码期间,接收器的 AfterGettingFrame 方法被重复调用。每次传入一个H264“NAL帧”,要么是一个H264帧片段,要么是一组H264参数。
    • 每个帧在发送到解码器之前都需要一个起始码 0x00000001 附加到缓冲区。有关如何完成此操作的示例,请参见 H264or5VideoFileSink.cpp(在 live555 源中)。 https://github.com/xanview/live555/blob/master/liveMedia/H264or5VideoFileSink.cpp
    • sprop 参数应在发送任何其他数据之前传输到解码器。也请参见 H264or5VideoFileSink.cpp。
    • 使用openh264中的DecodeFrameNoDelay(用于立即显示多片数据)或DecodeFrame2(用于仅显示完整帧)函数进行解码https://github.com/cisco/openh264/wiki/ISVCDecoder#decodeframenodelay
    • 只有当 sDstBufInfo.iBufferStatus 为真时,帧才准备就绪
    • 帧通常在某些非 RGB 色彩空间中编码,例如 I420。解决这个问题的一种方法是 opencv 的 cvtColor 和 COLOR_YUV2BGR_I420 选项。
    • 当 RTSP 在 UDP 上工作时,我遇到了一些帧解码失败的问题(我遇到了 dsRefLost 错误)。这可能是由于某些帧大于网络的 MTU,导致丢包。一种解决方法是使用 TCP 代替 RTSP 或简单地增加网络 MTU。 https://ffmpeg.org/pipermail/libav-user/2011-November/000901.html

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      相关资源
      最近更新 更多