天猫魔盒解码报错

最近有个天猫魔盒(Tmall,MagicBox_M17,MagicBox_M17)有报错,报错信息如下:

generic_decoder.cc, (line 98): Too many frames backed up in the decoder, dropping frame with timestamp 4219980314

https://chromium.googlesource.com/external/webrtc/+/lkgr/modules/video_coding/generic_decoder.cc#115

{
MutexLock lock(&lock_);
int initial_timestamp_map_size = _timestampMap.Size();
frameInfo = _timestampMap.Pop(decodedImage.timestamp());
timestamp_map_size = _timestampMap.Size();
// _timestampMap.Pop() erases all frame upto the specified timestamp and
// return the frame info for this timestamp if it exists. Thus, the
// difference in the _timestampMap size before and after Pop() will show
// internally dropped frames.
dropped_frames =initial_timestamp_map_size - timestamp_map_size - (frameInfo ? 1 : 0);
}

https://chromium.googlesource.com/external/webrtc/+/lkgr/modules/video_coding/timestamp_map.cc#38

absl::optional<VCMFrameInformation> VCMTimestampMap::Pop(uint32_t timestamp) {while (!IsEmpty()) {if (ring_buffer_[next_pop_idx_].timestamp == timestamp) {// Found start time for this timestamp.const VCMFrameInformation& data = ring_buffer_[next_pop_idx_].data;ring_buffer_[next_pop_idx_].timestamp = 0;next_pop_idx_ = (next_pop_idx_ + 1) % capacity_;return data;} else if (IsNewerTimestamp(ring_buffer_[next_pop_idx_].timestamp,timestamp)) {// The timestamp we are looking for is not in the list.return absl::nullopt;}// Not in this position, check next (and forget this position).next_pop_idx_ = (next_pop_idx_ + 1) % capacity_;}// Could not find matching timestamp in list.return absl::nullopt;
}

看了一下前后逻辑,进出 _timestampMap 都在 generic_decoder.cc 中处理。
timestamp_map 中是一个环状数据,容量为10。

所以触发上面的报错有几个可能点:

  1. 解码时间太久了,新数据超过10帧。即30帧视频,超过300ms,60帧视频超过150ms。
  2. 期间有脏数据,导致 timestamp_map 数据在上一轮查找中被置清空。
  3. 解码过程中有报错,导致 timestamp_map 被清空了。

模拟这几个条件,自测只有可能第一点能正常触发日志报错。

所以这个问题的解决就变成:

  1. 降低视频大小、分辨率、修改编码类型实现、降低帧率,可以减少问题的产生。
  2. 去掉上面那一处的判断,即接受存在150ms-300ms的延迟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工人安全绳穿戴识别系统---豌豆云

工人安全绳穿戴识别系统采用视频图像自动识别的形式&#xff0c;豌豆云工人安全绳穿戴识别系统通过安装在作业区域的监控摄像头。 一旦发现工人高空作业未佩戴安全带的情况&#xff0c;系统可以立即发出告警&#xff0c;相关人员可以迅速采取措施&#xff0c;防止事故的发生。…

记一次多线程写入文件出现IOException:Stream Closed的问题

背景 网关在解析1000个05文件&#xff08;txt&#xff09;写入到SFTP文件时&#xff0c;是每次读取1000 * 5条数据&#xff0c;然后每1000笔数据创建一个线程逐条数据进行字段数值映射转换&#xff0c;一共创建5个线程扔到线程池进行处理。每条数据解析完都会将数据写入到SFTP的…

绪论——算法设计原则【数据科学与工程算法基础】

一、题记 最近情绪不太稳定&#xff0c;些许烦躁&#xff0c;也就一直没践行前边说的“学习记录”的想法。现在开始做了&#xff0c;春华易逝&#xff0c;正当时&#xff0c;有想法就去做&#xff0c;踌躇懊悔是这个年纪最不该做的事。 二、前言 之前说了分块做这个系列&#x…

101. Go单测系列1---使用monkey打桩

本文将介绍如何在单元测试中使用monkey进行打桩。 monkey支持为任意函数及方法进行打桩。 monkey介绍 monkey是一个Go单元测试中十分常用的打桩工具&#xff0c;它在运行时通过汇编语言重写可执行文件&#xff0c;将目标函数或方法的实现跳转到桩实现&#xff0c;其原理类似…

我用 Python 做了个小仙女代码蹦迪视频

前言 最近在B站上看到一个漂亮的仙女姐姐跳舞视频&#xff0c;循环看了亿遍又亿遍&#xff0c;久久不能离开&#xff01; 看着仙紫小姐姐的蹦迪视频&#xff0c;除了一键三连还能做什么&#xff1f;突发奇想&#xff0c;能不能把小仙女的蹦迪视频转成代码舞呢&#xff1f; 说…

uniapp引入jQuery

安装 npm install jquery --saveoryarn add jquery引入 import Vue from vue import jquery from "jquery"; Vue.prototype.$ jquery;<template><view>abc</view> </template><script>export default {data() {return {}}} </scr…

Vue3全家桶 - VueRouter - 【1】快速使用(创建路由模块 + 规定路由模式 + 使用路由规则 + RouterView-RouterLink)

VueRouter Vue-Router官网&#xff1b;vue-router 是 vue.js 官方给出的路由解决方案&#xff0c;能够轻松的管理 SPA 项目中组件的切换&#xff1b;安装&#xff1a;yarn add vue-router4&#xff1b; 快速使用 1.1 创建路由模块 在项目中的 src 文件夹中创建一个 router …

【智慧公寓】东胜物联嵌入式硬件解决方案,为智慧公寓解决方案商降本增效,更快实现产品规模化生产

方案背景 东胜物联本次服务的客户是一家专注于提供智慧公寓解决方案的欧洲企业&#xff0c;该公司旨在为用户提供智能&#xff0c;便捷&#xff0c;安全的生活体验。其解决方案涵盖智慧公寓控制、自动化、能源管理和智能建筑&#xff0c;它的使命是通过复杂的控制系统使用户能…

【OpenGL实现 03】纹理贴图原理和实现

目录 一、说明二、纹理贴图原理2.1 纹理融合原理2.2 UV坐标原理 三、生成纹理对象3.1 需要在VAO上绑定纹理坐标3.2 纹理传递3.3 纹理buffer生成 四、代码实现&#xff1a;五、着色器4.1 片段4.2 顶点 五、后记 一、说明 本篇叙述在画出图元的时候&#xff0c;如何贴图纹理图片…

局域网管理工具

每个组织的业务运营方法都是独一无二的&#xff0c;其网络基础设施也是如此&#xff0c;由于随着超融合基础设施等新计算技术的发展&#xff0c;局域网变得越来越复杂&#xff0c;因此局域网管理也应该如此&#xff0c;组织需要量身定制的局域网管理解决方案&#xff0c;这些解…

php 面试题目

当涉及到PHP排序的面试题目时&#xff0c;面试官通常会希望了解你对PHP内置排序函数的理解&#xff0c;以及你如何处理复杂的排序需求。以下是一些可能的PHP排序面试题目&#xff1a; 解释PHP中sort(), rsort(), asort(), arsort(), ksort(), 和 krsort()等函数的区别和用途。…

probiller怎么订阅

很多小伙伴想订阅probiller&#xff0c;但是不知道怎么订阅&#xff0c;这里我使用的是556150的卡订阅的&#xff0c;亲测~~ 所以有想订阅的小伙伴可以点击获取5561卡片&#xff0c;此卡0年费、0月费 下面请看订阅记录 开卡步骤请看图 卡信息在卡中心&#xff0c;cvc安全码 …

(五)关系数据库标准语言SQL

注&#xff1a;课堂讲义使用的数据库 5.1利用SQL语言建立数据库 5.1.1 create Database 5.1.2 create schema...authorization... 创建数据库和创建模式的区别&#xff1a; 数据库是架构的集合&#xff0c;架构是表的集合。但在MySQL中&#xff0c;他们使用的方式是相同的。 …

网络模型的保存和读取

1. 网络保存 import torch import torchvision from torch import nnvgg16 torchvision.models.vgg16(pretrainedFalse)#保存方式1 不仅保存了网络模型结构也保存了参数 torch.save(vgg16,vgg16_method1.pth)#保存方式2 获取模型状态&#xff08;参数&#xff09;并且保存…

深入探索HAProxy:高性能负载均衡器的奥秘

目录 引言 一、HAProxy基础知识 &#xff08;一&#xff09;HAProxy概述 &#xff08;二&#xff09;核心特性 &#xff08;三&#xff09;支持调度算法 二、安装haproxy &#xff08;一&#xff09;下载源码包 &#xff08;二&#xff09;解决依赖环境 &#xff08;三…

Linux系统安装APITable智能表格并结合内网穿透实现公网访问本地服务

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c;是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一&am…

TextView实现打印机效果 ,字符串逐字显示

public class FadeInTextView extends TextView { private Rect textRect new Rect(); private StringBuffer stringBuffer new StringBuffer(); private String[] arr; private int textCount; private int currentIndex -1; /** * 每个字出现的时间 */ priv…

力扣:118. 杨辉三角

力扣&#xff1a;118. 杨辉三角 描述 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输…

第三百九十五回

文章目录 1. 概念介绍2. 生命周期状态与方法2.1 生命周期状态2.2 生命周期方法2.3 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何监听组件的生命周期"相关的内容&#xff0c;本章回中将介绍生命周期库:Lifecycle.闲话休提&#xff0c;让我们一起Talk…

Python-Pong-Game

我还加了音效&#xff0c;类似于小时候游戏机上的弹球游戏 import os import turtle import pygame#初始化pygame pygame.init()#加载声音文件 bounce_sound pygame.mixer.Sound("bounce.mp3")wn turtle.Screen() wn.title("Pong by ") wn.bgcolor(&qu…