论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
FFmpeg开发条记(三十二)利用RTMP协议构建电脑与手机的 ...
FFmpeg开发条记(三十二)利用RTMP协议构建电脑与手机的直播Demo ...
瑞星
金牌会员
|
2024-6-23 11:09:37
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
862
|
帖子
862
|
积分
2586
不管是传统互联网照旧移动互联网,实时数据传输都是刚需,比如以QQ、微信为代表的即时通信工具,能够实时传输文本和图片。其中一对一的图文通信叫做私聊,多对多的图文通信叫做群聊。
除了常见的图文即时通信,还有实时音视频通信,比如一对一的音频通话、一对一的视频通话等等,此时可采用WebRTC技术,有关WebRTC的编程开发及其项目实战参见《Android Studio开发实战:从零底子到App上线(第3版)》一书的第20章“20.2 给App集成WebRTC”。
但是一对多的在线直播采用WebRTC技术就不太合适了,因为WebRTC只管打洞把两边的网络买通,不思量综合负载。一旦连接WebRTC的设备多起来,整个WebRTC网络就会瘫痪。那么一对多的在线直播就要思量部署独立的流媒体服务器,通过专门的流媒体传输协议,处理媒体源的音视频格式转换,以及音频流和视频流的数据分发工作。更多具体的FFmpeg开发知识参见《FFmpeg开发实战:从零底子到短视频上线》一书。
一、常见的四种流媒体传输协议对比
常见的流媒体传输协议重要有下面几类:
RTSP协议:网络耽误很低,且支持倍速播放功能。但客户端的对该协议支持很弱,不仅ios不支持播放rtsp流,连大多数浏览器也不能直接播放rtsp流。而且RTSP对服务端的复杂度要求比较高,以至流媒体服务器SRS干脆放弃支持RTSP协议,直播录制软件OBS Studio也没支持该协议。现在RTSP重要应用于对实时性要求高的安防监控领域。
RTMP协议:网络耽误较低,稳定性很高,纵然网络连接质量欠佳,该协议也能很好地传输数据。但RTMP原本因FLV格式而生,客户端要用Flash播放器播放rtmp链接。而FLV格式后来没落了,以至HTML5规范干脆移除了Flash插件,导致如今浏览器都不支持rtmp链接,连FFmpeg也迟至6.1版才给rtmp协议支持hevc格式。不外好在RTMP的稳定性高,服务端的实现相对容易,因此被大量应用于网络直播领域。
SRT协议:拥有固定耽误特性,可以抹平网络的抖动,大大降低视频画面的卡顿征象。该协议引入了AES加密算法,无需像RTSP和RTMP那样引入专门的SSL证书。作为较新的流媒体协议,SRT支持更多的音视频封装格式。只是该协议的支持库libsrt在2017年才开源,因此未能在移动互联网时代大量铺开,现在重要应用于大型电视直播领域。
RIST协议:该协议同样于2017年提出,与SRT协议是竞争关系。RIST和SRT具有相同的加密级别,都支持大容量流媒体和前向纠错功能。该协议的订定时间比SRT还晚,虽然晚订定会多思量新功能,比如RIST支持点到多点广播,而SRT不支持;但是晚订定拖累了各开源软件对RIST的支持力度,比如OBS Studio早在25.0开始支持SRT,迟至27.0才开始支持RIST,另一个直播录制软件RootEncoder已支持SRT尚未支持RIST,流媒体服务器MediaMTX已支持SRT尚未支持RIST。现在RIST在国内的应用还很少。
综上所述,虽然RTMP协议不够美满,但胜在出现早,赶上了好时代,现为国内直播领域主流的流媒体协议。下面就以RTMP为例,先容如何通过OBS Studio和RTMP Streamer向流媒体服务器做RTMP推流。
二、电脑端通过OBS Studio举行RTMP直播推流
首先启动电脑上的流媒体服务器MediaMTX,具体的利用步骤详见《FFmpeg开发实战:从零底子到短视频上线》一书的“10.2 FFmpeg推流和拉流”,也可参考之前的文章《详解MediaMTX的推拉流》。
接着启动电脑上的直播录制软件OBS Studio,具体的利用步骤详见之前的文章《利用OBS Studio开启RTMP直播推流》。之后让OBS Studio对MediaMTX的rtmp所在“rtmp://127.0.0.1:1935/stream”推流,推流过程的OBS Studio录制界面如下图所示。
然后启动电脑上的流媒体播放器VLC media player,打开网络串流“rtmp://127.0.0.1:1935/stream”,此时VLC media player的视频播放界面如下图所示。
结合OBS Studio的直播录制画面和VLC media player的直播观看界面,可知通过OBS Studio乐成实现了RTMP协议的直播功能。
三、手机端通过RTMP Streamer举行RTMP直播推流
首先启动云服务上的流媒体服务器SRS或者ZLMediaKit,在云服务器上部署和启动SRS或者ZLMediaKit比较麻烦,三言两语说不清楚。假如各人想弄明白如何在云服务器上利用SRS或者ZLMediaKit,可在京东自营购买《FFmpeg开发实战:从零底子到短视频上线》一书,联系作者咨询这两个流媒体服务器在云服务器上的具体运行过程。
接着启动手机上的直播录制软件RTMP Streamer,具体的利用步骤详见之前的文章《利用RTMP Streamer开启APP直播推流》。之后让RTMP Streamer对SRS或者ZLMediaKit的rtmp所在“rtmp://124.xxx.xxx.xxx/live/test”推流,推流过程的RTMP Streamer录制界面如下图所示。
观察华为云上的ZLMediaKit日志如下,可见RTMP Streamer正在向后端的流媒体服务器推送直播流:
[MediaServer] [412449-event poller 0] RtmpProtocol.cpp:442 check_C1_Diges | check rtmp complex handshark success!
[MediaServer] [412449-event poller 0] RtmpSession.cpp:128 operator() | 1-11(223.xxx.xxx.xxx:61202) publish 回复时间:0ms
[MediaServer] [412449-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:rtmp://__defaultVhost__/live/test
[MediaServer] [412449-event poller 0] MediaSink.cpp:161 emitAllTrackReady | All track ready use 215ms
[MediaServer] [412449-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:fmp4://__defaultVhost__/live/test
[MediaServer] [412449-event poller 0] MultiMediaSourceMuxer.cpp:551 onAllTrackReady | stream: rtmp://__defaultVhost__/live/test , codec info: mpeg4-generic[32000/2/16] H264[480/640/0]
[MediaServer] [412449-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:rtsp://__defaultVhost__/live/test
[MediaServer] [412449-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:ts://__defaultVhost__/live/test
[MediaServer] [412449-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:hls://__defaultVhost__/live/test
复制代码
然后启动电脑上的流媒体播放器VLC media player,打开网络串流“rtmp://xxx.xxx.xxx/live/test”,此时VLC media player的视频播放界面如下图所示。
观察华为云上的ZLMediaKit日志如下,可见VLC media player正在从后端的流媒体服务器拉取直播流:
[MediaServer] [412449-event poller 0] RtmpProtocol.cpp:442 check_C1_Digest | check rtmp complex handshark success!
[MediaServer] [412449-event poller 0] RtmpSession.cpp:367 operator() | 2-16(112.xxx.xxx.xxx:51055) play 回复时间:1ms
复制代码
结合RTMP Streamer直播录制画面和VLC media player的直播观看界面,可知通过RTMP Streamer乐成实现了RTMP协议的直播功能。
更多具体的FFmpeg开发知识参见
《FFmpeg开发实战:从零底子到短视频上线》
一书。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
瑞星
金牌会员
这个人很懒什么都没写!
楼主热帖
复习一下Linux常用命令,孰能生巧~ ...
OpenSSL RSA相关基本接口和编程示例 ...
一次服务器被入侵的处理过程分享 ...
适用于顺序磁盘访问的1分钟法则 ...
Oracle实现金额小写转大写函数 ...
2022护网面试题总结
Android studio 连接SQLite数据库 +创 ...
执行计划缓存,Prepared Statement性能 ...
《Redis设计与实现》
Blazor概述和路由
标签云
存储
挺好的
服务器
浏览过的版块
网络安全
快速回复
返回顶部
返回列表