1.前言
使用srs搭建了直播服务。
参考文章:
【1】.SRS源码分析-rtmp转rtc流程
【2】.WebRTC播放组件之 jswebrtc 使用与详述
【3】.如何使用 flv.js:播放 FLV 视频文件的完整指南
【4】.JSWebrtc – 支持 SRS 的 Webrtc 播放器 这个是 jswebrtc 的使用。
【5】.JSWebrtc 项目常见问题解决方案
【6】. vue使用JSWebrtc播放webrtc视频流
【7】.WebRTC
2.编辑配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| # vi /usr/local/srs/conf/rtmp2rtc.conf daemon off; srs_log_tank console;
http_server { enabled on; listen 8080; dir ./objs/nginx/html; }
http_api { enabled on; listen 1985; } stats { network 0; } rtc_server { enabled on; listen 8000; # UDP port # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate candidate 120.55.3.6; }
vhost __defaultVhost__ { rtc { enabled on; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc rtmp_to_rtc on; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp rtc_to_rtmp on; listen 1935; max_connections 1000; daemon off; srs_log_tank console;
http_server { enabled on; listen 8080; dir ./objs/nginx/html; }
http_api { enabled on; listen 1985; } stats { network 0; } rtc_server { enabled on; listen 8000; # UDP port # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate candidate $CANDIDATE; }
vhost __defaultVhost__ { rtc { enabled on; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc rtmp_to_rtc on; # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp rtc_to_rtmp on; } http_remux { enabled on; mount [vhost]/[app]/[stream].flv; }
tcp_nodelay on; min_latency on; play { gop_cache off; queue_length 10; mw_latency 100; }
publish { mr off; } }
|
3.启动
1 2 3 4
| docker run --rm -itd -p 10009:1935 -p 7080:8080 -p 1985:1985 \ --env CANDIDATE=xxx -p 8000:8000/udp \ -v /usr/local/srs/conf/rtmp2rtc.conf:/conf/rtmp2rtc.conf \ registry.cn-hangzhou.aliyuncs.com/ossrs/srs:v6.0-a1 ./objs/srs -c /conf/rtmp2rtc.conf
|
4.开启防火墙
将 udp 端口 8000打开,这点特别的重要,以至于我都费了很长时间才解决了这个问题。
5.配置nginx
配置nginx主要就是对内部端口进行隐藏,同时可以配置 https ,有些网站可能需要 https 才能访问,这样借助于 nginx 就可以直接操作了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
| server { listen 10014; server_name xxx;
add_header Access-Control-Allow-Headers *;
location /live/ { proxy_pass http://127.0.0.1:7080/live/; } location ~ /.+/.*\.(flv|m3u8|ts|aac|mp3)$ { proxy_pass http://127.0.0.1:7080$request_uri; } location /api/ { proxy_pass http://127.0.0.1:1985/api/; } location /rtc/ { if ($request_method = OPTIONS) { add_header Access-Control-Allow-Origin $http_origin; add_header Access-Control-Allow-Headers *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; return 200; } proxy_pass http://127.0.0.1:1985/rtc/; } }
server { listen 10015 ssl; server_name xxx;
ssl_certificate cert/xxx.pem; ssl_certificate_key cert/xxx.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;
add_header Access-Control-Allow-Headers *;
location /live/ { proxy_pass http://127.0.0.1:7080/live/; } location /players/ { proxy_pass http://127.0.0.1:7080/players/; } location ~ /.+/.*\.(flv|m3u8|ts|aac|mp3)$ { proxy_pass http://127.0.0.1:7080$request_uri; } location /api/ { proxy_pass http://127.0.0.1:1985/api/; } location /rtc/ { if ($request_method = OPTIONS) { add_header Access-Control-Allow-Origin $http_origin; add_header Access-Control-Allow-Headers *; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; return 200; } proxy_pass http://127.0.0.1:1985/rtc/; } }
|
6.前端展示
前端使用 jswebrtc 进行播放就可以了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
function createPlay(pullUrl, videoElement) { let videoPlay = new jswebrtc.Player(pullUrl, { video: videoElement, autoplay: true, onPlay: (obj: any) => { console.log('开始直播:', obj); livePara.liveState = true; }, }); videoPlay.play(); return videoPlay; }
|