涉及技术点
- nginx
- ffmpeg
- rtmp 协议
- webrtc
- WCS服务器
其实整体来说可能跟 mediasoup 没有太多紧密联系(站在bs结构)h5的方式没有办法直接推流到 rtmp地址,下面一点一点来总结整理。
nginx 方面
这里研究了 nginx 搭建rtmp, 安装nginx 需要 --with-rtmp-module,
安装成功之后配置rtmp服务,
rtmp {
server {
listen 1935;
application room {
live on;
#record keyframes;
#record_path /tmp;
#record_max_size 128K;
#record_interval 30s;
#record_suffix .this.is.flv;
#on_publish http://localhost:8080/publish;
#on_play http://localhost:8080/play;
#on_record_done http://localhost:8080/record_done;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
hls_fragment 10s; #每个视频切片的时长。
hls_playlist_length 60s; #总共可以回看的事件,这里设置的是1分钟。
#hls_continuous on; #连续模式。
#hls_cleanup on; #对多余的切片进行删除。
#hls_nested on; #嵌套模式。
}
}
}
重启 nginx
ffmpeg 模拟推流
这里没有太多东西要说的
ffmpeg -re -i /home/lee/video.mp4 -vcodec copy -acodec copy -b:v 800k -b:a 32k -f flv rtmp://localhost/room/123123
rtmp 协议
RTMP(Real Time Message Protocol)由 Adobe 公司提出流媒体协议,并且是私有协议,未完全公开,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题,RTMP协议一般传输的是 flv,f4v 格式流。一般在 TCP 1个通道上传输命令和数据。
- 优势:
在于低延迟,稳定性高,支持所有摄像头格式
专为流媒体开发的协议,对底层的优化比其它协议更加优秀
- 劣势:
浏览器需要加载 flash插件才能播放。
RTMP 为 Adobe 私有协议,很多设备无法播放,特别是在 iOS 端,需要使用第三方解码器才能播放
基于 TCP 传输,非公共端口,可能会被防火墙阻拦
webrtc to rtmp 服务端转换的话。
这里转换可能会耗费资源较多。
当然还有其他方案,不需要服务端转换, 直接客户端推流 rtmp 和 webrtc 两种 ,如果推rtmp流就需要用端的方式,纯bs结构不支持了, 前面rtmp提到了
wcs服务器
这块不太了解了就
参考连接
- https://www.kutu66.com/Web_Development/article_2367
- https://www.helplib.cn/%E5%AD%A6%E4%BB%A5%E8%87%B4%E7%94%A8/7-ways-to-stream-rtsp-on-the-page