基于SRS服务器实现Android-Web端视频通话(1):SRS服务器启用HTTPS
基于SRS服务器实现Android-Web端视频通话(1):SRS服务器启用HTTPS
基于SRS服务器实现Android-Web端视频通话(2):Android端从SRS服务器拉取WebRTC流
基于SRS服务器实现Android-Web端视频通话(3):Android端向SRS服务器推送WebRTC流
安装环境:
Linux version 5.8.0-63-generic (buildd@lgw01-amd64-035) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #71~20.04.1-Ubuntu SMP Thu Jul 15 17:46:08 UTC 2021
源码,如果github访问速度过慢,可以到镜像地址。下载文件操作不做阐述。
注意:如果要使用WebRTC,则需要使用SRS4.0版本。
官方文档,还是很全的。
由于网页想要调用摄像头和麦克风需要使用HTTPS或者localhost,所以要实现Android-Web端互通,则需要启用HTTPS。SRS是支持HTTP、HTTPS流互转的,可以Android端请求HTTP(如果使用HTTPS,没有有效证书的话,可以忽略证书请求)、Web端HTTPS。
编译完后先来看下conf目录,用于启动服务使用的配置文件。
root@ubuntu:/home/shencoder/srs/trunk/conf# ls
bandwidth.conf exec.conf http.hls.conf push.flv.conf
clion.conf ffmpeg.transcode.conf http.hooks.callback.conf push.mpegts.over.udp.conf
clion-ingest.conf forward.master.conf http.mp3.live.conf push.rtsp.conf
compatible.conf forward.slave.conf http.server.conf realtime.conf
console.conf full.conf https.flv.live.conf regression-test.conf
dash.conf go-oryx-edge2.conf https.hls.conf rtc2rtmp.conf
demo.19350.conf go-oryx-edge.conf https.hooks.callback.conf rtc.conf
demo.conf hds.conf https.rtc.conf rtmp.conf
docker.conf hls.conf http.ts.live.conf security.deny.publish.conf
dvr.mp4.conf hls.realtime.conf ingest.conf server.crt
dvr.path.conf http.aac.live.conf ingest.rtsp.conf server.key
dvr.segment.conf http.api.raw.conf origin.cluster.edge.conf srs.conf
dvr.session.conf http.flv.live.conf origin.cluster.serverA.conf srt2rtc.conf
edge2.conf http.flv.live.edge1.conf origin.cluster.serverB.conf srt.conf
edge.conf http.flv.live.edge2.conf origin.cluster.serverC.conf transcode2hls.audio.only.conf
edge.token.traverse.conf http.heartbeat.conf origin.conf transform.edge.conf
dvr.xxx.conf:录像相关
https.xxx.conf:https相关
rtcxxx.conf:WebRTC相关
我们也可以自定义配置文件来满足我们的需求。
比如说我们要满足一个https、WebRTC、RTMP、录像的功能,大概就是这样(https.rtc2rtmp.dvr.conf):
listen 1935;
max_connections 1000;
daemon off;
srs_log_tank console;
http_server {
enabled on;
listen 8080;
dir ./objs/nginx/html;
https {
enabled on;
listen 8088;
key ./conf/server.key;
cert ./conf/server.crt;
}
}
http_api {
enabled on;
listen 1985;
https {
enabled on;
listen 1990;
key ./conf/server.key;
cert ./conf/server.crt;
}
}
stats {
network 0;
}
rtc_server {
enabled on;
# Listen at udp://8000
listen 8000;
#
# The $CANDIDATE means fetch from env, if not configed, use * as default.
#
# The * means retrieving server IP automatically, from all network interfaces,
# @see https://github.com/ossrs/srs/wiki/v4_CN_RTCWiki#config-candidate
candidate $CANDIDATE;
}
vhost __defaultVhost__ {
rtc {
enabled on;
rtc_to_rtmp on;
}
http_remux {
enabled on;
mount [vhost]/[app]/[stream].flv;
}
dvr {
enabled on;
dvr_path ./objs/nginx/html/[app]/[stream].[timestamp].flv;
dvr_plan session;
}
}
上面这种方式是系统自带的,要注意的是web端https页面不能调用http请求,推拉流也要是https的地址,注意端口。
还有另外一个操作,相当于是转发,查看具体操作流程。
有一个问题就是部分Chrome浏览器无法正常使用WebRTC,黑屏,使用Edge就可以。还望知道的老铁告诉原因。