RTSP协议转换RTMP直播协议

RTSP协议转换RTMP直播协议

  RTSP协议也是广泛使用的直播/点播流媒体协议,以前的项目里实现了一个RTSP协议转换RTMP直播协议的程序,为的是可以接收远端设备或服务器的多路RTSP直播数据,实时转换为RTMP直播协议,推送到NginxRtmp等RTMP服务器,可以在PC上实现flash观看RTSP直播源(比如IPCAM)的需求,也能通过Nginx的HLS协议转换,在手机上观看。实现的思路分享如下。

要点分析

  首先,程序的主要目的,是从多路RTSP输入源中提取AAC编码的音频和H.264编码视频数据,并生成RTMP数据包,然后组装RTMP推送协议,并发往RTMP服务器。在发送的过程中,要求可以从RTSP数据源切换到具有相同h.264和aac编码的FLV文件中,并不影响RTMP直播。因此,本程序的关键点有以下部分:

  1. RTSP直播流的读取
  2. H.264和AAC编码数据的分析、处理
  3. FLV文件数据的提取及与RTSP直接的切换和衔接
  4. RTMP数据包封装
  5. RTMP推送协议

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

设计思路

  根据上面分析的要点,首先要选择RTSP直播协议的读取。我们不需要从零做起,网络上有很多和RTSP相关的开源项目可以使用或借鉴,我选择了Live555。(后来我也做了通过ffmpeg接口来读取RTSP数据的项目,也很不错,各有优缺点)

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

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

  第4和第5点,可以参照我之前的文章“RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播”的技术方法,来加以实现。因此,主要需要处理的就是RTSP直播流数据的获取,以及对其中H.264和AAC编码数据的处理。

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

逻辑与实现

1. 程序框架和模块说明

2. 主要接口

  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自带的。

调用方式


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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

又一个登陆框引起的血案

必看的肯定要属HTML源代码了,源代码里包含了下面所说的JS文件。HTML源代码会泄露很多信息,像程序员未删除的注释、敏感路径等都可能在HTML源代码中找的到,...

1244
来自专栏极乐技术社区

微信小程序跳坑指南系列《一》:新坑30枚

1、小程序名称可以由中文、数字、英文。长度在3-20个字符之间,一个中文字等于2个字符。 2、小程序名称不得与公众平台已有的订阅号、服务号重复。如提示重名,请更...

20310
来自专栏HBStream流媒体与音视频技术

H264音视频直播系统 服务器端+客户端源码 可用于视频聊天、视频会议

4965
来自专栏我的小碗汤

发送手机验证码实现

但是刚才试了,第一次用官方提供的demo发送成功,然后整合到自己项目中,调试时由于参数配置错误导致发送了几次失败后,5次就用完了。按理说成功才能算一次,果断放弃...

1002
来自专栏架构师之路

feed留,单聊群聊,系统通知,状态同步,到底是推还是拉?

可以理解为一个发布订阅业务,典型业务是微博(朋友圈)。你关注了姚晨的微博,姚晨发布了消息,你的主页能看到她最新发布的消息,这个场景是推送,还是拉取呢?

1053
来自专栏Python专栏

Python | 利用Python实现微博监控小姐姐动态

作者:奶权 来源:http://www.jianshu.com/p/9e7ba0a0a610

832
来自专栏决胜机器学习

设计模式专题(十)——观察者模式

设计模式专题(十)——观察者模式 (原创内容,转载请注明来源,谢谢) 一、概述 观察者模式(Observer),又称做发布-订阅模式(Publish/Subs...

3369
来自专栏北京马哥教育

Python黑科技:利用Python实现微博监控小姐姐动态

? 0x00 前言: ? 前几个星期在写一个微博监控系统 可谓是一波三折啊 获取到微博后因为一些字符编码问题 导致心态爆炸开发中断 但是就在昨天发现了另外一个...

3745
来自专栏FreeBuf

CVE 2017-0199漏洞利用的新姿势

近日从客户处捕获一枚邮件附件中的可疑word样本,以下是扫描结果,检测率貌似不高。 ? ? 手动分析吧。 文件md5:0b16b255918264667a9f0...

1945
来自专栏针针小站

【Safe】腾讯云认证网站 腾讯版"小绿标"

27310

扫码关注云+社区