七.一 RTPTransport创建

前言

视频接收端流程比较复杂分六章进行介绍

第一是 RTPTransport创建 

第二是 VideoChannel与VideoReceiveStream 关联

第三是 视频接收端组包流程 发现有效的帧。

第四是 jitterbuffer 与 PacketBuffer,RtpFrameReferenceFinder,FrameBuffe 

第五是 视频接收端解码过程

第六是 视频接受端渲染过程


目录

一 基本概念 Channel,Stream,Track

二 AddTransceiver

三 创建Channel

三 创建Transport

1RTPTransportInternal定义

2创建时机

四 CreteVideoChannel


一 基本概念 Channel,Stream,Track

Channel

Channel 是传输层面的概念,也就是音视频数据最终要交由 channel 传送出去。而 channel 最终会交由socket将数据发送出来。了为解耦 stream与socket,所以增加了channel 的概念

Stream

在 WebRTC中分为媒流(MediaStream)和数据流(DataStream)。对于 MediaStream是一个多条轨的集合,在它里面包括了一个终端的音频转和视频轨

Track

Track(轨), 轨是 WebRTC 中借鉴了其它多媒体相关的概念。轨的特性大家都非常清楚,两条轨是永远不会相交的。轨用在多媒体中,表式的是每条 "轨" 数据都是独立存在的,不会与其它 "轨" 相交。如音频轨,视频轨。


二 AddTransceiver

addTrack()将新的媒体轨道添加到轨道集,该轨道将被传输到另一对等方

AddTransceiver 每个收发器都代表一个双向流,并带有RTCRtpSenderRTCRtpReceiver

一个 track 对应一个 RtpTransceiver

一个 track对应多个Sink,Track就是底层对应上层的轨道

RtpTransceiver 对象列表,负责 Rtp 的收发,音频是视频的是分开的 ,参考下面代码    

RtpTransceiver 包含 RtpSenderInternal ( 包含 VideoRtpSender ) 和 RtpReceiverInternal ( 包含 VideoRtpReceiver )

    senders_ ---> RtpSenderInternal ( 包含 VideoRtpSender )

    receivers_ ---> RtpReceiverInternal ( 包含 VideoRtpReceiver )

    channel_ ---> VideoChannel or VoiceChannel ( ./pc/channel.h )

    channel_manager_ ---> ChannelManager ( ./pc/channel_manager.h )


三 创建Channel

PeerConnection:: ApplyRemoteDescription 创建远端Channel

PeerConnection::UpdateTransceiversAndDataChannels

PeerConnection::UpdateTransceiverChannel

RtpTransceiver 关联 Channel 对象

RtpTransceiver::SetChannel

SetChannel 的过程就是绑定 MediaChannel 到 sender RtpSenderInternal

和 receiver RtpReceiverInternal 的过程

Transceiver中 VideoRtpSender。通过channel获取Transport的packete


三 创建Transport

1RTPTransportInternal定义

1RTPTransportInternal 为网络rtp以及rtcp传输层的接口

 rtp和rtcp数据经该RtpTransportInternal将数据传递到PacketTransportInternal

 PacketTransportInternal  为底层网络通信层接口底层调用socket

2创建时机

收到SetLoaclDescription信息号创建jsep_transport

PacketTransportInternal的创建时机是在当通过调用PeerConnection的SetLocalDescription或者SetRemoteDescription的时候创建,也就是握手完成后创建

ApplyDescription_n调用 JsepTransportController::MaybeCreateJsepTransport

jsep_transport

JsepTransportController控制JsepTransport


四 CreteVideoChannel

设置会话协议后,创建VideoChannel与Transport绑定

cricket::VideoChannel* PeerConnection::CreateVideoChannel

Mid获取到RtpTransportInternal实例

video_channel->SetRtpTransport(rtp_transport);

创建baseChannel与rtpTransport的绑定关系,这样受到流或者信息通过baseChannel进行回调通过 BaseChannel::OnRtpPacket下发 recvRtp,recvRtcp的包

当创建AudioChannel的时候也会如VideoChannel建RtpTransportInternal对象并且会将该对象保存到BaseChannel对象当中供后续使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<html> <head> <script src="/libs/adapter.min.js"></script> <script src="/webrtcstreamer.js"></script> <script src="https://cdn" .bootcdn.net/ajax/libs/socket.io/4.6.1/socket.io.js"></script> <video id="video" src="example.mp4" 控件></video> <canvas id="canvas"></canvas> <script> var webRtcServer = null; window.onload = function () { webRtcServer = new WebRtcStreamer("video1", "http://192.168.6.199:8000"); //这里填写你自己部分的WebRtcStreamer服务地址 webRtcServer.connect("rtsp://admin:ztjg1234@183.67.25.102:8554/Streaming/Channels/2501", "", "rtptransport=tcp&timeout=60"); //这里填可以经常预览的rtsp地址,可以先使用vlc或者其他软件测试一下地址的有效 }; 窗户。onbeforeunload = function () { webRtcServer.disconnect(); }; </script> </head> <body> <div style="width: 100%; height: 100%"> <video style="width: 1920px; height: 1080px" id="video1" autoplay="autoplay"静音 playsinline></video> </div> </body> </html> <script> var socket = null; function initWebSocket() { socket = io.connect("ws://192.168.6.199:5001/echo", { timeout: 300000, }); socket.on("connect", () => { console.log("建立链接"); socket.emit("videocv", {data: "我已连接!",sid:socket.id,url: 'rtsp://admin:ztjg1234@183.67.25.102:8554/Streaming/Channels/2501'}); }); socket.on("disconnect", () => { console.log("连接断开"); }); socket.on("mydata", (msg) => { // 接收数据 console.log(msg); }); } initWebSocket(); </script>这是一段yolov5前端接收数据的代码,如何利用传出的数据画出密码框,写出对应代码
最新发布
06-13

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值