要做一个在浏览器推摄像头流,在服务端拉流并在后台处理再展示给前端的实时服务。
选择了SRS流媒体服务器。
官方文档:https://gitee.com/winlinvip/srs-wiki/wikis/v4_CN_Home
一、下载并安装 SRS(这里没什么坑)
git clone https://gitee.com/winlinvip/srs.oschina.git srs
cd srs/trunk
./configure && make
二、配置网络端口打开(默认开通可跳过)
因为我的服务器是受安全组控制的,想要正常运行webrtc和rtmp的功能,一些需要开通的端口:
UDP_8000
TCP_1985
TCP_1935
TCP_8080
三、打开服务器的SRS网页
http://{SRS服务器所在ip}:8080/players/rtc_publisher.html
这时推流是不行的,有没有成功推流可以打开console网页查看:
http://{SRS服务器所在ip}:1985/console/ng_index.html
四、原因就是浏览器要求使用webrtc时需要https
在网上搜索说配置浏览器的启动参数,这种方法试了不行。
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --ignore-certificate-errors --allow-running-insecure-content --unsafely-treat-insecure-origin-as-secure="http://{ip}:8080"
采取的方案是配置一台Nginx,申请个免费的HTTPS证书,并配置转发:
4.1 安装Nginx
yum install -y nginx
4.2配置Nginx证书
参考 https://blog.csdn.net/yybk426/article/details/94649834
4.3配置Nginx
上图前面是证书的配置,后面是SRS的转发配置:
说明:
所有通过HTTPS 443端口访问的转发到本地(Nginx服务器)8080端口;
其中,带rtc的转发到本地(Nginx服务器)1985端口
原因是:打开推流界面->网络,js发送了一个请求到服务器1985端口
地址是http://{ip}:1985/rtc/v1/publish/
所以,把https://{ip}/rtc/v1/publish/ 映射成http://{ip}:1985/rtc/v1/publish/
五、推拉流
用SRS网页的默认地址就可以正常webrtc推流了,拉流也一样。
或者使用rtmp拉webrtc推上去的流,再或者rtmp推流,webrtc拉流也可。