115人参与 • 2024-08-04 • 媒体工具
不管是传统互联网还是移动互联网,实时数据传输都是刚需,比如以qq、微信为代表的即时通信工具,能够实时传输文本和图片。其中一对一的图文通信叫做私聊,多对多的图文通信叫做群聊。
除了常见的图文即时通信,还有实时音视频通信,比如一对一的音频通话、一对一的视频通话等等,此时可采用webrtc技术,有关webrtc的编程开发及其项目实战参见《android studio开发实战:从零基础到app上线(第3版)》一书的第20章“20.2 给app集成webrtc”。
书的第20章“20.2 给app集成webrtc”但是一对多的在线直播采用webrtc技术就不太合适了,因为webrtc只管打洞把双方的网络打通,不考虑综合负载。一旦连接webrtc的设备多起来,整个webrtc网络就会瘫痪。那么一对多的在线直播就要考虑部署独立的流媒体服务器,通过专门的流媒体传输协议,处理媒体源的音视频格式转换,以及音频流和视频流的数据分发工作。更多详细的ffmpeg开发知识参见《ffmpeg开发实战:从零基础到短视频上线》一书。
常见的流媒体传输协议主要有下面几类:
综上所述,虽然rtmp协议不够完善,但胜在出现早,赶上了好时代,现为国内直播领域主流的流媒体协议。下面就以rtmp为例,介绍如何通过obs studio和rtmp streamer向流媒体服务器做rtmp推流。
首先启动电脑上的流媒体服务器mediamtx,具体的操作步骤详见《ffmpeg开发实战:从零基础到短视频上线》一书的“10.2 ffmpeg推流和拉流”,也可参考之前的文章《详解mediamtx的推拉流》。
然后启动电脑上的流媒体播放器vlc media player,打开网络串流“rtmp://127.0.0.1:1935/stream”,此时vlc media player的视频播放界面如下图所示。
结合obs studio的直播录制画面和vlc media player的直播观看界面,可知通过obs studio成功实现了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开发实战:从零基础到短视频上线》。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论