WebRTC服务搭建(使用SRS)
原贴:https://www.psvmc.cn/article/2021-01-21-webrtc-srs.html
WebRTC服务搭建(使用SRS)
SRS4
目前SRS对WebRTC的支持进度如下:
- SRS4.0.14,支持了RTMP推流,WebRTC播放。
- SRS4.0.76,支持了WebRTC推流,WebRTC播放。
- SRS4.0.95,支持了WebRTC推流,RTMP播放。
Srs4已经支持WebRTC的推流和拉流了。
1
|
CANDIDATE="49.4.27.42"
|
注意如果RTMP转WebRTC流播放,必须使用配置文件rtmp2rtc.conf
1
|
CANDIDATE="49.4.27.42"
|
端口说明
端口 | 作用 |
---|---|
8080(tcp) | 网页访问对应端口 |
1985(tcp) | RTC接口对应端口 |
1935(tcp) | RTMP端口 |
8000(udp) | WebRTC端口 |
注意
一定要开放这几个端口。
查看端口是否畅通
TCP端口
1
|
telnet 49.4.27.42 8080
|
UDP端口
1
|
# 服务端
|
我们可以访问
WebRTC推流地址
http://49.4.27.42:8080/players/rtc_publisher.html
WebRTC播流地址
http://49.4.27.42:8080/players/rtc_player.html
播放WebRTC是不需要https,但是推送WebRTC是必须要https,否则我们获取不了媒体。
Nginx反代
配置域名和HTTPS
1
|
upstream live_xhkjt {
|
访问地址
原来的代码逻辑是根据推流地址变换的,所以不能正常使用
示例推流代码
https://gitee.com/psvmc/srs-push.git
推流
使用官方Docker推流
使用官方推荐的docker推流
1
|
docker run --rm registry.cn-hangzhou.aliyuncs.com/ossrs/srs:encoder ffmpeg -stream_loop -1 -re -i ./doc/source.200kbps.768x320.flv -c copy -f flv rtmp://49.4.27.42/live/livestream
|
WebRTC推流
注意以下情况才能正常推流
- 本地HTTP,地址为localhost或127.0.0.1
- 公网 HTTPS
或者
HTTP在Chrome浏览器快捷方式中添加
1
|
--ignore-certificate-errors --allow-running-insecure-content --unsafely-treat-insecure-origin-as-secure="http://49.4.27.42:8080"
|
调试
1
|
chrome://webrtc-internals
|
示例推流代码
https://gitee.com/psvmc/srs-push.git
这个是我稍微修改后的代码,主要为了便于理解。
注意
当使用SRS这样的媒体中转服务器时,是不再需要stun和turn服务器的。
因为我们中转服务器就在公网上,并且推流是单向的从客户端到服务器所以就不需要stun服务器了。
示例代码:
1
|
function SrsRtcPublisherAsync () {
|
从代码中我们可以看几个关键的步骤
1
|
self.pc = new RTCPeerConnection(null);
|
而其中的远程描述就是请求SRS的服务器接口获取的。这样就建立好连接了,是不是很简单。
本地推流
下载FFMPEG
https://ffmpeg.org/download.html#build-windows
添加到环境变量
D:\Tools\ffmpeg\bin
相关测试视频文件
链接:https://pan.baidu.com/s/1RIJOAwgVDdEV0UMHNaxVjQ
提取码:psvm
文件推流
1
|
ffmpeg -re -i ./source.200kbps.768x320.flv -c copy -f flv -y rtmp://49.4.27.42/live/livestream
|
本地桌面推流
桌面整体推流
1
|
ffmpeg -f gdigrab -i desktop -framerate 30 -vcodec libx264 -b:v 512k -preset ultrafast -pix_fmt yuv422p -f flv rtmp://49.4.27.42/live/livestream
|
多屏只推送主屏
1
|
ffmpeg -f gdigrab -s 1920x1080 -i desktop -framerate 30 -vcodec libx264 -b:v 512k -preset ultrafast -pix_fmt yuv422p -f flv rtmp://49.4.27.42/live/livestream
|
注意
-s 1920x1080
表示分辨率
摄像头麦克风推流
获取设备名称
1
|
ffmpeg -list_devices true -f dshow -i dummy
|
我这获取到的
麦克风:麦克风 (Realtek Audio)
摄像头:Integrated Webcam
查看摄像头视频
1
|
ffplay -f dshow -i video="Integrated Webcam"
|
摄像头推流
1
|
ffmpeg -f dshow -i video="Integrated Webcam" -vcodec libx264 -b:v 512k -preset:v ultrafast -f flv rtmp://49.4.27.42/live/livestream
|
摄像头+麦克风推流
1
|
ffmpeg -f dshow -i video="Integrated Webcam":audio="麦克风 (Realtek Audio)" -vcodec libx264 -b:v 512k -b:a 16k -r 25 -acodec copy -preset ultrafast -f flv rtmp://49.4.27.42/live/livestream
|
流播放
RTMP流
VLC播放器
播放地址
rtmp://49.4.27.42/live/livestream
FLV流
可以通个这个播放
http://49.4.27.42:8080/players/srs_player.html
其中播放地址
录制
1
|
vhost __defaultVhost__ {
|
默认我们按照上文配置就可以保证推流的时候自动录制,但是并不是所有的流都要录制
我们可以配置多个vhost,根据域名的不同来区分是否录制
1
|
vhost live1.psvmc.cn {
|
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库