调用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.264和AAC编码数据的分析、处理
  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。(转载请注明作者和出处~)

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

时间: 2024-11-18 00:58:29

调用Live555接收RTSP直播流,转换为Http Live Streaming(iOS直播)协议的相关文章

vlc源码分析之调用live555接收RTSP数据

首先了解RTSP/RTP/RTCP相关概念,尤其是了解RTP协议:RTP与RTCP协议介绍(转载). vlc使用模块加载机制调用live555,调用live555的文件是live555.cpp. 一.几个重要的类 以下向左箭头("<-")为继承关系. 1. RTPInterface RTPInterface是RTPSource的成员变量,其成员函数handleRead会读取网络数据存入BufferedPacket内,该类最终会调到UDP的发送接收函数. Boolean RTPIn

洋铭 NVS-25 网络编码器推送RTMP直播流至流媒体系统进行网络直播

"三网融合"已成趋势. 网络电视直播在广电业大力鼓起,各广电媒体.新闻媒体都逐渐开始树立自个的网络电视直播体系.那么如何搭建网络电视台呢? 今天给大家介绍通过洋铭 NVS-25 网络编码器采集电视信号推送标准的RTMP流到流媒体服务器直播系统进行网络分发. 1.  确认电视设备输出接口 ü  HDMI或SDI输出 ü  网络直播流输出 2.  确认洋铭 NVS-25 网络编码器输出形式 NVS-25 为 Datavideo 设计的小尺寸网络直播编码器 , Plug&Play产品

如何推送RTMP直播流至流媒体系统进行网络直播

"三网融合"已成趋势. 网络电视直播在广电业大力鼓起,各广电媒体.新闻媒体都逐渐开始树立自个的网络电视直播体系.那么如何搭建网络电视台呢? 今天给大家介绍通过洋铭 NVS-25 网络编码器采集电视信号推送标准的RTMP流到流媒体服务器直播系统进行网络分发. 1. 确认电视设备输出接口 ü HDMI或SDI输出 ü 网络直播流输出 2. 确认洋铭 NVS-25 网络编码器输出形式 NVS-25 为 Datavideo 设计的小尺寸网络直播编码器 , Plug&Play产品概念使操

极速搭建RTMP直播流服务器+webapp (vue) 简单实现直播效果

在尝试使用webRTC实现webapp直播失败后,转移思路开始另外寻找可行的解决方案.在网页上尝试使用webRTC实现视频的直播与看直播,在谷歌浏览器以及safari浏览器上测试是可行的.但是基于基座打包为webapp后不行,所以直播的话建议还是原生的好.HBuilder自带的H5+有提供了原生的视频播放和推流录制上传,但是需要有一个rtmp直播流服务器,用于测试和开发,这时就需要自建rtmp服务推流了. 极速搭建简单RTMP直播流服务器 开发环境:macOS 需要安装并启动docker:?? 

ffmpeg接收rtsp流问题

项目使用mingw环境g++5.3,C++调用ffmpeg接收rtsp流,再通过C#显示.结构上是C#调用C++的so文件,读取得到的视频帧(RGB888格式),通过图片控件显示. 一开始是使用opencv打开视频源,本地文件和rtsp的源使用一样的接口,方便使用.但是通过opencv打开rtsp源的时候,发现720p2Mbit的视频能够正常打开,但1080p的视频打开后出马赛克,卡顿比较多. 而同样的视频源,使用VLC就能流畅的打开,不过延时很高,大约1s. 后来又发现,使用i3低电压版CPU

视频直播:libx264编码一帧图片+live555搭建RTSP流媒体服务器

最近又复习了一下live555的源代码,并在VS2013下编译了视频直播程序. 从视频读取一帧后x264编码,用live555的RTSP传输流媒体. 效果清晰流畅(640*480+40帧每秒),很满意. 附上主要的cpp代码 /* H264FramedLiveSource.cpp By Chain_Gank */ #include <highgui.h> #include <cv.h> #include <stdio.h> #include <string.h&g

修改live555支持mpeg2ts RTSP拉流,附代码

在很早之前的博客<用EasyDarwin进行IPTV rtsp mpeg-ts smil流的转发和分发直播服务>中,我们介绍到如何将live555支持mpeg2ts拉流,这个在IPTV领域用的特别多,其实修改的点也不是很多,主要是要对live555有一点的熟悉程度,这里就不多显摆啥了,直接上之前的说明和代码: live555直接请求IPTV RTSP时,IPTV服务器返回给客户端的sdp信息中的m=字段,这个媒体类型live555是无法识别的,也就是MP2T(mpeg2-ts)流,从抓包来看,

RTMP、RTSP、HTTP视频协议详解(附:直播流地址、播放软件)

一.RTMP.RTSP.HTTP协议 这三个协议都属于互联网 TCP/IP 五层体系结构中应用层的协议.理论上这三种都可以用来做视频直播或点播.但通常来说,直播一般用 RTMP.RTSP.而点播用 HTTP.下面分别介绍下三者的特点. 1,RTMP协议 (1)是流媒体协议. (2)RTMP协议是 Adobe 的私有协议,未完全公开. (3)RTMP协议一般传输的是 flv,f4v 格式流. (4)RTMP一般在 TCP 1个通道上传输命令和数据. 2,RTSP协议 (1)是流媒体协议. (2)R

Windows下利用live555实现H264实时流RTSP发送

文如其名,最近在做的项目要求利用RTSP协议转发处理完的H264视频数据给上一层客户端,环境是Windows的VS2013,于是就各种百度谷歌找代码.结果在得到利用live555去做比较简单的结论的同时也悲情地发现,网上别人贴出来的代码基本都是Linux上面的.在修改了两份来适用于Windows无效后,又一次陷入了百度谷歌的无尽搜索中.Anyway,最后终于解决了,所以贴出代码跟大家分享下,希望能给和我需求相似的童鞋一点启发,也希望有高手指正其中的问题. 用live555进行RTSP的播放基本上