基于live555的视频直播 DM368IPNC RTSP分析
因需要,从个人的理解顺序和需求角度对live555的分析与开发整理,包含RTSP Server与RTSP Client、如何直播H.264流与JPEG流等,均进行了探讨,对live555的初学者有一定的指导意义。
本人习惯使用excel归档,所以本文均为excel的截图,源文件可以再资源中下载。








基于live555的视频直播 DM368IPNC RTSP分析
appro IPNC视频流直播部分用的RTSP,基于live555,通过改写wis-streamer实现的,在live555官网上有wis-streamer的代码下载,appro将其修改,在framedsource中加入了GetAVData接口,这样ipnc就可以直播了。
感慨:C++ 真的太好用了
现在懒了,文字部分就直接复制出来,源文档使用的是excel,
文档下载地址:http://www.kuaipan.cn/file/id_48923272389066806.html
基于live555的视频直播 DM368IPNC RTSP分析
一、描述
appro利用live555实现了三种视频流以及一种音频流的直播
1、MJPEG Video
2、H264 Video
3、MPEG4 Video
4、PCM Audio
live555是一个开源的RTSP C++类库,默认实现音视频文件的点播,但是可以通过继承相关类,重写相关方法实现视频直播
live555提供的实现直播的通用步骤是:
截图来自之前的《live555分析与开发.xlsx》
appro也是按照此种方法实现
二、Appro的添加的live555源文件
之所以文件复杂,是由于实现了多种音视频流,如果只留其一,源文件将非常简洁
下图是appro源码的UML类图
APPROInput类 类似于设计模式中的简单工厂模式,用于创建具体的FramedSource,对于WISServerMediaSubsession类来说,处理FramedSource的接口是相同的,
但是对于FramedSource来说,VideoSource与AudioSource的具体的帧获取是不同的,
这样,就需要利用APPROInput来分别创建VideoSource和AudioSource。
类APPROInput的videoSource()方法 返回VideoOpenFileSource类的实例
类APPROInput的audioSource()方法 返回AudioOpenFileSource类的实例
三、重要的FramedSource
FramedSource类的doGetNextFrame()方法用于获得音视频的帧数据,子类需要实现这个方法
OpenFileSource中的incomingDataHandler1,调用了虚函数readFromFile,这个函数与底层相关,
所有由OpenFileSource的子类 VideoOpenFIleSource和AudioOpenFileSource类实现
在appro的ipnc中,不管是视频还是音频数据,均是通过GetAVData()函数来获得,
所以VideoOpenFileSource类和AudioOpenFIleSource类的readFromFile方法中封装了GetAVData()这个函数。
具体获得哪种类型的数据是由类OpenFileSource中的属性APPROInput &fInput来传递的
在main函数中有关FramedSource操作的所有代码如下图,以H264为例
启示:在移植appro的live555到高清相机中,我认为最好的方法就是按照IPNC的GetAVData()函数结构,
封装高清相机的GetAVData()函数,高层的live555RTSP部分可不做任何改动
四、RTSP直播 main主程序
这与普通的live555 rtsp service结构并无太多区别,只是由于要传输的视频类型较多,所以多了很多if else,这部分比较简单,不作分析。
appro也是按照此种方法实现
基于live555的视频直播 DM368IPNC RTSP分析的更多相关文章
- iOS平台基于ffmpeg的视频直播技术揭秘
现在非常流行直播,相信很多人都跟我一样十分好奇这个技术是如何实现的,正好最近在做一个ffmpeg的项目,发现这个工具很容易就可以做直播,下面来给大家分享下技术要点: 首先你得编译出ffmpeg运行所需 ...
- 基于Flink的视频直播案例(上)
目录 数据产生 Logstash部分 Kafka部分 Flink部分 配置/准备代码 视频核心指标监控 本案例参考自阿里云的视频直播解决方案之视频核心指标监控和视频直播解决方案之直播数字化运营. 基于 ...
- 视频直播APP开发分析
视频直播APP开发到目前为止都还是热门的一个行业,而且发展到现在直播的种类非常多,很多行业都打入了直播行业,再也不是单纯的人物直播这么单一了.视频直播APP开发行业就像是吃螃蟹,来的早的人不懂如何吃, ...
- 在Windows下搭建基于nginx的视频直播和点播系统
http://my.oschina.net/gaga/blog/478480 一.软件准备 由于nginx原生是为linux服务的,因此官方并没有编译好的windows版本可以下载,要在windows ...
- EasyPusher:基于live555的DarwinInjector实现的RTSP直播推送程序
先简单介绍一下EasyPusher的功能,后面再对具体内部架构做介绍: EasyPusher:https://github.com/EasyDarwin/EasyPusher EasyPusher是什 ...
- 基于Red5的视频直播平台
搭建环境:Win2008 server + jdk1.8+red5-server-1.0.6 下载地址:https://github.com/Red5 修改启动配置文件(修改为jdk路径): 安装模版 ...
- 基于Flink的视频直播案例(下)
目录 直播数字化运营 结果写入Elasticsearch 第二种思路 Flink实现总结 Elasticsearch部分 Kibana部分 直播数字化运营 业务目标 全站观看直播总人数以及走势 房间直 ...
- 基于Live555,ffmpeg的RTSP播放器直播与点播
基于Live555,ffmpeg的RTSP播放器直播与点播 多路RTSP高清视频播放器下载地址:http://download.csdn.net/detail/u011352914/6604437多路 ...
- 基于HLS(HTTP Live Streaming)的视频直播分析与实现
转自:http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html HLS(HTTP Live Streaming)的分析: HTT ...
随机推荐
- iis7 发布mvc 遇到的HTTP错误 403.14-Forbidden Web 服务器被配置为不列出此目录的内容
iis 7上发布mvc报错:403.14-Forbidden Web 服务器被配置为不列出此目录的内容 提示里面的解决方法是: 如果不希望启用目录浏览,请确保配置了默认文档并且该文件存在. 使用 II ...
- 深入理解 CSS变形 transform(3d)
坐标轴 在了解透视之前,首先要先了解坐标轴.3D变形与2D变形最大的不同就在于其参考的坐标轴不同.2D变形的坐标轴是平面的,只存在x轴和y轴,而3D变形的坐标轴则是x.y.z三条轴组成的立体空间,x轴 ...
- java的final变量理解
java的final变量理解 final基本类型是数值不能改变 final对象是引用不能改变,对象其自身是可以被修改的.
- solr官方文档翻译系列之schema.xml配置介绍
常见的元素 <field name="weight" type="float" indexed="true" stored=" ...
- apache的500错误是写到哪个文件里面
apache的500错误是写到哪个文件里面
- ICSharpCode.SharpZipLib实现压缩解压缩
最近,在项目中经常需要处理压缩和解压缩文件的操作.经过查找,发现了ICSharpCode.SharpZipLib.dll ,这是一个完全由c#编写的Zip, GZip.Tar . BZip2 类库,可 ...
- (转)asp.net 使用cookie完成记住密码自动登录
代码如下 复制代码 string username = this.txtUserName.Text;//用户名 string password = this.txtPassword.T ...
- 什么是DNN,Dotnetnuke介绍和功能简介
1. What is DNN? DNN是DotNetNuke(DotNet)的简写.它是在IBUYSPY(IBUYSPY是微软用来推广ASP.NET而推出的范例程序)的基础上发展起来的,是一个免费的. ...
- java.io.FileNotFoundException: class path resource [bean/test/User.hbm.xml] cannot be opened because it does not exist
确定下 WEB-INF/classes下有没有,不是src下哦 工程的src下创建后,会发布到tomcat下项目下的classes中
- C++拾遗(六)函数相关(1)
返回值 C++规定返回值不能是 数组.但可以是其它任何类型(包括结构体和对象). 通常,函数将返回值复制到指定的CPU寄存器或内存单元中,然后调用函数调用该内存单元的值. 函数原型 参数列表中可以不包 ...