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 条评论
登录 后参与评论

相关文章

来自专栏京东技术

测试工程师做好缺陷预防,居然可以避免50%的错误!

1807
来自专栏java工会

Js埋点与流量分析

页面埋点的作用,其实就是用于流量分析。而流量的意思,包含了很多:页面浏览数(PV)、独立访问者数量(UV)、IP、页面停留时间、页面操作时间、页面访问次数、按钮...

1281
来自专栏章鱼的慢慢技术路

游戏服务器架构概要

方案:切分xysvr,让多个scene分别服务于一些用户,world负责拉取数据。并协调控制多scene。

2012
来自专栏祝威廉

看不到服务器的年代,一个新的时代

冬瓜是一家互联网公司的程序员。他来公司几个月,已经做了好几个项目了。程序开发测试完,他要做的就是通过一个命令,把程序提交到集群上就完了。接着点击监控页面,会详细...

592
来自专栏腾讯云数据库团队的专栏

腾讯云时序数据库 CTSDB 开放公测

CTSDB 是一款分布式、可扩展、高可靠的时序数据库,适用于有海量时序数据的物联网、大数据分析和互联网监控等场景。

5518
来自专栏开源项目

码云团队如何使用码云?

1434
来自专栏互联网杂技

产品容错性设计原则

随着互联网的飞速发展,越来越多产品尤其是2C类产品更加注重用户体验,其中错误对用户体验的影响是灾难性的,在此我总结出一些容错性设计原则供大家参考和探讨。 ? 一...

4389
来自专栏腾讯Bugly的专栏

从0到1打造直播 App

概要 分享内容: 互联网内容载体变迁历程,文字——图片/声音——视频——VR/AR——…….。从直播1.0秀场时代(YY),2.0游戏直播(斗鱼、虎牙、熊猫)到...

5157
来自专栏机器学习算法与Python学习

最新Python学习项目Top10!

过去一个月里,我们对近1000个Python 学习项目进行了排名,并挑选出热度前10的项目。这份清单涵盖了包括Web App, Geospatial Data,...

752
来自专栏腾讯Bugly的专栏

HTML 5 视频直播一站式扫盲

视频直播这么火,再不学就 out 了。 为了紧跟潮流,本文将向大家介绍一下视频直播中的基本流程和主要的技术点,包括但不限于前端技术。 1. H5 到底能不能做视...

6877

扫码关注云+社区