专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

视频推流或拉流WebRTC视频流接收统计报告

  WebRTC视频流接收统计报告
  在每次视频推流或拉流结束后,WebRTC都会输出本次视频推拉流的统计报告。其中包含了关于评价本次推拉流质量相关的若干参数。本文的主要目的是介绍视频拉流相关的统计指标含义。
  关于推流相关的统计指标,另外的文章进行单独描述。
  本文源码基于WebRTCM94编写。后续WebRTC版本可能有所变化(如receivestatisticsproxy已被移除,改为receivestatisticsproxy2),细节可能不同,但基本原理应该适用。相关源码videoreceivestatisticsproxy。cccallvideoreceivestream。h统计指标ReceiveStreamLifetimeInSeconds
  含义如字面意思。表示从视频拉流对象创建,到结束的总时长,单位是秒。
  计算的起始时间是ReceiveStatisticsProxy类构造的时候,在ReceiveStatisticsProxy::UpdateHistograms()中,当前时间减去起始时间,得到耗时。VideoReceiveStream的构造函数,同时构造了ReceiveStatisticsProxy。VideoReceiveStream::Stop()的时候,会调用ReceiveStatisticsProxy::UpdateHistograms()完成各种度量指标计算。
  Framesdecoded
  顾名思义,表示解码总帧数。对应VideoReceiveStream::Stats的成员变量framesdecoded。视频帧解码通知时序:startumlActorDecoderDecoderVCMDecodedFrameCallback:DecodedVCMDecodedFrameCallbackVideoStreamDecoder:FrameToRenderVideoStreamDecoderReceiveStatisticsProxy:OnDecodedFrameenduml
  解码器解码一帧后,会通知到ReceiveStatisticsProxy::OnDecodedFrame()中对解码帧数增加计数。
  【更多音视频学习资料,点击下方链接免费领取,先码住不迷路】
  音视频开发(资料文档视频教程面试题)(FFmpegWebRTCRTMPRTSPHLSRTP)DroppedFrames。Receiver
  当VideoReceiveStream::Stop()执行的时候,会调用RtpVideoStreamReceiver::GetUniqueFramesSeen()获取一个视频帧计数器framecounter,它的值是在RtpVideoStreamReceiver::OnReceivedPayloadData()中根据收包时间戳来增加,具体见源码videortpvideostreamreceiver。cc。framecounter。Add(packettimestamp);
  这个视频帧计数器可以理解为从收到的视频帧总数,然后用这个总数减去解码帧数Framesdecoded,就得到了丢掉的总帧数:intnumdroppedframesnumuniqueframesstats。framesdecoded;ReceivedPacketsLostInPercent
  顾名思义,丢包率(百分比)。当ReceiveStreamLifetimeInSeconds大于10秒时才可能输出这个数值。这个数值实际的计算位置来自StreamStatisticianImpl::GetFractionLostInPercent()。丢包率的分子和分母不在本文介绍范围内,感兴趣的读者自行阅读源码。DecodedFramesPerSecond
  平均解码帧率。以当前时间减去解码第一帧开始时间得到的差值做为分母,解码总帧数做为分子,计算得出的整型数值。RenderFramesPerSecond
  平均渲染帧率。数值来自于ReceiveStatisticsProxy的成员变量renderfpstracker,变量类型是rtc::RateTracker。
  在ReceiveStatisticsProxy::OnRenderedFrame中会调用AddSamples增加一个采样计数。最后调用RateTracker::ComputeTotalRate返回值并对其四舍五入获得渲染帧率。例如渲染帧数总共是545,总时长是60000毫秒,得到的帧率就是545x1000600009。089帧秒。
  代码中对采样计数有最少200个的约束,即少于200帧是不会输出渲染帧率的。
  渲染帧通知时序大概如下:startumlActorDecoderDecoderVideoStreamDecoder:FrameToRenderVideoStreamDecoderIncomingVideoStream:OnFramenoteright如果VideoReceiveStream::Config的enableprerenderersmoothing是false,则会直接送给VideoReceiveStreamendnoteIncomingVideoStreamVideoReceiveStream:OnFramenoterightonFrame是实现rtc::VideoSinkInterface的虚函数endnoteVideoReceiveStreamReceiveStatisticsProxy:OnRenderedFrameenduml
  KeyFramesReceivedInPermille
  permille是千分率的意思,因此,这个数值是表示接收关键帧的千分率。计算公式在代码中如下:(关键帧总数x1000总帧数2)总帧数(1)
  其中总帧数是关键帧和非关键帧的总和。注意计算的结果会被强转成整型。
  其实我看到这个公式是有点不太理解的。如果只是计算千分率,为何不直接就使用(关键帧总数总帧数)x1000(2)
  就行了?如果按照上面的公式(1)计算,意味着计算出来的结果始终是会比公式(2)要大一些的(约等于0。5)。不知道作者是出于什么考虑。DecodeTimeInMs
  平均解码耗时。数值来自于ReceiveStatisticsProxy的成员变量decodetimecounter,变量类型是rtc::SampleCounter(源码:rtcbaseumericssamplecounter。cc)。rtc::SampleCounter的源码可以阅读一下,比较简单,ReceiveStatisticsProxy有很多变量类型都是它。
  在ReceiveStatisticsProxy::OnDecodedFrame被调用的时候,会将当前帧的解码耗时decodetimems追加到decodetimecounter中记录下来,并增加一个采样计数。最终计算的平均解码耗时,就是调用rtc::SampleCounter的Avg方法计算得到的,其原理比较简单:全部帧的解码耗时总时长采样计数。与RenderFramesPerSecond一样,对采样计数目前有最小200的要求,即小于200个采样计数不输出此项数据。JitterBufferDelayInMs,TargetDelayInMs,CurrentDelayInMs
  这三个数值具有强相关性,因此放到一起描述。它们分别对应ReceiveStatisticsProxy的成员变量jitterbufferdelaycounter,targetdelaycounter和currentdelaycounter,变量类型是rtc::SampleCounter。
  在ReceiveStatisticsProxy::OnFrameBufferTimingsUpdated被调用的时候,会传入jitterbufferms,targetdelayms以及currentdelayms,累加到对应的采样计数器变量中。最终用于计算平均值:分子是每次传入的数值总和,分母是次数。
  【更多音视频学习资料,点击下方链接免费领取,先码住不迷路】
  音视频开发(资料文档视频教程面试题)(FFmpegWebRTCRTMPRTSPHLSRTP)
  ReceiveStatisticsProxy::OnFrameBufferTimingsUpdated由FrameBuffer调用,源码:modulesvideocodingframebuffer2。cc:startumlActorjitterbufferjitterbufferFrameBuffer:IntersetFrameNextFrameFrameBufferFrameBuffer:StartWaitForNextFrameOnQueueFrameBufferFrameBuffer:GetNextFrameFrameBufferFrameBuffer:UpdateJitterDelayFrameBufferReceiveStatisticsProxy:OnFrameBufferTimingsUpdatedenduml
  FrameBuffer和JitterBuffer的实现原理不在本文介绍范围之内,感兴趣的读者自行研读源码。EndToEndDelayInMs
  端到端平均延时。对应VideoReceiveStream::Stats的成员变量e2edelaycounter。它的类型是rtc::SampleCounter。在ReceiveStatisticsProxy::OnRenderedFrame中会计算单帧的延时,累加到e2edelaycounter。单次的延时数值是当前ntptime(webrtc::Clock::CurrentNtpInMilliseconds())减去webrtc::VideoFrame的ntptimems得到的。EndToEndDelayMaxInMs
  端到端最大延时。它是VideoReceiveStream::Stats的成员变量e2edelaycounter记录的所有单帧延时的最大值。InterframeDelayInMs
  解码帧间隔平均值。对应VideoReceiveStream::Stats的成员变量interframedelaycounter。它的类型是rtc::SampleCounter。在ReceiveStatisticsProxy::OnDecodedFrame中会计算单帧的解码时间间隔(即ReceiveStatisticsProxy::OnDecodedFrame被调用的两次间隔),累加到interframedelaycounter。InterframeDelayMaxInMs
  最大解码帧间隔。它是VideoReceiveStream::Stats的成员变量interframedelaycounter记录的所有单帧解码帧间隔数值的最大者。InterframeDelay95PercentileInMs
  这个数值代表:超过95帧间隔数值里的最小值,或者理解为95的帧间隔都小于多少。对应VideoReceiveStream::Stats的成员变量interframedelaypercentiles。它的类型是rtc::HistogramPercentileCounter。这个数值乍一看不太容易理解,这里简单介绍一下。
  要理解这个数值,需要先理解rtc::HistogramPercentileCounter。它与rtc::SampleCounter有类似之处,但本质上还是有很多不同。它存在几个关键的成员变量:std::vectorsizethistogramlow;std::mapuint32t,sizethistogramhigh;constuint32tlongtailboundary;sizettotalelements;sizettotalelementslow;
  以longtailboundary作为分界点,小于longtailboundary的值,记录到histogramlow,否则记录到histogramhigh。目前就InterframeDelay95PercentileInMs来说,这个分界点是500(kMaxCommonInterframeDelayMs)。histogramlow的每个元素索引序号代表具体的一个帧间隔数值,值表示此帧间隔的次数。分界点是500的话,histogramlow所代表的帧间隔数值范围就是0499。
  histogramhigh与histogramlow的作用类似,但它的类型是std::map,key表示帧间隔数值,value表示次数。
  InterframeDelay95PercentileInMs调用的是rtc::HistogramPercentileCounter的GetPercentile()方法,传入参数0。95f。它的目的是跳过全部计数totalelements的95减1以后,寻找剩余部分里最小的帧间隔数值。注意这里的95是帧间隔的发生总次数,不是帧间隔数值。
  下面举个例子:测试帧间隔数值:{10,20,10,30,10,50,30,70,225,10,110,120,530,145,15,560,127,138,15,200};全部添加到rtc::HistogramPercentileCounter后的排列:histogramlow:〔10〕4〔15〕2〔20〕1〔30〕2〔50〕1〔70〕1〔110〕1〔120〕1〔127〕1〔138〕1〔145〕1〔200〕1〔225〕1longtailboundary:500histogramhigh:530,1560,1按照上面测试序列,(20x0。95)118,跳过18个以后,首个帧间隔是530,所以InterframeDelay95PercentileInMs的结果就是530。表示95的帧间隔都小于530。ReceivedWidthInPixels
  拉取的视频流分辨率的平均宽度。由于远程视频流推流分辨率可能产生变化,这里输出的是平均值,而非其中的某一次。它的类型是rtc::SampleCounter。
  【更多音视频学习资料,点击下方链接免费领取,先码住不迷路】
  音视频开发(资料文档视频教程面试题)(FFmpegWebRTCRTMPRTSPHLSRTP)ReceivedHeightInPixels
  拉取的视频流分辨率的平均高度。其他与ReceivedWidthInPixels相同,不再赘述。MediaBitrateReceivedInKbps
  平均接收码率。接收的字节数来自VideoReceiveStream::Stats的成员变量totalmediabytes。在ReceiveStatisticsProxy::OnCompleteFrame会对接收字节数进行累加,最后作为计算平均接收码率的分子。
  如果你对音视频开发感兴趣,觉得文章对您有帮助,别忘了点赞、收藏哦!或者对本文的一些阐述有自己的看法,有任何问题,欢迎在下方评论区讨论!

因口无遮拦惹祸?TVB视帝大热门疑寸嘴激怒高层,或无缘封帝本文编辑剧透社彤心晓筑未经授权严禁转载,发现抄袭者将进行全网投诉TVB颁奖礼即将播出,很多网民都非常期待,每年观众最关注的一定是视帝视后的殊荣将会花落谁家。今年的竞争似乎尤为激烈,卢海潮离世,儿子含泪坚守岗位没想到,2023年才开始没几天,广东演艺界就有几名前辈相继离世,外来媳妇本地郎中饰演康伯的龚锦堂卢海潮总导演陆晓光,还有粤语相声泰斗杨达。这些陪着我们长大的老前辈的离世都让我们感慨爆款英剧回归,揭露了戴安娜王妃的婚姻围城王冠第五季在1997年香港主权移交的雨幕中迎来结尾,查尔斯王子代表女王出席了交接仪式,结束后他搭乘皇家游艇不列颠尼亚号离开香港。随后,作为昔日英国殖民统治的象征,这艘皇家游艇正式退不老女神都是假的!皱纹堆积脸僵长斑,生图才是人间真实岁月从不曾饶过任何一个人,当美人一朝迟暮,娇媚的容颜一去不复返时,只有优雅的气质才能成就一生的美丽。但在只闻新人笑,不闻旧人哭的娱乐圈,老成了禁忌词为了留住往日的奢华,抓住转瞬即逝小王源的表现依然稳定,完美秀跨年演唱会江苏卫视跨年演唱会素来以科技顶秀相称,今年更是将工作量最大的一场数字虚拟秀表演交予王源。有请王源和他一个人的乐队相信这句与众不同的介绍语足以拉满观众的期待值。当舞台上利用视觉科技呈JJ斗地主S5全年赛事框架S5全年赛事框架JJ斗地主S5赛事将延续S4的相关设定,主要分为冠军杯和锦标赛,二者既有区隔,也有联系。冠军杯,依旧是全国明星战队强强争锋的舞台,上演一场场激动人心的较量。锦标赛,跨洋对战,共竞极限,坦克世界与你一同关注洲际邀请赛今天是街机模式第三次发布的最后一天了,对于想要回味儿时打雪仗的指挥官们来说,一定要把握住最后的时间。在享受街机模式的同时也要关注坦克世界的洲际邀请赛,为代表我们国服队伍出战的OBG电脑单机游戏红色警戒25套更新版绝命时刻将军系列红色警戒(RedAlert)是美国EA游戏公司为PC推出的一系列即时战略游戏,玩家通常简称为红警或RA。极其简单的操作和良好的可玩性,受到了许多玩家的喜爱。本合集包含了红警2红警3梦幻西游,人人都玩不玩才怪,强势回归!03年底开服的梦幻西游,至今仍旧是2D回合制游戏的捞金霸主,究竟什么原因能让玩家如此着迷呢?是游戏的体验感还是氪金的成就感?我想,是情怀也是部分家庭谋生所需。有种魔力你不得不相信,心情随笔少女的爱情想象少女的爱情想象没想到吧,冰山。你是我唯一的快乐你像冰山一样出现,对我笑。让我没来由的喜爱。只想起你就不由自主的幸福泛滥,原来,我喜爱冰山啊!想念的滋味苦涩甜蜜,是爱而不得,求而不能东莞篮球十大贡献人物王仕鹏博观而约取,厚积而薄发编者按回望来时路,从籍籍无名到家喻户晓,东莞篮球向前跨越的每一步都与人息息相关。我们有敢为人先的创始人,他们身处商海却心系球坛,夯实篮球人才培养的土壤,让一城双冠的美谈名扬四海我们
冷冻的馒头不能吃,会滋生黄曲霉素而致癌?不妨了解下再定夺冷冻馒头千万不能吃!吃了易致癌不知道大家有没有看过类似的文章?馒头是常见的主食之一,部分人馒头没吃完的话,可能会放入冰箱冷冻起来,留到下次再吃。但网上流传却有说法称,馒头在冰箱内的明天大寒!中医科专家列出节气食疗方1月20日是大寒节气。北京老年医院中医科副主任医师李金辉提醒,此时饮食以温润为主,减咸增苦以养心气固肾气。他还列出了节气养生的食疗方和代茶饮方。今年春节正值大寒期间,过春节时,饮食索尼Xperia10IV手机海外开始推送安卓13系统IT之家1月19日消息,索尼Xperia10IV是该品牌接收Android13正式版更新的最新手机设备。该设备在东南亚地区(双卡双待版本,型号XQCC72)获得了65。1。A。4。便携按摩器玩家,倍轻松构建多元产品矩阵,营销ampampamp渠道齐头并进(报告出品方分析师中信证券纪敏)公司概况高端智能便携按摩器头号玩家高端品牌定位,专注便携按摩定位高端品牌,构建多品类矩阵。公司成立于2000年,作为小型按摩器行业领军者,主营业务为Openai中chatGPT的替代玩法注册openai后,非梯子情况下是无法试用chatGPT,通过httpschat。openai。com访问chatGPT会被如下拒绝访问其实还有另一种不用梯子的方式实现类似的玩法,CapcomSteam农历新年大促销各类游戏大降价Capcom近日在Steam推出农历新年大促销活动,此次促销涵盖了多种游戏类型,包括动作恐怖格斗冒险和横版游戏。爽快华丽动作游戏鬼泣5Vergil三三折鬼泣4特别版三折鬼泣HD合集PS3经典游戏回顾游戏新春创作纪一,暴雨故事发生在美国东海岸的一座小城镇,每当暴雨倾盆而下的时候警方便会在雨水中发现一具8到10岁左右的男孩的尸体,手中握着折纸,胸口放着一朵兰花,受害者已达8人,至街机人物让玩家垂涎三尺的能力,身体任何部位都能拉长前段时间有位朋友向我咨询一款游戏,其中的细节就是这是过关游戏,1P是男性2P是女性,人物可以伸长手臂,而且还会百裂拳,吃到星星之后可以释放各种技能。看到这个问题,我第一时间反应想到云豹游戏优惠推荐多款游戏预售优惠14OFF本次我们为各位玩家带来了云豹旗下游戏推荐,英雄传说黎之轨迹2ONI鬼族武者立志传均为预售优惠价格,想要预购的朋友不要错过。还有童话森林铁翼少女等游戏史低优惠,折扣时间有限来挑选一款战地2042新兵种系统无武器限制通过熟练度区分在日前发布的最新更新博客公告中,开发商DICE正式向玩家提供了有关战地2042即将到来的3。2更新中转向传统战地基于兵种的职业系统运作方式的更多细节,包括有关全新的武器熟练度系统的通知大同市博物馆及下辖分馆春节期间开放安排尊敬的游客朋友2023年春节期间,大同市博物馆及下辖分馆(梁思成纪念馆北魏明堂遗址博物馆魁星文化博物馆辽金元民族融合博物馆大同红色记忆馆古代铜造艺术博物馆)开闭馆时间通知如下11月
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网