基于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 ...
随机推荐
- C# 面向对象 , 类与对象
一,类的字段 类的字段, 就是类里面的 数据. 二,类的方法 1 , 函数的重载 , 如何判断: 是由两个或多个同名函数组成的,但是函数要有不同的参数.或个数.(参数 是函数的输入的东西) shu ...
- spring的xml的property和constructor-arg的解析
参考文档: http://zzy7182.iteye.com/blog/1153473
- ThinkPhp3.2 无法加载模块:Index
http://localhost:444/admin/index.php/Index/index出错:无法加载模块:Index http://localhost:444/admin/index.php ...
- C# - Excel - Microsoft Access 数据库引擎找不到对象
我几乎要无语了,疯掉了,以为是office本身的问题,换了好多次office2007,安装又不顺利,换到了office2010,想想大部分应该兼容2007,所以用着office2010了. 甚至差点要 ...
- 关于oracle dbms_job 定时执行的内容。
一.设置初始化参数 job_queue_processessql> alter system set job_queue_processes=n;(n>0)job_queue_proces ...
- C#将图片字节流转为Base64直接放入html的img标签src属性中
1,图片要转为byte[], 2,注意加上“data:image/jpeg;base64,”,这里jpeg可以换成其他. string html = "<img src='data:i ...
- Vigenère Cipher 维吉尼亚加解密算法
维吉尼亚的加解密有两种方法. 第一种是查表:第一行为明文,第一列为密钥,剩余的为对应的密文 第二种方法是转化计算法:逐个将字符转化为从零开始的数字,对数字进行加密/解密后,再转化为字符. 本文要用c+ ...
- Spring4.0学习笔记(1) —— 基础知识
1.基本定义 IOC: 其思想是反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源,而应用了 IOC之后,容器主动将资源推送给它所管理的组件,组件索要做 ...
- jQuery.YesShow - 图片轮播插件(带图片放大功能)
jQuery.YesShow - 图片轮播插件(带图片放大功能) 使用简单,原文件只要这样就可以了:<div id="yes"> <ul> ...
- javascript将form表单中的元素值封装成json格式
把form表单中的元素值封装成json function toJSON(form)//form是要进行封装的form表单对象,dom对象,可以通过document.mainForm获得,mainFor ...