Webrtc fec 废除_webtec

Webrtc fec 废除_webtecwebrtcfec

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在基于IP网络的多媒体通信系统(比如WebRTC)中,网络丢包对多媒体通信质量有非常严重的影响:例如造成视频的马赛克、图像模糊、帧率下降等问题,造成音频的声音失真、噪声干扰、音频中断等问题。这都会严重影响系统的通信质量,造成非常差的用户体验。
WebRTC主要采取两种手段对抗网络丢包:丢包重传(NACK)和前向纠错(FEC)。FEC是一种前向纠错技术,发送端将负载数据加上一定的冗余纠错码一起发送,接收端根据接收到的纠错码对数据进行差错检测,如果发现差错,则利用纠错码进行纠错。而ULPFEC(Uneven Level Protection FEC,直译为非均等保护前向纠错)则是WebRTC实现的FEC方案之一,[本文深入学习ULPFEC的理论基础和实现细节](http://www.jianshu.com/p/06a27ebacec7)。

webrtc fec

相关源码在/src/webrtc/modules/rtp_rtcp/source目录下

解fec包

源码实现在 ulpfec_receiver_impl.cc 

demo


//初始化对象
void init() {
    std::unique_ptr<webrtc::UlpfecReceiver> fec_receiver_;

    fec_receiver_.reset(webrtc::UlpfecReceiver::Create(this));
}  

//添加rtp包并解析
void addAndParse(packet) {
    webrtc::RTPHeader hacky_header;
    hacky_header.headerLength = rtp_header->getHeaderLength();
    hacky_header.sequenceNumber = rtp_header->getSeqNumber();
    if (fec_receiver_->AddReceivedRedPacket(hacky_header,(const uint8_t*) packet->data, packet->length, external_ulp_pt_) == 0 {
   fec_receiver_->ProcessReceivedFec(); //会间接调用到callback
    }
}

//callback 
//需要继承类 : public webrtc::RtpData
OnRecoveredPacket(const uint8_t* rtp_packet, size_t rtp_packet_length) {
// 处理rtp包
}

封fec包

支持fec功能时,一般都使用red封装格式。

demo

void init() {

    webrtc::FecProtectionParams key_fec_params_{
  
  1, 60, webrtc::kFecMaskRandom}
    fec_generator_.reset(new webrtc::UlpfecGenerator());
        fec_generator_->SetFecParameters(key_fec_params_);
}

void buildFec(rtp) {
    red_packet = buildRedPacket(rtp);

    //发送red_packet

    fec_generator_->AddRtpPacketAndGenerateFec((const uint8_t *)rtp->data, payload_length, header_length);

uint16_t num_fec_packets = fec_generator_->NumAvailableFecPackets();

    if (num_fec_packets > 0) {
        uint16_t first_fec_sequence_number = AllocateSequenceNumber(num_fec_packets); //fec 包分配序列号, 紧随在原始rtp包之后

        fec_packets = fec_generator_->GetUlpfecPacketsAsRed(external_red_pt_, external_ulp_pt_, first_fec_sequence_number,header_length);
    }
    for (const auto& fec_packet : fec_packets) {
    //直接发送fec包
    }
}

理解

  • Fec采用的是冗余发送机制, 在带宽允许的情况下fec可以起到预期的效果,但对于带宽严重限制的情况下,有可能带来副作用。
  • Fec的原理是通过几个原始包算出fec包,所有包的任意几个包,都可以算出其他包。类似 1+2=3, 3-1=2, 3-2=1
  • Fec基于以上算法原理,在启用Fec时,可以发送原始包+Fec包,也可以全部发送Fec包,只要通过逆向算法求出原始包即可
  • Fec包的时间戳与原始包一致,序列号紧随原始包之后
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/169589.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • windows 设置定时锁屏

    windows 设置定时锁屏设置间隔指定时间电脑自动锁屏CreateTime–2017年7月3日10:16:14Author:Marydon参考地址:电脑爱好者杂志举例:实现每间隔45分钟,电脑自动锁屏实现思路:  第一步:编写锁屏命令;  第二步:制定计划。实践:  1.编写锁屏命令    新建一个txt文件,重命名为:lockScreen(名字随意)–>打开该文件添…

  • 通过和resnet18和resnet50理解PyTorch的ResNet模块

    通过和resnet18和resnet50理解PyTorch的ResNet模块文章目录模型介绍resnet18模型流程总结resnet50总结resnet和resnext的框架基本相同的,这里先学习下resnet的构建,感觉高度模块化,很方便。本文算是对PyTorch源码解读之torchvision.modelsResNet代码的详细理解,另外,强烈推荐这位大神的PyTorch的教程!模型介绍resnet的模型可以直接通过torchvision导入,可以通过pretr…

  • Solr之配置DataImport

    1、拷贝将/opt/solr/solr-7.3.1下的dist和contrib目录拷贝到/opt/solr/solrhome目录下.2、相关jar包拷贝solr-dataimporthandler-7.3.1.jar和solr-dataimporthandler-extras-7.3.1.jar包拷贝到/opt/tomcat/apache-tomcat-8.5.31/webapps/s…

  • ubuntu中apt和dpkg命令总结「建议收藏」

    ubuntu中apt和dpkg命令总结「建议收藏」1.apt和dpkg命令总结apt-cachesearch#——(package搜索包)apt-cacheshow#——(package获取包的相关信息,如说明、大小、版本等)apt-getinstall#——(package安装包)apt-getinstall#—–(package–reinstall重新安装包)apt-get

  • 苹果哪款手机无刘海_刘海屏是什么意思

    苹果哪款手机无刘海_刘海屏是什么意思用iPhone这么多年你们用过iPodTouch吗?在iPhone4发布的时候我接触过一次iPodTouch,当时是同事买的超薄的,感觉就是为打游戏制造的,(本人热爱游戏)那时候感觉真…

  • java单例模式 三种_三种java单例模式概述

    java单例模式 三种_三种java单例模式概述在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的。Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。下面就来介绍一下这三种java单例模式的相关内容。java单例模式是一种常见的设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,这也是…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号