抛开flash,自己开发实现C++ RTMP直播流播放器
来源:互联网 发布:nginx php exec 权限 编辑:程序博客网 时间:2024/06/05 12:40
开发的意义
RTMP直播协议,是Adobe公司推出的以flash播放器为客户端的实时直播流协议,是一种应用非常广泛的通信协议。而flash直播,也是到目前为止,web页面上最成熟的直播技术。不过,因为flash主要是嵌入到web页面中,因此,RTMP直播,通常也就局限在B/S形式的直播应用。
我之前陆续做了很多与RTMP直播协议相关的项目开发,都是采集发布端的,数据发往FMS等rtmp服务器之后,最终是通过flash来收看的。并不是考虑flash本身好或不好的问题,而是想把这个BS的技术直播协议,不借助Adobe Air平台,扩展到C/S场景中,这样,用户不仅可以在网页上收看RTMP协议的直播流,还可以通过客户端来收看,大大丰富了直播协议的灵活度。另外,实现了这一点,为RTMP直播协议的跨平台,以及跨移动平台(Android, iOS)的应用,也提供了可能。有很好的前景。
比如,通过实现不同平台上的rtmp播放器,来实现如下架构。
设计和流程
其实,实现RTMP直播流播放器,逻辑上和实现其他直播流协议播放器,是一致的,整体上程序可以分为三个部分
- RTMP直播数据下载与数据包分解
- 数据包中分离H.264和AAC数据,并解码
- 视频渲染和音频播放
实现的模块,以及主要流程,如下图所示
目前为止,这个设计是为Windows PC端开发所做,将来会做进一步移植,这个情况下,主要是修改视频渲染和音频播放的实现。
细节与实现
1. RtmpDownloader
RtmpDownloader模块非常重要,我这里是将librtmp作为底层的rtmp传输协议。在librtmp之上,除了接口调用,还需要进行数据包的解析,h.264视频数据和aac音频数据的分离,以及从中解析出重要的解码信息,交给解码器解码,并初始化渲染器。整个的框架和流程如下图
RtmpPlayer四个接口所代表的意义下面列了出来。这就是RTMP下载最需要获取到的数据,以及解码信息。
2. 渲染和播放
说到视频渲染,这似乎是个坑,相信做播放器开发的朋友会有说不完的话,不过我在这里就简单贴下我的主要渲染流程。Windows上视频渲染可以选择的方式有很多,比如Direct3D、DirectDraw、GDI,OpenGL等,这里选择d3d的方式来渲染。
音频播放可以选择WAVE系列函数,或者DirectSound的接口等,这里我选择使用WAVE接口,原因当然是比较简单啦 :)
实际效果
播放一下从网上找到的深圳卫视rtmp直播流地址,画面清晰,音视频同步,效果还不错 :)
配合之前做的RTMP采集推送端,可以完全脱离flash来实现基于RTMP协议的直播。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
haibindev.cnblogs.com,合作请联系QQ。(转载请注明作者和出处)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
转自:http://www.cnblogs.com/haibindev/p/3466094.html
- 抛开flash,自己开发实现C++ RTMP直播流播放器
- 抛开flash,自己开发实现C++ RTMP直播流播放器
- 抛开flash,自己开发实现C++ RTMP直播流播放器
- 抛开flash,自己开发实现C++ RTMP直播流播放器
- 抛开flash,自己开发实现C++ RTMP直播流播放器
- 开发实现C++ RTMP直播拉流播放器
- C++ RTMP直播流播放器
- 机顶盒 FLASH 流播放器 开发完毕
- mfc做rtmp流播放器
- RTMP与Flowplayer实现web页面视频流播放功能
- Swift - 使用ijkplayer框架播放直播视频1(RTMP/HTTP视频流播放)
- NGINX-RTMP直播服务器搭建-OBS录制推流-VLC视频流播放
- android mms流播放器
- 如何简单有效地搭建Android流播放RTMP
- rtmp直播拉流安卓开发
- RTMP直播效果实现
- 基于RTMP协议的Flash流媒体网页直播播放器
- 编程实现avi文件的流播放
- TIMAC 开发随笔 一:CC2530的flash在线读写
- 虚数的意义
- OpenCV Latent SVM Discriminatively Trained Part Based Models for Object Detection
- 高质量C++编程 note
- 方立勋JavaWeb学习笔记第五天
- 抛开flash,自己开发实现C++ RTMP直播流播放器
- IE8自动触发的事件源会识别成手动点击的元素
- 【收藏汇总】
- RTSP协议转换RTMP直播协议
- 史上最全设计模式导学目录(完整版)
- spring事务管理源码分析
- 从C到C++
- HDU 2586 How far away? LCA模板
- 微软重组战略初显成效 Surface胡汉三卷土重来