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个字节的时间戳,在每帧数据的开头。

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

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用webrtc-streamer实现rtsp公网访问视频的步骤如下: 1. 首先,确保你的服务端已经安装了webrtc-streamer。如果没有安装,你可以请服务端同事帮忙安装,或者自己尝试安装。你可以从webrtc-streamer的git仓库下载压缩包,并解压提取出libs/adapter.min.js和webrtcstreamer.js两个文件。 2. 将adapter.min.js和webrtcstreamer.js文件拷贝到你的项目中。你可以将它们放在public文件夹下,并在index.html中引入这两个文件。 3. 在前端代码中,你需要使用webrtc-streamer提供的API来实现rtsp公网访问视频。具体的实现步骤如下: - 首先,创建一个video元素,用于显示视频流。你可以在HTML中添加一个video标签,并为其指定一个id,例如: ```html <video id="videoElement" autoplay></video> ``` - 在JavaScript代码中,使用webrtc-streamer的API来获取视频流并将其显示在video元素中。你可以使用webrtcstreamer.js中提供的`WebRTCStreamer`对象来实现这一功能。具体的代码如下: ```javascript const videoElement = document.getElementById('videoElement'); const streamer = new WebRTCStreamer(); // 设置视频流的URL,替换成你的rtsp流的URL const streamUrl = 'your_rtsp_stream_url'; streamer.setStreamUrl(streamUrl); // 将视频流绑定到video元素 streamer.attachToElement(videoElement); // 开始播放视频流 streamer.play(); ``` - 替换`your_rtsp_stream_url`为你的rtsp流的URL。确保URL的格式正确,并且可以在公网中访问到。 4. 保存并运行你的前端代码。视频流应该会在video元素中显示出来,并可以在公网中访问到。 请注意,使用webrtc-streamer实现rtsp公网访问视频需要在服务端和前端都进行相应的配置和代码编写。以上步骤仅涉及前端部分的实现,你还需要确保服务端的配置和网络环境的支持。 #### 引用[.reference_title] - *1* *2* *3* [记浏览器使用webrtc-streamer 播放rtsp 流](https://blog.csdn.net/weixin_41838201/article/details/125783057)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值