直播支持https连接

转载请注明出处:https://blog.youkuaiyun.com/impingo
项目地址:https://github.com/pingostack/pingos
项目官网:https://pingos.io

描述

在浏览器上,https网页是不能引用http连接的,这也给很多人在网页上引用http-flv、hls和hls+直播地址带来困难。甚至使用srs实现https-flv的时候还需要配置反向代理。
这里介绍一种方案,直接通过修改pingos配置快速实现https-flv、https-ts以及hls、hls+的https服务。

部署

# 快速安装
git clone https://github.com/pingostack/pingos.git
cd pingos
./release.sh -i

修改配置

只需给nginx配置好https服务即可,如下:

listen 443 ssl;
ssl_certificate     /usr/local/pingos/cert/full_chain.pem; # 替换成你自己的公钥
ssl_certificate_key /usr/local/pingos/cert/privkey.pem; # 替换成你自己的私钥

完整的配置模板

user  root;
daemon on;
master_process on;
worker_processes  1;
#worker_rlimit 4g;
#working_directory /usr/local/openresty/nginx/logs;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

worker_rlimit_nofile 102400;
worker_rlimit_core   2G;
working_directory    /tmp;

pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
    multi_listen unix:/tmp/http 80;
    multi_listen unix:/tmp/rtmp 1935;

    dynamic_refresh_interval 10m;
    dynamic_domain_buckets   1001;
    resolver 114.114.114.114  valid=1m;
    resolver_timeout 30s;
}

stream_zone buckets=1024 streams=4096;

dynamic_conf conf/nginx_dynamic.conf 10;
dynamic_log logs/dynamic.log info;

rtmp {
    log_format log_bandwidth '{"app":"$app","name":"$name","bitrate":$bitrate,"args":"$args","timestamp":$ntp,"ts":"$time_local","type":"$command","remote_addr":"$remote_addr","domain":"$domain"}';
    access_log logs/bandwidth.log log_bandwidth trunc=60s;

    server {
        listen 1935;
        serverid 000;
        out_queue 2048;
        server_name live.pingos.io;
        rtmp_auto_pull on;
        rtmp_auto_pull_port unix:/tmp/rtmp;

        application push {
            live on;
            push rtmp://127.0.0.1/live app=live;
        }

        application live {
#	    pull http://222.186.34.242/live/stream app=live;
           live_record off;
           live_record_path /tmp/record;

#           oclp_play http://127.0.0.1:9980/callBack stage=start,update,done;
#            recorder r1{
#                record all;
#                record_path /tmp/record;
#            }

#            exec_publish bash -c "ffmepg -i rtmp://127.0.0.1/live/$name -c copy /tmp/mp4/$name-$starttime.mp4";
#	    oclp_play http://127.0.0.1:999 stage=start args=ip=$remote_host;
#            exec_pull bash -c "ffmpeg -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov -c copy -f flv rtmp://127.0.0.1/live/1";
            live on;
            hls on;
            hls_path /tmp/hls;
            hls_fragment 4000ms;
#            hls_max_fragment 10000ms;
            hls_playlist_length 12000ms;
            hls_type live;

            hls2memory on;
            mpegts_cache_time 20s;

            hls2_fragment 4000ms;
            hls2_max_fragment 5000ms;
            hls2_playlist_length 12000ms;

            wait_key on;
            wait_video on;
            cache_time 1s;
            send_all on;
            low_latency off;
            fix_timestamp 2s;
# h265 codecid, default 12
            hevc_codecid  12;
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_X-Forwarded-For" "$http_X-Real-IP" "$host"';


    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #reset_server_name www.test1.com www.test2.com;
    #gzip  on;
    server {
        listen 80;
        listen 443 ssl;
        ssl_certificate     /usr/local/pingos/cert/full_chain.pem;
        ssl_certificate_key /usr/local/pingos/cert/privkey.pem;
        location /rtmp_stat {
            rtmp_stat all;
            rtmp_stat_stylesheet /stat.xsl;
        }

        location /xstat {
            rtmp_stat all;
        }

        location /sys_stat {
            sys_stat;
        }
        location ~ .mp4$ {
            root html;
            #mp4;
        }

        location /control {
            rtmp_control all;
        }
         location /flv {
             flv_live 1935 app=live;
             add_header 'Access-Control-Allow-Origin' '*';
             add_header "Access-Control-Allow-Credentials" "true";
             add_header "Access-Control-Allow-Methods" "*";
             add_header "Access-Control-Allow-Headers" "Content-Type,Access-Token";
             add_header "Access-Control-Expose-Headers" "*";
         }
         location /ts {
             ts_live 1935 app=live;
             expires -1;
             add_header 'Access-Control-Allow-Origin' '*';
             add_header "Access-Control-Allow-Credentials" "true";
             add_header "Access-Control-Allow-Methods" "*";
             add_header "Access-Control-Allow-Headers" "Content-Type,Access-Token";
             add_header "Access-Control-Expose-Headers" "*";
         }
         location /hls {
            # Serve HLS fragments
             types {
                 application/vnd.apple.mpegurl m3u8;
                 video/mp2t ts;
             }
             root /tmp;
             expires -1;
             add_header Cache-Control no-cache;
             add_header 'Access-Control-Allow-Origin' '*';
             add_header "Access-Control-Allow-Credentials" "true";
             add_header "Access-Control-Allow-Methods" "*";
             add_header "Access-Control-Allow-Headers" "Content-Type,Access-Token";
             add_header "Access-Control-Expose-Headers" "*";
         }

        location /hls2 {
             hls2_live 1935 app=live;
             add_header 'Access-Control-Allow-Origin' '*';
             add_header Cache-Control no-cache;
             add_header "Access-Control-Allow-Credentials" "true";
             add_header "Access-Control-Allow-Methods" "*";
             add_header "Access-Control-Allow-Headers" "Content-Type,Access-Token";
             add_header "Access-Control-Expose-Headers" "*";
         }
         location / {
             chunked_transfer_encoding on;
             root html/;
         }
    }
}

QQ交流群:697773082

微信(cczjp1989)

在这里插入图片描述

<think> 首先,用户的问题是:“我想了解SRS是否支持HTTPS”。我需要基于提供的引用来回答。 回顾引用: - 引用[1]:提到开发者支持和合作,包括向SRS社区提交需求或功能请求,以及寻找转码插件支持。引用以[^1]结束。 - 引用[2]:直接提到“SRS关于HTTPS和WebRTC推流”,并给出了一个命令:`./httpx-static -t 80 -s 443 -k server.key -c server.crt -r /root/srs/trunk/research -p http://localhost:1985/rtc/`。引用以[^2]结束。 - 引用[3]:描述在CentOS 7上编译安装SRS和FFmpeg,支持HTTPS转拉流,并提到添加软链接以避免错误。引用以[^3]结束。 用户的问题是关于SRS是否支持HTTPS。从引用[2]中,明确提到“SRS关于HTTPS和WebRTC推流”,并提供了一个命令,这表明SRS确实支持HTTPS。命令中包括`-s 443`(HTTPS端口)和`-k server.key -c server.crt`(SSL证书),这证实了HTTPS支持。 引用[3]也提到“支持https转拉流”,并给出了安装步骤,进一步确认了HTTPS功能。 因此,答案应该是肯定的:SRS支持HTTPS。 现在,根据系统级指令: - 回答必须使用中文。 - 结构清晰,逐步解决问题。 - 引用的段落末尾自然地添加引用标识,例如[^1]。 - 对于数学表达式,使用$...$或$$...$$格式,但用户的问题是关于SRS和HTTPS,不涉及数学,所以可能不需要数学表达式。但指令说“所有行内数学表达式必须使用$...$格式”,但这里没有数学内容,所以我可以忽略。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识。 在回答中,我需要整合引用。例如,当提到SRS支持HTTPS时,可以引用[2]和[^3]。 回答结构: 1. 直接回答用户的问题:SRS支持HTTPS。 2. 解释如何支持,基于引用。 3. 提供一些细节,如配置步骤或命令示例。 4. 在适当的地方添加引用。 最后,生成相关问题。 系统指令说:“生成相关问题”,并在示例中显示了“§§相关问题§§”部分。 所以,我的回答应该包括: - 主体回答。 - 相关问题列表。 主体回答步骤: - 步骤1: 确认支持。 - 步骤2: 描述支持方式(从引用[2])。 - 步骤3: 可能提到安装和配置(从引用[3])。 - 步骤4: 添加引用标识。 确保回答真实可靠,基于引用。 最终回答结构: - 用中文。 - 开头直接回应。 - 详细解释。 - 结尾相关问题。 </think>### SRS是否支持HTTPS? 是的,SRS(Simple Real-time Server)确实支持HTTPS。SRS是一个开源的流媒体服务器,广泛用于直播和WebRTC应用。它通过内置模块或外部工具(如`httpx-static`)来提供HTTPS支持,确保数据传输的安全性。下面我将逐步解释SRS的HTTPS功能、配置方法以及相关注意事项,帮助您全面理解。 #### 步骤1: SRS的HTTPS支持原理 SRS支持HTTPS主要通过SSL/TLS加密实现数据安全传输。核心功能包括: - **HTTPS推流和拉流**:SRS可以通过配置SSL证书,将HTTP流量转换为HTTPS(端口443),支持WebRTC、HLS等协议的安全传输。例如,使用`httpx-static`工具(一个内置或辅助组件)来处理SSL握手和加密过程[^2]。 - **兼容性**:SRS支持标准的SSL证书(如`.key`和`.crt`文件),可与自签名或CA颁发的证书配合使用。 #### 步骤2: 如何配置SRS支持HTTPS 基于引用中的信息,配置SRS的HTTPS功能通常涉及以下步骤(以Linux环境为例): 1. **准备SSL证书**: - 获取有效的SSL证书(例如,通过Let's Encrypt或自生成),包括`server.key`(私钥)和`server.crt`(公钥证书)。 - 证书路径需在配置中指定,确保SRS能访问。 2. **运行HTTPS工具**: - 使用`httpx-static`命令来启用HTTPS。命令示例如下(从引用[2]提取): ```bash ./httpx-static -t 80 -s 443 -k server.key -c server.crt -r /root/srs/trunk/research -p http://localhost:1985/rtc/ ``` - 参数说明: - `-t 80`: 指定HTTP端口(可选,用于重定向到HTTPS)。 - `-s 443`: 指定HTTPS端口(强制加密)。 - `-k server.key` 和 `-c server.crt`: 指定私钥和证书文件。 - `-r` 和 `-p`: 定义资源路径和代理地址(根据实际安装调整)。 - 此命令启动HTTPS服务,将流量转发到SRS核心服务[^2]。 3. **安装和依赖处理**: - 在编译安装SRS时,需确保系统支持OpenSSL库(引用[3]提到在CentOS 7上的处理): ```bash # 编译安装SRS和FFmpeg后,添加软链接避免依赖错误 ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1 ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1 ``` - 这解决了库缺失问题,确保HTTPS功能正常运行[^3]。 #### 步骤3: 注意事项和最佳实践 - **性能考虑**:HTTPS加密会增加少量CPU开销,建议在带宽敏感场景中测试性能。如果遇到问题,可以通过SRS社区寻求支持(如提交功能请求或使用插件优化)[^1]。 - **安全性**:定期更新证书以防止过期风险。生产环境中,推荐使用CA颁发的证书而非自签名。 - **验证方法**:配置后,使用浏览器或工具(如`curl`)访问`https://your-domain:443`测试连接。如果证书无效,浏览器会显示警告,需确保证书安装正确。 总结:SRS通过灵活的工具链和配置选项,全面支持HTTPS,保障流媒体传输的安全性和兼容性。如果您需要进一步的定制或遇到具体问题,参考官方文档或社区资源(如SRS GitHub仓库)能提供更多帮助[^1][^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值