不管是传统互联网还是移动互联网,实时数据传输都是刚需,比如以QQ、微信为代表的即时通信工具,能够实时传输文本和图片。其中一对一的图文通信叫做私聊,多对多的图文通信叫做群聊。 除了常见的图文即时通信,还有实时音视频通信,比如一对一的音频通话、一对一的视频通话等等,此时可接纳WebRTC技术,有关WebRTC的编程开辟及其项目实战参见《Android Studio开辟实战:从零基础到App上线(第3版)》的第20章“20.2 给App集成WebRTC”。
但是一对多的在线直播接纳WebRTC技术就不太合适了,因为WebRTC只管打洞把两边的网络打通,不考虑综合负载。一旦毗连WebRTC的设备多起来,整个WebRTC网络就会瘫痪。那么一对多的在线直播就要考虑部署独立的流媒体服务器,通过专门的流媒体传输协议,处理媒体源的音视频格式转换,以及音频流和视频流的数据分发工作。更多具体的FFmpeg开辟知识参见《FFmpeg开辟实战:从零基础到短视频上线》一书。
一、常见的四种流媒体传输协议对比
常见的流媒体传输协议主要有下面四类:RTSP协议、RTMP协议、SRT协议和RIST协议,关于这四种协议的具体说明参见之前的文章《使用RTMP协议构建电脑与手机的直播Demo》,这里不再赘述。
总的来说,固然SRT协议出现时间较晚,但是它的直播质量大大优于RTMP协议,以后必将成为国内直播领域主流的流媒体协议。下面就以SRT协议为例,介绍如何通过OBS Studio和SRT Streamer向流媒体服务器做SRT直播推流。
二、电脑端通过OBS Studio举行SRT直播推流
首先启动电脑上的流媒体服务器MediaMTX,具体的操作步骤详见《FFmpeg开辟实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”,也可参考之前的文章《详解MediaMTX的推拉流》。
接着启动电脑上的直播录制软件OBS Studio,具体的操作步骤详见之前的文章《结合OBS与MediaMTX实现SRT直播推流》。之后让OBS Studio对MediaMTX的srt地点“srt://127.0.0.1:8890?streamid=publish:live”推流,推流过程的OBS Studio录制界面如下图所示。
然后启动电脑上的流媒体播放器VLC media player,打开网络串流“srt://127.0.0.1:8890?streamid=read:live”,此时VLC media player的视频播放界面如下图所示。
结合OBS Studio的直播录制画面和VLC media player的直播观看界面,可知通过OBS Studio成功实现了SRT协议的直播功能。
三、手机端通过SRT Streamer举行SRT直播推流
首先启动云服务上的流媒体服务器SRS或者ZLMediaKit,在云服务器上部署和启动SRS或者ZLMediaKit比较贫困,三言两语说不清楚。假如大家想弄明白如何在云服务器上操作SRS或者ZLMediaKit,可在京东自营购买《FFmpeg开辟实战:从零基础到短视频上线》一书,联系作者咨询这两个流媒体服务器在云服务器上的具体运行过程。
接着启动手机上的直播录制软件SRT Streamer,具体的操作步骤详见之前的文章《使用SRT Streamer开启APP直播推流》。SRT Streamer启动后,点击屏幕下方的“Start Live”按钮,让SRT Streamer对ZLMediaKit的srt地点“srt://124.xxx.xxx.xxx:9000?streamid=#!::r=live/test,m=publish”推流,推流过程的SRT Streamer录制界面如下图所示。

观察华为云上的ZLMediaKit日志如下,可见SRT Streamer正在向后端的流媒体服务器推送直播流:- [MediaServer] [685314-event poller 0] SrtSession.cpp:103 onRecv | 1-11(223.104.51.155:11372)
- [MediaServer] [685314-event poller 0] SrtTransportImp.cpp:166 operator() | test(223.104.51.155:11372) 允许 srt 推流
- [MediaServer] [685314-event poller 0] Decoder.cpp:143 onTrack | Got track: H264
- [MediaServer] [685314-event poller 0] Decoder.cpp:143 onTrack | Got track: mpeg4-generic
- [MediaServer] [685314-event poller 0] Decoder.cpp:97 onStream | Add track finished
- [MediaServer] [685314-event poller 0] MediaSink.cpp:161 emitAllTrackReady | All track ready use 15ms
- [MediaServer] [685314-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:fmp4://__defaultVhost__/live/test
- [MediaServer] [685314-event poller 0] MultiMediaSourceMuxer.cpp:551 onAllTrackReady | stream: schema://__defaultVhost__/app/stream , codec info: mpeg4-generic[44100/2/16] H264[720/1280/0]
- [MediaServer] [685314-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:rtmp://__defaultVhost__/live/test
- [MediaServer] [685314-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:rtsp://__defaultVhost__/live/test
- [MediaServer] [685314-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:ts://__defaultVhost__/live/test
- [MediaServer] [685314-event poller 0] MediaSource.cpp:517 emitEvent | 媒体注册:hls://__defaultVhost__/live/test
复制代码 然后启动电脑上的流媒体播放器VLC media player,打开网络串流“srt://124.xxx.xxx.xxx:9000?streamid=#!::r=live/test,m=request”,此时VLC media player的视频播放界面如下图所示。

观察华为云上的ZLMediaKit日志如下,可见VLC media player正在从后端的流媒体服务器拉取直播流:- [MediaServer] [576478-event poller 0] SrtSession.cpp:103 onRecv | 2-16(112.5.138.145:57022)
- [MediaServer] [576478-event poller 0] SrtTransport.cpp:731 onShutdown | peer close connection
- [MediaServer] [576478-event poller 0] SrtSession.cpp:118 onError | 2-16(112.5.138.145:57022) 6(peer close connection)
- [MediaServer] [576478-event poller 0] SrtTransportImp.cpp:14 ~SrtTransportImp | test(112.5.138.145:57022) srt 播放器(__defaultVhost__/live/test)断开,耗时(s):16
复制代码 结合SRT Streamer直播录制画面和VLC media player的直播观看界面,可知通过SRT Streamer成功实现了SRT协议的直播功能。
更多具体的FFmpeg开辟知识参见《FFmpeg开辟实战:从零基础到短视频上线》一书。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |