基于SRS服务器实现Android-Web端视频通话(1):SRS服务器启用HTTPS

1,276 阅读2分钟

基于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-17ubuntu120.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #7120.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就可以。还望知道的老铁告诉原因。