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

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

C++ RTMP直播流播放器相关推荐

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

    https://www.cnblogs.com/haibindev/p/3466094.html

  2. Android可以使用的直播流播放器Vitamio5.2.3

    yixia大神的git上有两个Android直播流播放器的项目:GitHub - yixia/VitamioBundle: Vitamio for Android  弄了1天没弄出来,过! GitHu ...

  3. 各种RTMP直播流播放权限_音视频_数据花屏_问题检测与分析工具EasyRTMPClient

    之前的一篇博客<网络摄像机IPCamera RTSP直播播放网络/权限/音视频数据/花屏问题检测与分析助手EasyRTSPClient>,我们介绍了RTSP流的检测和分析工具EasyRTS ...

  4. jessibuca的使用——纯H5直播流播放器

    文件引入: 根据官方demo,将这四个文件置于public下:也可以单独将引入的文件放在staic里面,除了index页面其他三个最好放在一起.同时在index里面引入jessibuca.js并且in ...

  5. vue直播流播放器DPlayer使用

    官网地址:http://dplayer.js.org/zh/guide.html 初始化dplayer yarn add dplayer 新建播放器组件player.vue,导入包并创建播放器 < ...

  6. 网页直播/点播播放器支持WebRTC/http-flv/rtmp/m3u8等直播流播放

    H5播放器 H5直播/点播播放器,使用简单,功能强大 支持WebRTC播放; 支持MP4播放; 支持m3u8/HLS播放; 支持HTTP-FLV/WS-FLV播放; 支持RTMP播放; 支持直播和点播 ...

  7. Android 直播 直播测试拉流播放器和地址

    Android 直播 直播测试拉流播放器和地址 直播拉流播放器 直播拉流测试地址 测试类抖音视频 直播拉流播放器 推荐VLC 直播拉流测试地址 香港财经 *****:rtmp://202.69.69. ...

  8. SkeyePlayer RTSP/RTMP流播放器库API接口说明

    概述 libSkeyePlayer实现对RTSP.RTMP直播流进行实时采集和解码显示,稳定,高效,低延时:解码可采用intel硬件解码和软件解码两种方式,能实时进行录像和快照抓图,OSD叠加等功能. ...

  9. Vue 播放rtmp直播流

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Vue 播放rtmp直播流 前言 一.vueVideo.vue封装 二.调用方式 前言 该组件是在vue-video-player基础 ...

最新文章

  1. Redis启动服务器端和客户端的命令(redis-server、redis-cli、--help、kill、ping、切换数据库)
  2. 【报错信息】Google Play 上架报错 ( Your app contains ads that do not comply with our Families ad | 退出亲子同乐计划 )
  3. 大数据分析助精准医疗迅猛发展
  4. 三次握手 四次握手 与socket函数的关系
  5. java 数组 算法_常见算法总结 - 数组篇
  6. OS开发UI篇—Quartz2D使用(截屏)
  7. VMware vSphere 功能特性比较 vsphere 6.5/6.7/7.0
  8. 2021高考理综各科成绩查询,2021理综分数怎么分配 各科目是多少分
  9. Element-UI安装和项目开发
  10. SoapUI 使用教程链接
  11. 基于python+django学生信息管理系统设计与实现(毕业论文+毕设源码)
  12. 【手册】Linux User's Manual
  13. 数学建模之回归分析加例题详解(MATLAB实现)
  14. Comdo安全防火墙
  15. 给定任意字符串,返回所有叠字的数组
  16. Problem Z: 亲戚
  17. bug日志-win10任务栏卡死、无法加载
  18. 360插件化方案RePlugin学习笔记-插件使用宿主中的类
  19. js阿拉伯数字转中文数字
  20. 【概率题汇总】互联网公司概率面试题整理

热门文章

  1. RDPCrystal EDI SDK 10.0.4.X Crack
  2. 看了《流浪地球2》海报,我想教你用PPT说浪漫情话!
  3. 一边学计算机一边上班累的说说,对工作很累的句子说说心情
  4. MYSQL学习笔记-(白夜黑羽)
  5. 动能方案|智能门锁超低功耗读卡方案
  6. Atlas的使用案例
  7. 龙星镖局 | 2015 机器学习颁奖礼
  8. [转帖]国产闪存颗粒终于熬出头 紫光存储S100固态硬盘评测
  9. Android 反编译apk文件
  10. 我们是如何创造世界上最大的神经网络大学“Сognitive Agro Data Factory”的