博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RTX包webrtc处理
阅读量:3559 次
发布时间:2019-05-20

本文共 2281 字,大约阅读时间需要 7 分钟。

0                   1                   2                   3    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |                         RTP Header                            |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   |            OSN                |                               |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |   |                  Original RTP Packet Payload                  |   |                                                               |   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

OSN:原rtp包seq number

webrtc代码实现,注释很详细

std::unique_ptr
RTPSender::BuildRtxPacket( const RtpPacketToSend& packet) { // TODO(danilchap): Create rtx packet with extra capacity for SRTP // when transport interface would be updated to take buffer class. std::unique_ptr
rtx_packet(new RtpPacketToSend( &rtp_header_extension_map_, packet.size() + kRtxHeaderSize)); // Add original RTP header. rtx_packet->CopyHeaderFrom(packet); { rtc::CritScope lock(&send_critsect_); if (!sending_media_) return nullptr; RTC_DCHECK(ssrc_rtx_); // Replace payload type. auto kv = rtx_payload_type_map_.find(packet.PayloadType()); if (kv == rtx_payload_type_map_.end()) return nullptr; rtx_packet->SetPayloadType(kv->second); // Replace sequence number. rtx_packet->SetSequenceNumber(sequence_number_rtx_++); // Replace SSRC. rtx_packet->SetSsrc(*ssrc_rtx_); // Possibly include the MID header extension. if (!mid_.empty()) { // This is a no-op if the MID header extension is not registered. rtx_packet->SetExtension
(mid_); } } uint8_t* rtx_payload = rtx_packet->AllocatePayload(packet.payload_size() + kRtxHeaderSize); RTC_DCHECK(rtx_payload); // Add OSN (original sequence number). ByteWriter
::WriteBigEndian(rtx_payload, packet.SequenceNumber()); // Add original payload data. auto payload = packet.payload(); memcpy(rtx_payload + kRtxHeaderSize, payload.data(), payload.size()); // Add original application data. rtx_packet->set_application_data(packet.application_data()); return rtx_packet;}

 

转载地址:http://ksprj.baihongyu.com/

你可能感兴趣的文章
this关键字有什么用处?怎么用? 1.访问成员变量,区分成员变量和局部变量。 2.访问成员方法。 3.访问构造方法。 4.返回对当前对象的引用 5.将对当前对象的引用作为参数传递给其他方法。
查看>>
自学sql
查看>>
基于Springboot的社区开发项目
查看>>
nowcoder 左神算法1
查看>>
code刷题
查看>>
左神进阶2窗口
查看>>
dubbo入门
查看>>
http 错误类型
查看>>
一篇文章解决HTTP 请求头!
查看>>
学习日记02
查看>>
学习日记03
查看>>
学习日记04
查看>>
学习日记08(元组、字典、集合)
查看>>
js自定义数据顺序进行升序或者降序排序
查看>>
【零】简单数仓框架优化、配置及基准测试
查看>>
Sqoop的安装及测试
查看>>
Kylin的简单使用
查看>>
Presto的概念和安装使用
查看>>
Druid的Web页面使用
查看>>
Scala-HelloWorld
查看>>