rtsp之上传公网

现在有一个需求,需要在外网通过rtsp协议访问内网。但是,由于内网没有固定的IP地址,所以,rtsp协议根本进不来啊。

这里我想出一个办法,如下

 编写两个服务,第一个跑在内网的PC机上面,一个跑在云服务器上面。

第一步:腾讯云的服务先监听一个端口,比如8888

第二步:PC端的服务,与腾讯云的8888端口建立一个tcp连接,是一个长连接

第三步:腾讯云服务器如果请求IPC的摄像机,先通过私有协议发送一个请求给PC机

第四步:PC机再与云服务器的服务流媒体监听端口建立tcp连接,并发送命令告诉是哪个IPC

第五步:云服务器发送请求,请求视频流,

第六步:开始接收视频流,进行后续的逻辑处理。

******************************************信令交互接口定义********************

注册接口:PC机与腾讯云注册,并上报设备ID

<request>
    <cmd>Register</cmd>
    <paramter>
        <item>
            <camid>1</camid>
        </item>
        <item>
            <camid>2</camid>
        </item>
    </paramter>
</request>

应答:加上心跳周期单位为秒

<response>
    <cmd>Register</cmd>
    <paramter>
        <code>0</code>
        <text>success</text>
        <keepalive>20</keepalive>
    </paramter>
</response>

心跳:

<request>
    <cmd>KeepAlive</cmd>
    <paramter>
        <keepalive>20</keepalive>
    </paramter>
</request>
<response>
    <cmd>KeepAlive</cmd>
    <paramter>
        <code>0</code>
        <text>success</text>
        <keepalive>20</keepalive>
    </paramter>
</response>

请求IPC推流:

<request>
    <cmd>PlayIpc</cmd>
    <paramter>
        <camid>1</camid>
    </paramter>
</request>

应答:

<response>
    <cmd>PlayIpc</cmd>
    <paramter>
        <code>0</code>
        <text>success</text>
    </paramter>
</response>

*************************流媒体端口命令************

建立tcp连接之后,PC机发送连接信息

<request>
    <cmd>ConnectIpc</cmd>
    <paramter>
        <camid>1</camid>
    </paramter>
</request>
<response>
    <cmd>ConnectIpc</cmd>
    <paramter>
        <code>0</code>
        <text>success</text>
    </paramter>
</response>

腾讯云服务器处理完之后,向PC机发送开始请求流的命令

<request>
    <cmd>StartIpc</cmd>
    <paramter>
        <camid>1</camid>
    </paramter>
</request>

 

<response>
    <cmd>StartIpc</cmd>
    <paramter>
        <code>0</code>
        <text>success</text>
    </paramter>
</response>

命令完之后,后面就是开始接收rtp数据了。。

*****************************上述就是信令的交互流程************************

下面对交互格式定义:

 

开头以# 开始,1表示请求信令,2表示应答信令,3表示流媒体(H264)4表示流媒体(H265),长度为4字节的网络字节序,后面是信令或者流媒体数据,媒体数据的话,媒体数据的话,还需要增加4个字节的时间戳,在每帧数据的开头。

**************至此,完成了该服务的定义工作**************后续开始编码尝试效果了。

 

 

### 如何使用RTSP播放地址进行视频流输 #### 创建 RTSP 流 为了创建 RTSP 播放地址并实现视频流输,可以利用 VLC Media Player 将本地文件转换成 RTSP 流。具体操作如下: 启动 VLC 后,在菜单栏点击 `媒体` -> `串流` 或者直接按快捷键 Ctrl+S 打开串流窗口[^1]。 在弹出的对话框中选择要转播的 MP4 文件作为输入源,并通过下一步进入目的地设置页面。此时应选择 RTSP 协议来定义输出路径以及端口号等参数。 完成配置之后继续前进直到最后一步确认无误后开始发布此直播链接给其他设备访问即可获得一个有效的 RTSP URL 地址用于后续测试工作环境下的调用。 ```bash rtsp://your_ip_address:port_number/ ``` 这里的 IP 地址是指运行 VLC 的计算机在网络中的位置;而端口号码则是之前设定时所指定的那个数值。 #### 使用 RTSP 播放地址 当已经成功建立了上述提到的那种形式的 RTSP 路径以后就可以把它提供给支持该协议的应用程序去请求连接从而实现实时观看功能了。例如可以在另一台电脑上打开同样版本号以上的 VLC 客户端软件然后按照下面的方法来进行远程资源加载: 同样是先找到顶部工具条里的 “媒体” 选项卡接着选取其中名为 “打开网络串流…” 的子项。这时会跳出来一个小窗体让你填入完整的 RTSP URI 字符串即刚才构建好的那个完整表达式。 按下回车键提交指令之后如果一切正常的话很快就能看到画面被呈现在界面上面了这也就意味着整个过程顺利完成实现了基于互联网协议栈之上的多媒体分发机制。 #### 解决常见问题 有时可能会遇到无法建立有效连接的情况这时候可以从以下几个方面着手排查原因所在之处: - **防火墙阻止**:确保服务器端(发送方)和客户端(接收方)之间的所有相关端口都是开放状态允许数据包自由进出; - **IP 地址错误**:仔细核对自己填写的目标机器定位信息是否准确无误特别是对于动态分配公网 IPv4 用户来说这一点尤为重要因为每次重启路由器都可能导致变化; - **带宽不足**:考虑到高清甚至超清级别的影像资料所需占用较大吞吐量所以建议事先评估好现有链路承载能力以免造成拥塞现象影响用户体验质量下降明显。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值