专栏首页HBStream流媒体与音视频技术抛开flash,自己开发实现C++ RTMP直播流播放器

抛开flash,自己开发实现C++ RTMP直播流播放器

抛开flash,自己开发实现C++ RTMP直播流播放器

众所周知,RTMP是以flash为客户端播放器的直播协议,主要应用在B/S形式的场景中。本人研究并用C++开发实现了RTMP直播流协议的播放器,结合之前做的RTMP直播采集端,可以将RTMP协议完全扩展到C/S形式的应用场景中,这将对之后的通用、全平台的流媒体架构设计和实现,打下坚实的基础。

开发的意义

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。(转载请注明作者和出处)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RTSP协议转换RTMP直播协议

      RTSP协议也是广泛使用的直播/点播流媒体协议,以前的项目里实现了一个RTSP协议转换RTMP直播协议的程序,为的是可以接收远端设备或服务器的多路RTSP直...

    hbstream
  • HTTP Live Streaming直播(iOS直播)技术分析与实现

       不经意间发现,大半年没写博客了,自觉汗颜。实则2012后半年,家中的事一样接着一样发生,实在是没有时间。快过年了,总算忙里偷闲,把最近的一些技术成果,总结...

    hbstream
  • H264音视频直播系统 服务器端+客户端源码 可用于视频聊天、视频会议

    hbstream
  • 搭建直播教学系统的方法

      当下,视频直播行业在中国逐渐走红。从游戏到秀场,从传统的网页端到移动互联网,各大直播平台包括斗鱼、熊猫tv、虎牙战旗还有纯移动端的印客、易直播等,群雄割据。...

    万岳教育源码
  • 【案例】商业智能决策系统解决方案

    1.商业智能系统的目标   商业智能系统是以业务流程管理系统采集的数据为基础,对原始的数据进行加工,给出有利于决策形成的结果,帮助人们正确地进行经营决策。   ...

    机器学习AI算法工程
  • 网页可以播放RTMP视频流?支持RTMP的网页播放器

    随着4G/5G网络的发展,以及有限带宽越来越大,人们对视频直播的需求也越来越多。不仅普通的互联网直播发展很快,传统的安防监控也开始互联网化,走起了互联网直播的路...

    EasyNVR
  • 基于RTMP数据传输协议的实时流媒体技术研究

    本文来自论文《基于 RTMP 协议的流媒体技术的原理与应用》,文中研究了基于 Flash 平台的流媒体系统中使用的 RTMP 协议的原理和应用,并对网络上实时流...

    貟王軍
  • 盘点中国机器人伺服系统领域的十大企业

    伺服系统(servomechanism)又称随动系统,是用来精确地跟随或复现某个过程的反馈控制系统。伺服系统使物体的位置、方位、状态等输出被控量能够跟随输入目标...

    机器人网
  • 3个基于Java的Blockchain库

    区块链大本营
  • [810]Linux运行shell脚本提示No such file or directory错误的解决办法

    Linux执行.sh文件,提示No such file or directory的问题:

    周小董

扫码关注云+社区

领取腾讯云代金券