SRS视频媒体服务器-docker启动:更换默认端口时的错误

一、概述

在使用srs视频服务器时,一直都是使用默认的端口配置。但是,这些默认端口在某些时候可能已经被占用了,就需要更改端口了。

注意注意注意:使用docker启动srs,在更换端口一定要下面的内容。

二、使用docker启动srs,换端口时错误的方式

网络拓扑图:

 

启动命令:外部端口1936映射内部1935  和 外部端口8001映射内部8000端口

docker run  -it --name srs4.0-test --restart=always -v C:\5G\5GApi\static\DVR-video:/usr/local/srs/static/DVR-video  -p 1936:1935 -p 1985:1985 -p 8080:8080 -p 10080:10080/udp  -p 8001:8000/udp registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4  ./objs/srs -c conf/rtmp2rtc.conf

修改rtmp2rtc.conf配置文件:

1、给容器安装vim

#查看运行的docker
docker ps

#新开一个终端进入docker容器
docker exec -it srs4.0-test /bin/bash

#先更新apt-get
apt-get update

#安装vim
apt-get install vim -y

2、配置容器可以访问宿主机的域名

进入下面的目录:
C:\Windows\System32\drivers\etc

修改hosts文件:添加
127.0.0.1  host.docker.internal

#就可以在容器中通过  http://host.docker.internal:8888 访问到宿主机上部署的服务了

3、修改srs的配置文件

docker exec -it srs4.0 /bin/bash 
#修改配置文件(修改步骤1中默认的配置文件)
vi conf/rtmp2rtc.conf  

###########配置文件内容

listen              1935;  #必须有,rtmp协议,公网必须开放这个端口
max_connections     1000;
daemon              off;
srs_log_tank        console;

http_api {
    enabled         on; 
    #必须有,webrtc播放需要,可以在nginx配置转发,location /rtc {},无需开放该端口
    listen          1985;
}

http_server {
    enabled         on;
    listen          8080;
    #开发阶段需要,这个是srs自带的web页面,可以使用nginx代理
    dir             ./objs/nginx/html;

   
}


rtc_server {  #webrtc服务,必须开放公网8000端口
    enabled on;
    listen 8000;
    candidate 公网IP地址;
}

# @doc https://github.com/ossrs/srs/issues/1147#issuecomment-577607026
vhost __defaultVhost__ {
    
    #这个是rtc配置,开启rtmp转rtc
    rtc {
       enabled     on;
        rtmp_to_rtc on;
        rtc_to_rtmp on;
    }
   
    #开启http-flv
    http_remux {
        enabled     on;
        mount       [vhost]/[app]/[stream].flv;
    }
   
    #rtmp的低时延配置
    tcp_nodelay     on;
    min_latency     on;

    play {
        gop_cache       off;
        queue_length    10;
        mw_latency      100;
    }

    publish {
        mr off;
    }


   #视频录制功能
   dvr {
        enabled             on;
        dvr_path            /usr/local/srs/static/DVR-video/[app]/[01]-[2006]/[02]-day/[stream]-[2006]-[01]-[02]_[15]_[04]_[05].mp4;
        dvr_plan            session; #存一次推流中的所有的视频
        dvr_duration        30;
        dvr_wait_keyframe   on;
    }
    
    http_hooks {
	    #回调函数,on是启动,off是中止
        enabled         off;
        on_dvr          http://host.docker.internal:8888/srs/dvr;
        #视频录制的回调函数,一个视频录制完成后,会向给url发起post请求
        on_publish      http://host.docker.internal:8888/srs/publish;
        on_unpublish    http://host.docker.internal:8888/srs/un_publish;
        on_play         http://host.docker.internal:8888/srs/play;
        on_stop         http://host.docker.internal:8888/srs/stop;

    }

}

此时推流rtmp到srs服务器时,在使用srs自带的播放器拉取webrtc流,就会发现拉取不到,你可以停止推流rtmp。

到:C:\5G\5GApi\static\DVR-video  目录下查看是否有录制的视频,发现有该视频。

总结:

1、这种配置,可以录制,但是不能播放。

2、具体原因在于公网IP只将8001和1936端口映射个宿主机,而宿主机又是将8001和1936映射给srs容器的8000和1935,最致命的是srs服务器是根据配置文件中的8000和1935端口来生成对应可以播放webrtc流的验证数据,导致无法播放

三、正确的方法

1、启动srs容器:宿主机端口和容器端口映射时,保持端口一致

docker run  -it --name srs4.0-test  --restart=always  -v C:\5G\5GApi\static\DVR-video:/usr/local/srs/static/DVR-video -p 1936:1936 -p 1985:1985 -p 8080:8080 -p 10080:10080/udp  -p 8001:8001/udp registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4  ./objs/srs -c conf/rtmp2rtc.conf

2、配置srs配置文件:使用宿主机端口启动

listen              1936;  #必须有,rtmp协议,公网必须开放这个端口
max_connections     1000;
daemon              off;
srs_log_tank        console;

http_api {
    enabled         on; 
    #必须有,webrtc播放需要,可以在nginx配置转发,location /rtc {},无需开放该端口
    listen          1985;
}

http_server {
    enabled         on;
    listen          8080;
    #开发阶段需要,这个是srs自带的web页面,可以播放webrtc等视频,公网无需开发这个端口
    dir             ./objs/nginx/html;

   
}

srt_server { #没有使用到srt服务,无需开发10080端口
    enabled on;
    listen 10080;
    maxbw 1000000000;
    connect_timeout 4000;
    latency 20;
    peerlatency 20;
    recvlatency 20;
}

rtc_server {  #webrtc服务,必须开放公网8000端口
    enabled on;
    listen 8001;
    candidate 112.94.31.117;
}

# @doc https://github.com/ossrs/srs/issues/1147#issuecomment-577607026
vhost __defaultVhost__ {
    
    #这个是rtc配置,开启rtmp转rtc
    rtc {
       enabled     on;
        rtmp_to_rtc on;
        rtc_to_rtmp on;
    }
   
    #开启http-flv
    http_remux {
        enabled     on;
        mount       [vhost]/[app]/[stream].flv;
    }
   
    #rtmp的低时延配置
    tcp_nodelay     on;
    min_latency     on;

    play {
        gop_cache       off;
        queue_length    10;
        mw_latency      100;
    }

    publish {
        mr off;
    }


   #视频录制功能
   dvr {
        enabled             on;
        dvr_path            /usr/local/srs/static/DVR-video/[app]/[01]-[2006]/[02]-day/[stream]-[2006]-[01]-[02]_[15]_[04]_[05].mp4;
        dvr_plan            session; #存一次推流中的所有的视频
        dvr_duration        30;
        dvr_wait_keyframe   on;
    }
    
    http_hooks {
	#回调函数,on是启动,off是中止
        enabled         off;
        on_dvr          http://host.docker.internal:8888/srs/dvr;
        #视频录制的回调函数,一个视频录制完成后,会向给url发起post请求
        on_publish      http://host.docker.internal:8888/srs/publish;
        on_unpublish    http://host.docker.internal:8888/srs/un_publish;
        on_play         http://host.docker.internal:8888/srs/play;
        on_stop         http://host.docker.internal:8888/srs/stop;

    }

}

这样配置时,就可以正常拉取webrtc的视频流了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/71545.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MFC第三十天 通过CToolBar类开发文字工具栏和工具箱、GDI+边框填充以及基本图形的绘制方法、图形绘制过程的反色线模型和实色模型

文章目录 CControlBar通过CToolBar类开发文字工具栏和工具箱CMainFrame.hCAppCMainFrm.cppCMainView.hCMainView.cppCEllipse.hCEllipse.cppCLine.hCLine.cppCRRect .hCRRect .cpp CControlBar class AFX_NOVTABLE CControlBar : public CWnd{DECLARE_DYNAMIC(CControlBar)pro…

Jmeter请求接口返回值乱码解决

乱码示例 解决步骤: 1.打开Jmeter安装目录下的bin目录,找到jmeter.properties 2.使用记事本或其他编译工具打开jmeter.properties文件,然后全局搜索sampleresult.default.encoding 3.在文件中添加sampleresult.default.encodingutf-8,保存…

LeetCode--HOT100题(28)

目录 题目描述:2. 两数相加(中等)题目接口解题思路代码 PS: 题目描述:2. 两数相加(中等) 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且…

c语言每日一练(6)

前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…

42. range函数—生成器函数-更新

【目录】 文章目录 1. range( )函数是什么?2. 知识回顾-列表的切片3. range( )函数的语法3.1 range( )函数语法3.2 参数说明3.3 列表切片和range函数的区别 4. 实操练习4.1 参数为一个正整数4.2 参数为04.3 参数为一个负整数4.4 有2个参数4.5 有3个参数4.6 步长为负…

vscode extension 怎么区分dev prod

开发模式注入环境变量 使用vsode 提供的api

利用Torchmetrics库快速进行Torch的评价指标计算(推荐)

目录 1、安装 2、基本流程介绍 3、MetricCollection 4、自定义指标 5、我们可以调用多个指标计算不同的任务 6、可以是标签,也可以是one_hot编码 7、常用分类指标计算 8、异常报错 1、安装 官网地址:Welcome to TorchMetrics — PyTorch-Metrics 1.0.1 documenta…

掌握Python的X篇_34_Python朗读文字

各种广告中说python是人工智能的主宰,其实这更多是噱头的成分,但是python确实可以做很多的事情,本篇将会介绍利用pythonAI平台来合成声音。今天将会用到的是百度。 文章目录 1. baiToVoice2. 注册appid3. 合成代码 1. baiToVoice 使用百度A…

创建多图层叠加效果的背景与人物图像

引言: 在现代应用程序开发中,图形资源的使用是非常常见的,特别是在用户界面设计中。通过使用TImageList和TGlyph组件的组合,我们可以实现令人印象深刻的多图层叠加效果。本文将介绍如何使用这两个组件来创建背景和人物的多图层叠加…

Idea创建maven管理的web项目

如果你想在项目中添加一个传统的 src 目录来存放源代码,可以按照以下步骤操作: 1. 在项目视图中,右键单击项目名称,选择 “New” -> “Directory”。 2. 在弹出的对话框中,输入目录名称为 “src”,然后…

Camunda 7.x 系列【3】Camunda 简介

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 概述2. 核心组件2.1 流程引擎2.2 模型2.3 Web…

金融反欺诈的应用实践

“根据980起全球重大金融欺诈事件分析,60%的欺诈发生在移动端,同比增长170%。“,在香港近日举办的金融科技沙龙上,顶象金融业务安全专家史博表示,金融业已成为不法分子重要的攻击对象。 本届金融科技沙龙由Databricks…

【Linux 网络】 数据链路层协议

数据链路层协议 数据链路层解决的问题以太网协议认识以太网以太网帧格式 认识MAC地址对比理解MAC地址和IP地址认识MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对于TCP协议的影响ARP协议ARP协议的作用ARP协议的工作流程ARP数据报的格式 总结 数据链路层解决的问题 IP拥有将数据跨…

Springboot04--vue前端部分+element-ui

注意点: 这边v-model和value的区别:v-model是双向绑定的,value是单向绑定 li的key的问题 vue的组件化开发: 1. NPM(类似maven,是管理前段代码的工具) 安装完之后可以在cmd里面使用以下指令 2.…

智汇云舟入选IDC《中国智慧城市数字孪生技术评估,2023》报告

8月7日,国际数据公司(IDC)发布了《中国智慧城市数字孪生技术评估,2023》报告。智汇云舟凭借在数字孪生领域的创新技术与产品,入选《2023中国数字孪生城市技术提供商图谱》。 报告通过公开征集的形式进行申报&am…

大数据课程I2——Kafka的架构

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的架构; ⚪ 掌握Kafka的Topic与Partition; 一、Kafka核心概念及操作 1. producer生产者,可以是一个测试线程,也…

80. 删除有序数组中的重复项 II

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路:因为数组有序,相等的元素一定相邻,所以可以使用一个变量num统计相等元素的个数,如果当前元素和前一个元素相等&#xff0c…

Java解决四大查找(一)

Java解决四大查找 一.线性查找1.1 题目1.2 思路分析1.3 代码演示 二.二分查找(双指针法)2.1 题目2.2 思路分析(图解加文字)2.3 代码演示 一.线性查找 1.1 题目 在数组{1,8,1024,521,1889}中查找数字8,如果有&#xff…

31 | 独角兽企业数据分析

独角兽企业:是投资行业尤其是风险投资业的术语,一般指成立时间不超过10年、估值超过10亿美元的未上市创业公司。 项目目的: 1.通过对独角兽企业进行全面地分析(地域,投资方,年份,行业等),便于做商业上的战略决策 项目数据源介绍 1.数据源:本项目采用的数据源是近…

智能质检技术的核心环节:语音识别和自然语言处理

随着呼叫中心行业的快速发展和客户服务需求的不断提高,越来越多的企业开始采用智能质检技术,以提高呼叫中心的质量和效率。而在智能质检技术中,语音识别和自然语言处理是其核心环节,对于提高质检的准确性和效率具有重要作用。 语音…