文档章节

Android MediaCodec 设置 MediaFormat.KEY_PROFILE 问题

Jerikc
 Jerikc
发布于 2015/07/25 11:22
字数 223
阅读 5126
收藏 3

我在设置 MediaCodec profile 的时候,一直没有成功,看了源码之后才发现问题之所在:

https://android.googlesource.com/platform/frameworks/av/+/437ced8a14944bf5450df50c5e7e7a6dfe20ea40/media/libstagefright/ACodec.cpp


设置了 profile 之后,你还要设置一个 Level 属性,但是目前最新的 SDK 里面并没有提供这个 Key。

即使你手动的设置 level ,比如像这样:

MediaCodec codec = createEncoderByType(MediaFormat.MIMETYPE_VIDEO_AVC);
MediaFormat format = = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_AVC, 1920, 1080);
format.setInteger(MediaFormat.KEY_PROFILE, MediaCodecInfo.CodecProfileLevel.AVCProfileHigh);
format.setInteger("level", Level_xxx);

codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
还是不行的,因为 Android 强制将 profile 设置为 Baseline 了。
// XXX
    if (h264type.eProfile != OMX_VIDEO_AVCProfileBaseline) {
        ALOGW("Use baseline profile instead of %d for AVC recording",
            h264type.eProfile);
        h264type.eProfile = OMX_VIDEO_AVCProfileBaseline;
    }

总之,Android 在使用 MediaCodec 进行 encode 的时候,只能使用 Baseline 的 profile。

Google 之后,发现也有其他的朋友发现了类似的问题,

https://code.google.com/p/android/issues/detail?id=163580

看来这个问题确实存在,不过不清楚为什么 Android 要强制使用 Baseline 的 profile。

© 著作权归作者所有

Jerikc
粉丝 97
博文 246
码字总数 22757
作品 0
浦东
程序员
私信 提问
加载中

评论(2)

Jerikc
Jerikc

引用来自“BinSys”的评论

今天也发现可这个逗比的问题~why?看了一堆commit log也没找到是哪位神人加的代码,倒是从cm的代码里发现这段被#if 0了
cm 的代码?
BinSys
BinSys
今天也发现可这个逗比的问题~why?看了一堆commit log也没找到是哪位神人加的代码,倒是从cm的代码里发现这段被#if 0了
谈谈关于Android视频编码的那些坑

本文讲的是谈论关于Android视频编码的那些坑,Android的视频相关的开发,大概一直是整个Android生态,以及Android API中,最为分裂以及兼容性问题最为突出的一部分。摄像头,以及视频编码相关...

乐乎无趣
2017/11/06
0
0
MediaCodec 编解码 CTS示例

Google CTS source 备注 学习理解该代码,有问题可以留言

Javan
2015/10/21
529
0
android 利用MediaMuxer将mp4中音视频分离

利用MediaMuxer将mp4中音视频分离需要用到的类有MediaExtractor,MediaFormat,以及主要的MediaMuxer. MediaExtractor 主要是将mp4文件中的音视频Track抽出来以供MediaMuxer使用。例如: Me...

10TB的真爱
2018/01/06
0
0
Android 硬编硬解退坑指南

抖音、快手在国内迅速走红,也带动了国内短视频的热潮。短视频录制、编辑等等功能,是一项系统性、专业性很强的领域。经过一段时间发展后,有多种方式可以通向罗马,但并不是每一条路都好走。...

_qisen
2018/09/01
0
0
Android音视频之使用MediaCodec编解码AAC

现在的短视频、音视频通话都离不开编码和解码,今天就来聊一下音频的编解码。 1. 音频的基本概念 在音频开发中,有些基本概念是需要了解的。 采样率(SampleRate):每秒采集声音的数量,它用...

落英坠露
05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊Elasticsearch的MonitorService

序 本文主要研究一下Elasticsearch的MonitorService MonitorService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/MonitorService.java public class MonitorServic......

go4it
36分钟前
2
0
二、Docker

1、Docker - The TLDR(Too Long,Don't Read,Linxu 终端工具 ) Docker是在Linux和Windows上运行的软件。它创建、管理和编排容器。该软件以开源方式开发,在Github上作为Moby开源项目的一部分。...

倪伟伟
49分钟前
3
0
Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一...

豌豆花下猫
今天
5
0
Guava RateLimiter限流源码解析和实例应用

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高...

算法之名
今天
13
0
国产达梦数据库与MySQL的区别

背景 由于项目上的需要,把项目实现国产化,把底层的MySQL数据库替换为国产的达梦数据库,花了一周的时间研究了国产的数据库-达梦数据库,它和MySQL有一定的区别,SQL的写法也有一些区别。 ...

TSMYK
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部