video 视频编解码一些debug方法
文章目录
- 一、通过命令去获取一些数据
- 1.2 确定我们xml配置文件:
- 二、查看我们芯片支持的编码能力
- 三、通过log去获取信息
这个文章的主要内容是为了后期性能方面的debug, 设计到前期的bringup则没有
一、通过命令去获取一些数据
获取媒体相关的参数:
# getprop | grep media
获取后如下所示:
[audio.deep_buffer.media]: [true]
[init.svc.media]: [running]
[init.svc.media.swcodec]: [running]
[init.svc.mediadrm]: [running]
[init.svc.mediaextractor]: [running]
[init.svc.mediametrics]: [running]
[init.svc.qti-media]: [stopped]
[init.svc.vendor-qti-media-c2-hal-1-0]: [running]
[init.svc.vendor-qti-media-c2audio-hal-1-0]: [running]
[init.svc.vendor.media.omx]: [running]
[init.svc_debug_pid.media]: [2006]
[init.svc_debug_pid.media.swcodec]: [2092]
[init.svc_debug_pid.mediaextractor]: [2000]
[init.svc_debug_pid.mediametrics]: [2003]
[init.svc_debug_pid.qti-media]: []
[init.svc_debug_pid.vendor-qti-media-c2-hal-1-0]: [1487]
[init.svc_debug_pid.vendor-qti-media-c2audio-hal-1-0]: [1488]
[init.svc_debug_pid.vendor.media.omx]: [2032]
[media.aac_51_output_enabled]: [true]
[media.settings.xml]: [/vendor/etc/media_profiles_vendor.xml]
[media.stagefright.audio.deep]: [false]
[media.stagefright.enable-aac]: [true]
[media.stagefright.enable-fma2dp]: [true]
[media.stagefright.enable-http]: [true]
[media.stagefright.enable-player]: [true]
[media.stagefright.enable-qcp]: [true]
[media.stagefright.enable-scan]: [true]
[media.stagefright.thumbnail.prefer_hw_codecs]: [true]
[ro.boottime.media]: [17647882232]
[ro.boottime.media.swcodec]: [17719764680]
[ro.boottime.mediaextractor]: [17644505982]
[ro.boottime.mediametrics]: [17646084784]
[ro.boottime.qti-media]: [14864513588]
[ro.boottime.vendor-qti-media-c2-hal-1-0]: [17003630982]
[ro.boottime.vendor-qti-media-c2audio-hal-1-0]: [17006300149]
[ro.boottime.vendor.media.omx]: [17663434732]
[ro.media.recorder-max-base-layer-fps]: [60]
[ro.media.xml_variant.codecs]: [_kalama]
[ro.media.xml_variant.codecs_performance]: [_kalama]
[ro.mediaserver.64b.enable]: [true]
[vendor.display.enable_latch_media_content]: [1]
[vendor.media.system.build_codename]: [13]
[vendor.media.target_variant]: [_kalama]
这里我们就大致能看到:
[ro.media.xml_variant.codecs]: [_kalama]
[ro.media.xml_variant.codecs_performance]: [_kalama]
这两个文件,我们可以看到名字 和我们对应的配置xml文件是有关联的 。
1.2 确定我们xml配置文件:
# adb logcat -b all | grep -Ei "getVendorXmlPath"
05-12 09:25:36.226 13255 13314 I MediaCodecsXmlParser: getVendorXmlPath /vendor/etc/media_codecs_kalama_vendor.xml
05-12 09:25:36.228 13255 13314 I MediaCodecsXmlParser: getVendorXmlPath /vendor/etc/media_codecs_performance_kalama_vendor.xml
这个Log在开机的时候会打印一次,然后就会把这个log冲掉,所以有时候我们没有看到这个log也是正常的,
我们可以通过重启相关的服务来重新获取一次
# adb shell kalama:/ # pkill -9 media*
通过杀死这些相关的服务,后台会默认重启这个时候我们就能看到了。
qcom的xml一般会在后面多一个vendor,所以我们看到的就是 media_codecs_kalama_vendor.xml
其中这个 _kalama 就是我们上面获取的 [ro.media.xml_variant.codecs] 的名字。
二、查看我们芯片支持的编码能力
# adb shell dumpsys media.playerMedia type 'audio/3gpp':Decoder "c2.android.amrnb.decoder" supportsxxxxxxxMedia type 'video/avc':Decoder "c2.android.avc.decoder" supportsxxxxxxxMedia type 'video/avc':Decoder "c2.qti.avc.decoder" supportsxxxxxxx
从这里面我们就能看到相关的支持, 一般来说 格式都是 c2.android.xxxxx .decoder这种
c2代表框架,可能是 omx (android12之前的框架)也可能是 c2(codec2框架 android13及其以上)
Android 代表google的原生代码, 这种基本都是软件编码,性能很差的,而不同的平台这里会有不同的名字,比如高通就是 qti.
Xxxxx 是h264、 h265、video、 audio, 不同的文件格式有不同的名字, video h264就是 avc. Video H265就是 hevc 其余的大家可以去查查
decoder代表的就是解码器。 encoder就是编码器。
三、通过log去获取信息
平台为了保证性能,一般不会打开相关的log,我们可以通过对应的debug手册去获取如何打开这些debug方案;
如高通qsc8550平台:

如果是走的我们需要的硬编码,log会如下所示:
D CCodecBufferChannel: [c2.qti.avc.encoder#157]
// c2.qti.avc.encoder qti代表的是高通的硬件编码器D CCodecBufferChannel: [c2.android.avc.encoder#157]
// android.avc.encoder 代表的是原生google的软件编码逻辑
硬件编码的log大致如下图

软件编码我们基本不会使用。所以我这边暂时没有相关的 log。
相关文章:
video 视频编解码一些debug方法
文章目录 一、通过命令去获取一些数据1.2 确定我们xml配置文件: 二、查看我们芯片支持的编码能力三、通过log去获取信息 这个文章的主要内容是为了后期性能方面的debug, 设计到前期的bringup则没有 一、通过命令去获取一些数据 获取媒体相关的参数: # getprop |…...
中秋国庆假期——模板推荐
要说最近能让人开心的事情是什么?大概就是下周将迎来8天假,小编帮大家数了数还有11天,就要放中秋国庆的假期了。作为一个资深打工人,本周的日常即将变成:上班想放假、下班想放假、想放假… 但是宝子们要注意,大家在盼…...
【配代码演示】Cookie和Session的区别
一、共同之处: cookie和session都是用来跟踪浏览器用户身份的会话方式。 二、工作原理: 1.Cookie的工作原理 (1)浏览器端第一次发送请求到服务器端 (2)服务器端创建Cookie,该Cookie中包含用户的…...
【Linux初阶】信号入门2 | 信号阻塞、捕捉、保存
文章目录 ☀️前言☀️一、信号阻塞🌻1.信号其他相关常见概念🌻2.信号在内核中的表示 ☀️二、信号捕捉(重点)🌻1.用户态 & 内核态🌻2.如何判断进程处于用户态或内核态🌻3.OS接口的访问方法…...
【已解决】:该该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)“按钮获取它的所有权。否则,请按“取消(C)“按钮以防损坏。
现象 启动VMware虚拟机,无法正常打开并出现以下信息: 原因 这是因为当运行一个“虚拟系统”时,为防止该系统被另外一个VMware程序打开,导致数据被修改或损坏,VMware会自动在该“虚拟系统”所在的文件夹下,…...
系统架构常用的工具
HBase HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样ÿ…...
腾讯云2核4G服务器5M带宽 218元一年 优惠价格明细表
腾讯云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS,轻量2核4G5M带宽服务器218元一年: 腾讯云2核4G服务器5M带宽收费 腾讯云2核4G服务器可以选择轻量应用服务器或者ECS云服务器,云服务器ECS是专业级云服务器,大多数使用…...
[C++ 网络协议] 多播与广播
目录 1. 多播 1.1 多播的使用情形 1.2 多播的原理 1.3 如何实现多播 1.4 多播的代码实现 2. 广播 2.1 广播与多播的区别 2.2 广播的分类 2.3 实现广播 1. 多播 1.1 多播的使用情形 考虑一种情形,你要向10000名用户发送数据,此时如果用TCP提供服…...
IOS17正式版今日发布
北京时间9月19日凌晨,苹果公司正式向全球用户推送了期待已久的iOS 17正式版。此次更新为iPhone带来了多项激动人心的功能,包括对“电话”、“信息”、FaceTime通话的重大更新,“待机显示”以及音乐、小组件、Safari浏览器的升级等。 据了解&…...
2560. 打家劫舍 IV
沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统,所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额 。 给你一个整数数…...
java web中部署log4j.xml
标题:Java Web中部署log4j.xml 目录: 1. 介绍 2. 配置log4j.xml文件 3. 配置web.xml文件 4. 配置Spring框架 5. 配置Spring Bean 6. 总结 ## 1. 介绍 在Java Web开发中,日志记录是非常重要的一部分。log4j是一个常用的Java日志记录框架&am…...
【张兔兔送书第一期:考研必备书单】
考研书单必备 《数据结构与算法分析》《计算机网络:自顶向下方法》《现代操作系统》《深入理解计算机系统》《概率论基础教程(原书第10版》《线性代数(原书第10版)》《线性代数及其应用》赠书活动 八九月的朋友圈刮起了一股晒通知…...
基于Spring Boot+ Vue的健身房管理系统与实现
小熊学Java全能学面试指南:https://javaxiaobear.cn 摘要 随着健身行业的快速发展,健身房管理系统成为了提高管理效率和用户体验的重要工具。本论文旨在设计与实现一种基于前后端分离的健身房管理系统,通过前后端分离的架构模式,…...
ThreadLocal线程局部变量
1.原理 ThreadLocal是用来保存当前线程数据的,每一个线程的内部都有一个ThreadLocalMap,当前这个map中存储了以当前ThreadLocal作键,具体的数据作值的一个个Entry对象。 为什么非得以ThreadLocal对象作键呢?因为一个线程可能使用了…...
C++ Primer (第五版)第一章习题部分答案
在我自学C过程中,我选择了CPrimer这本书,并对部分代码习题进行了求解以及运行结果。接下来几个月我将为大家定时按章节更新习题答案与运行结果: 目录 1.9编写程序,使用while循环将50到100的整数相加 1.10 除了运算符将运算对象的值增加1之外,还有一个…...
Python与GUI集成:零基础也能开发国际象棋游戏
引言: 国际象棋,作为世界上最受欢迎的棋类游戏之一,拥有丰富的策略和深度。但是,你知道自己可以使用Python来创建一个简单的国际象棋游戏并为其添加图形用户界面(GUI)吗?在本教程中,…...
SaaS软件能保证数据安全吗?
SaaS软件能保证数据安全吗? 本文将要尝试从各个方面尽可能客观的去阐述这个问题,而不是简单自嗨式的说简道云平台如何保障数据安全。 建议先收藏起来慢慢品! 01 SaaS安全到底是什么?——定义解读 本文所用SaaS平台>>>…...
方案:基于AI烟火识别与视频技术的秸秆焚烧智能化监控预警方案
一、方案背景 为严控秸秆露天焚烧,改善环境空气质量,各省相继发布秸秆禁烧工作内容。以安徽省为例,大气污染防治联席会议下发了该省2020年秸秆禁烧工作部署通知。2020年起,气象局将对全省秸秆焚烧火点实施卫星全年全时段监测&…...
phantomjs插件---实现通过链接生成网页截图
Phantomjs | PhantomJS 配置要求 windows下,安装完成phantomJS 设置phantomjs环境变量【也可直接使用phantomjs目录下的执行文件】 直接通过访问php文件执行/通过cmd命令行执行【phantomjs phantom_script.js】 linux下,安装完成phantomJS 设置phantomjs环境变量 直…...
SpringBoot分页实现查询数据
1.原生查询 1.1创建分页查询实体类 package com.itheima.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;//分页查询结果封装类 Data NoArgsConstructor AllArgsConstructor public class PageBean {pr…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
