首页 > 其他分享 >网页端WebRTC推流转换为RTMP/GB28181等其他直播流协议

网页端WebRTC推流转换为RTMP/GB28181等其他直播流协议

时间:2023-04-06 09:24:59浏览次数:28  
标签:协议 浏览器 GB28181 音视频 传输 RTMP SDP 推流 WebRTC

网页端WebRTC推流转换为RTMP/GB28181等其他直播流协议

WebRTC是一个在WEB浏览器端广泛应用的流媒体引擎,通过点对点的方式实现音视频数据的传输,以完成视频会议等功能。但是考虑到WebRTC主要是为有限人数情况下的点对点视频会议服务,在做其他直播应用的时候,或者接入现有流媒体网络的情况下,并不太适合,可以考虑将浏览器端的WebRTC流,转换为RTMP/GB28181等其他流媒体协议。经过一段时间的研究,已经成功实现了这一功能,这里我介绍一下转换原理。

WebRTC工作流程

WebRTC 协议主要由三部分组成:

  • 用户接口 (User Interface):提供了一组 API,使得开发者可以在浏览器和移动应用程序之间进行音视频通信;

  • 网络协议栈 (Network Protocol Stack):负责网络数据的传输和协议处理;

  • 音视频引擎 (Audio/Video Engine):负责音视频数据的处理和编解码。

在建立音视频通信之前,浏览器之间需要通过信令服务器进行一系列交互,以协商会话参数和通信方式。下面是 WebRTC 的信令交互过程:

  • 建立房间(Room):浏览器A和B都需要进入同一个房间,以便进行音视频通信。在进入房间之前,它们需要通过信令服务器进行认证和授权。

  • 交换SessionDescriptionProtocol(SDP):在进入房间之后,浏览器A和B都会生成SDP信息,用于协商音视频通信的参数和格式。它们会将自己的SDP信息通过信令服务器发送给对方。

  • 交换ICECandidate:为了穿透NAT和防火墙,WebRTC使用ICE协议来获取NAT类型和外部IP地址。在SDP协商过程中,浏览器A和B会交换彼此的ICECandidate信息,以便进行NAT穿透。

  • 建立PeerConnection:在完成SDP和ICE协商之后,浏览器A和B就可以建立PeerConnection,开始进行音视频传输。PeerConnection会在浏览器之间建立一条点对点的连接,并且支持多种传输方式,包括UDP、TCP和SCTP等。

当信令交互完成后,WebRTC双方建立起数据通道,就开始传输数据,WebRTC支持多种数据传输方式,包括实时传输协议(Real-time Transport Protocol,RTP)、用户数据报协议(User Datagram Protocol,UDP)、传输控制协议(Transmission Control Protocol,TCP)和数据通道协议 (Data Channel Protocol)等。

其中,RTP 是WebRTC 最常用的音视频传输协议,用于实时传输音视频数据。它基于 UDP 协议,并且提供了一些额外的功能,比如丢包恢复、流量控制和时钟同步等。WebRTC 还可以使用 RTCP 协议来进行质量控制和反馈,包括网络延迟、抖动和丢包等指标。

UDP 协议适合传输实时音视频数据,因为它具有低延迟和高吞吐量的特点。但是 UDP 协议也存在一些问题,比如丢包和乱序等,需要通过额外的机制来解决。WebRTC 使用了一些优化技术,比如前向纠错、重传和重构等,来提高音视频传输的质量和稳定性。

除了传输音视频数据,WebRTC 还支持数据通道协议,用于在浏览器之间传输任意数据。数据通道协议基于 SCTP 协议,并且支持可靠传输和流控制等功能。它可以用于传输文件、消息和游戏数据等,提供了一种全新的浏览器间通信方式。

协议转换方案

WebRTC的优点虽然很多,但是对直播等领域并不具有特别明显的优点,不过有一个最大的好处是可以在浏览器上进行摄像头采集、编码和推送。所以可以利用这一点,通过网页端获取到编码后的摄像头数据,再进一步接入到现有的其他直播协议或者工作流程中。

当了解清楚WebRTC的整个工作流程后,就可以设定协议转换方案:

  1. 首先需要构造一个通信协议,用于和浏览器之间进行信令的通信,并做好数据端口的监听,等待浏览器发送WebRTC报文和数据包。
  2. 浏览器页面调用WebRTC接口的时候,首先按照正常流程,创建RTCPeerConnection,之后创建本地offer,当收到浏览器回调后,提取offer中的sdp信息,上传给服务器
  3. 服务器当接收到浏览器发送的offer后,解析SDP包,然后生成本地SDP数据,在SDP中填写本地RTP端口和RTCP端口等相关媒体信息,返回给浏览器。
  4. 浏览器页面接收到SDP之后,调用WebRTC接口,创建answer,并设置浏览器WebRTC模块,如果SDP正确,那么历览器接下来给就会开始向服务器发送RTP报文,内含音频和视频编码数据,程序对此进行解析和提取,将相关数据,重新进行新协议(RTMP、RTSP、GB28181)等的封装。

遇到的问题和解决办法

  1. 需要注意的是,浏览器在和服务器通信的时候,还会发送STUN报文,需要处理好STUN报文的回包,否则会出现连接中断的问题。
  2. 必须处理RTCP报文,并做正常流程的RTCP交互。
  3. WebRTC编码的H.264数据只会发送一次关键帧,这个如果不做处理直接转换成其他协议的直播流,很可能会导致播放端连接后无法获取到关键帧从而无法解码。这个处理方式就是在需要关键帧的时候,向浏览器发送关键帧重传请求。当然也是通过RTCP发送。

以下是FIR(Full Intra Request)关键帧重传报文的格式。

合作请加WX:hbstream或企鹅:229375788。(转载请注明作者和出处)


标签:协议,浏览器,GB28181,音视频,传输,RTMP,SDP,推流,WebRTC
From: https://www.cnblogs.com/haibindev/p/17291622.html

相关文章

  • 直播未来属于RTMP还是HTTP?
    直播未来属于RTMP还是HTTP?HTTP传视频比RTMP实现起来简单?HTTP延迟太高?答:直播通讯未来是属于html5的。 1,协议使用份额如今国内90%的面向大众的直播平台都是采用的rtmp和httpflv的混合,hls很少,而国外大部分采用的dash,少部分用hls和其他协议。2,先简单的描述下这些协议httpflv:这种直......
  • 【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(二)HLS 指令详解
    源码地址:https://github.com/Tinywan/PHP_Experience一、在Nginx配置文件的RTMP模块中配置hlshls_key_path/tmp/hlskeys;提示错误信息:nginx:[emerg]thesamepathname"/data/hlskeys"usedin/usr/local/nginx/conf/nginx.conf:178andin/usr/local/nginx/conf/nginx......
  • 【官方文档】Nginx模块Nginx-Rtmp-Module学习笔记(一) RTMP 命令详解
    源码地址:https://github.com/Tinywan/PHP_Experience说明:rtmp的延迟主要取决于播放器设置,但流式传输软件,流的比特率和网络速度(以及响应时间“ping”)可能会对延迟产生影响,具有播放器的本地rtmp服务器使用“否”缓冲区(如0.1-0.2秒缓冲区等)可能会在0.8-1.2秒之间总是延迟,当事情正......
  • ZLMediaKit + wvp-GB28181-pro 流媒体服务搭建
    目录环境备部署基础环境配置修改ZLMediaKit配置文件WVP-PRO的mysql数据库配置wvp-GB28181-pro配置wvp-pro-assist配置部署后端服务前端服务摄像头接入配置示例大华接入海康接入环境备1、服务运行环境,Linux/OSX/Windows均可,但推荐Linux2、海康、大华等符合国标28181标准......
  • LiveQing流媒体RTMP推流服务-如何获直播流地址 HLS/HTTP-FLV/WS-FLV/WebRTC/RTMP视频
    @目录1、服务说明2、如何一步一步搭建视频直播3、配置鉴权直播间3.1直播间创建3.2获取RTMP推流地址3.3播放流地址4、视频集成方式5、分享页面集成6、视频流地址集成6.1、直播流地址(页面查看获取)6.2、直播流地址(接口调用获取)6.2.1、接口服务地址说明6.2.2、获取直播列表7、RTMP......
  • windows搭建nignx推流服务器
    1下载地址:http://nginx-win.ecsds.eu/download/  2下载RTMP模块,因为nginx里没有:来源:https://blog.csdn.net/stalin_/article/details/128968989链接:https://pan.baidu.com/s/1eG-hMjQHFHg0nalFBET1wA提取码:nutqnginx-rtmp-module3配置nginx的config    #......
  • EasyCVR视频融合平台国标GB28181协议设备接入时,可支持过滤通道类型
    EasyCVR基于云边端智能协同架构,能支持海量视频的轻量化接入与集中汇聚管理,平台可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、宇视SDK等(具体见下图),可分发多格式的视频流,包括:RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、......
  • EasyCVR视频融合平台如何通过国标GB28181协议级联至海康云眸平台?
    EasyCVR视频融合平台基于云边端一体化,能实现海量视频资源的轻量化接入、汇聚与管理,平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能......
  • EasyCVR视频融合平台如何通过国标GB28181协议级联至海康云眸平台?
    EasyCVR视频融合平台基于云边端一体化,能实现海量视频资源的轻量化接入、汇聚与管理,平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能......
  • 视频融合平台EasyCVR获取RTSP和RTMP视频流地址未区分内外网的问题修复
    EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集......