标签: android-mediacodec

RGB 到 YUV420 平面和半平面?

在 Android 中,我有byte[]单独的 r、g、b、a 颜色组成图像的像素。

我需要将这些颜色转换为YUV420 平面或半平面(取决于设备),然后才能使用 Android 的 MediaCodec 和 MediaMuxer 创建这些图像的 MP4。

我目前正在我的 Nexus 10 上进行测试,报告称它使用COLOR_FormatYUV420Planar.

这是我必须将 RGB 转换为 YUV420 planar 的代码:

private void convertRGBAtoYUV420P(byte[] rgba, byte[] yuv, int width, int height)
{
    final int frameSize = width * height;
    final int chromasize = frameSize / 4;

    int yIndex = 0;
    int uIndex = frameSize;
    int vIndex = frameSize + chromasize;

    int R, G, B, Y, U, V;
    int index = …
Run Code Online (Sandbox Code Playgroud)

java rgb android yuv android-mediacodec

3
推荐指数
1
解决办法
3025
查看次数

Android Q 上的 AMediaExtractor setDataSource AMEDIA_ERROR_UNSUPPORTED 错误

我正在使用AMediaCodecAMediaExtractor,在所有设备上一切正常(我希望:),但是如果我在 Android Q 上检查相同的代码(在我的情况下是 Pixel 2XL),我会得到这样的错误AMEDIA_ERROR_UNSUPPORTED

我做什么

bool NativeCodec::createStreamingMediaPlayer(const std::string &filename)
{
    AMediaExtractor *ex = AMediaExtractor_new();
    media_status_t err = 
      AMediaExtractor_setDataSource(ex, filename.c_str());;  <-- Here media status I got AMEDIA_ERROR_UNSUPPORTED 

    if (err != AMEDIA_OK)
    {
        __android_log_print(ANDROID_LOG_ERROR, "ERROR", "ERROR ::: %s", std::to_string(err).c_str());
        return false;
    }

    .....
}
Run Code Online (Sandbox Code Playgroud)

也许这与 Android Q 中引入的隐私有关,但我没有找到任何有关它的信息......

如何检查这个问题呢?

media android mediaextractor android-mediacodec android-10.0

3
推荐指数
1
解决办法
1062
查看次数

为什么“queueInputBuffer”中的“MediaCodec CodecException”仅发生在 Android API 29 上?

基本信息

目标SDK版本28

目标:课程的目标是在发送到我的服务器之前调整视频大小。

问题:应用程序仅在 API 29 上崩溃,无论是使用真实设备还是使用 AVD。例如,该代码在Pixel 2 API 28上运行良好,但在Pixel 2 API 29上运行不佳

源代码:我主要使用来自bigflake.com的示例代码。

错误信息(详细日志见下文):

E/AndroidRuntime: FATAL EXCEPTION: Thread-20
    Process: com.myapp.myapp, PID: 9189
    android.media.MediaCodec$CodecException: Error 0xfffffff3
        at android.media.MediaCodec.native_queueInputBuffer(Native Method)
        at android.media.MediaCodec.queueInputBuffer(MediaCodec.java:2450)
Run Code Online (Sandbox Code Playgroud)

我尝试过的 由于 的日志信息有限,我尝试从 更改为MediaCodec$CodecException,但没有成功。MediaCodecInfo.CodecCapabilities.COLOR_FormatSurfaceMediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible


日志将显示最后两个缓冲周期。我希望你能看到一些有价值的东西。

无法在 *Pixel 2 API 29* 上运行的日志

D/VideoResolutionChanger: no audio encoder output buffer
D/VideoResolutionChanger: loop: V(true){extracted:49(done:false) decoded:45(done:false) encoded:43(done:false)} A(true){extracted:45(done:false) decoded:44(done:false) encoded:1(done:false) pending:-1} muxing:true(V:0,A:1)
D/VideoResolutionChanger: video decoder: returned input buffer: 3
    video …
Run Code Online (Sandbox Code Playgroud)

android video-encoding input-buffer mediamuxer android-mediacodec

3
推荐指数
1
解决办法
4016
查看次数

MediaCodec 和输出格式

我正在尝试使用 MediaDecoder 类编写视频播放器,我遇到了一个问题,它阻止了我的开发,

这是一个代码片段

extractor = new MediaExtractor();
extractor.setDataSource(filename);

MediaFormat format = extractor.getTrackFormat(i);
extractor.selectTrack(0);

MediaCodec decoder = MediaCodec.createDecoderByType(mime);
decoder.configure(format, null, null, 0);

decoder.start();

ByteBuffer[] inputBuffers = decoder.getInputBuffers();
ByteBuffer[] outputBuffers = decoder.getOutputBuffers();

Log.d(TAG, " "+decoder.getOutputFormat());
Run Code Online (Sandbox Code Playgroud)

问题是每个设备打印的输出格式都会发生变化,因此无法将其打印到 Open GL 纹理。

有没有办法强制解码器始终输出相同的格式?如果没有,有没有人知道任何可以进行转换的库?

非常感谢您的任何见解

android android-mediacodec

2
推荐指数
1
解决办法
3360
查看次数

MediaCodec (NDK) 与使用 C++ 的 Android 移动设备 (Snapdragon 820) 上播放器的 OpenMAX

根据对 Android NDK 下可用示例的审查,我们可以使用 MediaCodec 或 OpenMAXAL 接口来使用硬件解码器 (OMX.xxx)。

我的问题是:

  1. 这是在移动设备(Android 上的 Snapdragon 820)上使用硬件解码器的最佳方式吗?

  2. 使用 OMX 比 MediaCodec 有什么优势吗?当前的 Android 标头实际上仅支持 MPEG2/.ts mimetype。我希望您可以通过 OpenMax 支持视频流解码(mp4 等) - 这是正确的评估吗?

我的要求是:

  1. 支持常见容器的流式音视频播放。
  2. 利用移动硬件(GPU + DSP)进行解码。
  3. 以每帧为基础执行图像处理。
  4. 避免编写自己的音频和视频时间同步。

我已经使用 ffmpeg 编写了基本播放器,但我无法使用硬件解码器,所以没有遵循它。

我对任何其他能够实现上述目标的框架(免费或商业)持开放态度。

android android-mediacodec

2
推荐指数
1
解决办法
2877
查看次数

在 android 中修剪 aac-mp4 音频(mediaCodec/extractor)

我想修剪现有的 aac-mp4 音频文件。我第一次想“修剪” 0 个字节,基本上只是为了使用 MediaCodec/MediaExtractor 复制文件。

问题:

  1. 标题是固定大小的,我可以从旧文件中复制它吗?或者它有一些关于曲目持续时间的信息,我需要更新它?如果它有固定的大小(为了知道我应该从旧文件复制多少字节)?
  2. 我应该只使用提取器的 getSampleData(ByteBuffer, offset) 和 Advance() 还是应该使用 MediaCodec 并提取样本(解码),然后使用编码器再次对它们进行编码 - 并写入编码值?

android mediaextractor android-mediacodec

2
推荐指数
1
解决办法
689
查看次数

如何修复错误重复条目:com/coremedia/iso/AbstractBoxParser$1.class?

将 isoparser-1.0.6.jar 添加到 lib 文件夹后,我收到类似这样的错误

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
Run Code Online (Sandbox Code Playgroud)

com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:com/coremedia/iso/AbstractBoxParser$1.class

这是我的等级:

dependencies {
    compile 'com.android.support:multidex:1.0.1'
    testCompile 'junit:junit:4.12'
    compile files('libs/vdopialwsdk.jar')
    compile files('libs/YouTubeAndroidPlayerApi.jar')
    compile files('libs/httpmime-4.4-beta1.jar')
    compile files('libs/httpcore-4.4.jar')
    compile files('libs/isoparser-1.0.6.jar')
    compile files('libs/android-websockets-master.jar')
    compile files('libs/zcsprinterV.jar')
    compile project(':library')
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:support-v4:23.3.0'
    compile 'com.android.support:design:23.3.0'
    compile 'com.android.support:gridlayout-v7:23.3.0'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile 'com.android.support:palette-v7:23.3.0'
    compile 'com.android.support:recyclerview-v7:23.3.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.1'
    compile 'com.miguelcatalan:materialsearchview:1.4.0'
    compile 'com.github.quentin7b:android-location-tracker:3.2'
    compile group: 'org.igniterealtime.smack', name: 'smack-resolver-minidns', version: '4.1.7'
    compile group: 'org.igniterealtime.smack', name: 'smack-extensions', version: '4.1.7'
    compile group: 'org.igniterealtime.smack', name: 'smack-tcp', version: '4.1.7'
    compile group: 'org.igniterealtime.smack', name: 'smack-legacy', …
Run Code Online (Sandbox Code Playgroud)

video android video-compression android-mediacodec

2
推荐指数
1
解决办法
2164
查看次数

在 MediaCode 中启用 B 帧编码

全部,

我正在使用 MediaCodec 类生成视频/avc 视频流。流编码很好,但是,我想使用 B 帧以获得更好的压缩。虽然我已将配置文件设置为 AVCProfileHigh 编码器不会生成 B 帧。视频流只有 I 帧和 P 帧。

以下是媒体配置文件配置。

mFormat.setInteger(MediaFormat.KEY_PROFILE, MediaCodecInfo.CodecProfileLevel.AVCProfileHigh);

MediaCoder 支持 B 帧吗?如果是,则锄头配置 B 帧。

android android-mediacodec

2
推荐指数
1
解决办法
1545
查看次数

如何使用MediaCodec修剪视频

我正在尝试使用MediaProjection API记录屏幕。我想修剪媒体投影录制的视频。有没有不使用任何第三方依赖项的方法?

android mediamuxer android-mediaprojection android-mediacodec

1
推荐指数
1
解决办法
2255
查看次数

可以使用 MediaCodecSDK 为 Android 中的视频添加叠加层吗?

假设您有一个 20 秒的视频(可能是用设备相机拍摄的),并且您想在视频中添加一个叠加层。

(叠加层只是一个普通的光栅图像,即一个 Android Image( doc )。)

您想要创建一个新视频,将叠加作为视频图像的一部分,然后保存视频。

事实上,MediaCodec SDK 可以用来做这个工作吗?

https://developer.android.com/reference/android/media/MediaCodec

过去,您通常会使用 FFMPEG 来解决此类问题,但这是一团糟且速度缓慢。

MediaCodec 可以在这里使用吗?

由于它是“新的”,我无法找到有关此的任何信息.....

android video-processing android-mediacodec

1
推荐指数
1
解决办法
1505
查看次数