• 调用Live555接收RTSP直播流,转换为Http Live Streaming(iOS直播)协议


    Live555接收RTSP直播流,转换Http Live Streaming(iOS直播)协议

      RTSP协议也是广泛使用的直播/点播流媒体协议,之前实现过一个通过live555接收RTSP协议,然后转换为HLS(Http Live Streaming)直播协议文件的程序,为的是可以接收远端设备或服务器的多路RTSP直播数据,实时转换为HLS协议文件,以实现iPhone或iPad等设备观看RTSP直播源的需求。现在把实现的思路分享如下。

    要点分析

      首先,程序的主要目的,是从多路RTSP输入源中提取AAC编码的音频和H.264编码视频数据,并生成Http Live Streaming所支持的MPEG-TS格式分段文件以及对应的m3u8文件。因此,本程序的关键点有以下部分:

    1. RTSP直播流的读取
    2. H.264AAC编码数据的分析、处理
    3. MPEG-TS打包以及HLS分段生成策略
    4. m3u8索引文件

      有了关键点,就可以一项一项的去分析。

     

    设计思路

      根据上面分析的要点,首先要选择RTSP直播协议的读取。我们不需要从零做起,网络上有很多和RTSP相关的开源项目可以使用或借鉴,我选择了Live555。

      Live555是一个跨平台的流媒体解决方案,主要支持RTSP协议,好像也支持SIP(这个也是我马上研究的重点,之后会写文章研究SIP相关的技术实现)。Live555实现了RTSP包括服务器-客户端的整套结构,是很知名的一个开源项目。网上有很多关于Live555学习和使用的文章,我就不具体介绍了。

      H.264和AAC数据的分析处理,这个对于从没做过相关项目开发的人来说,应该是一个难点,主要是相关概念的理解。好在我一直在做这块,也比较好弄。

      第3和第4点,可以参照我之前的文章“Http Live Streaming直播(iOS直播)技术分析与实现”的技术方法,来加以实现。因此,主要需要处理的就是RTSP直播流数据的获取,以及对其中H.264和AAC编码数据的处理。

      于是可以画出大体结构如下:

      

    逻辑与实现

    1. 程序框架和模块说明

      

    2. RtspCapture的接口

      RtspCapture是我的程序里管理RTSP直播数据流和分析处理的类,接口很重要,基本上这个设计就可以。(当然,全部代码是不会放上来的,有兴趣的可以和我谈,这里只罗列关键的地方。)

      

      他所使用的live555变量,这里ourRTSPClient实际就是RTSPClient的简单继承

      

    3.RtspCapture调用live555的主要流程

      1. 首先,在RtspCapture构造函数初始化

      

      2. 在StartRtsp函数中,创建RtspClient,并发送"describe"命令,开始获取sdp。回调函数就是continueAfterDESCRIBE。在这里创建MediaSession,之后再发送"setup"命令,等,这些都可以在live555的例子以及网上的说明中看到。

      

      3. 还有一个关键点,就是要在自己的线程循环中,调用live555 environment的事件循环,就像这样

      

    4. 对rtsp回调h264数据的分析处理

      这里演示了,如何从rtsp回调的h264数据中,提取sps和pps信息。里面的parse函数,是live555自带的。

      

    程序效果

       程序界面,很简单。

      

      配置文件配置如下:

      

      打开rtsp服务器,可以用vlc来串流文件作为RTSP服务器测试

      iPhone上显示

       

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      haibindev.cnblogs.com,合作请联系QQ。(转载请注明作者和出处~)

    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  • 相关阅读:
    初识STM32标准库
    自己写库—构建库函数雏形
    使用寄存器点亮LED等
    新建工程---寄存器版
    什么是寄存器
    初识STM32
    ST-LINK驱动的安装
    MDK5使用技巧
    开发环境的搭建
    1行Python代码制作动态二维码
  • 原文地址:https://www.cnblogs.com/haibindev/p/3433342.html
Copyright © 2020-2023  润新知