gpt4 book ai didi

h.264 - 直接访问StageFright.so以从Android中的JNIlayer解码H.264流

转载 作者:行者123 更新时间:2023-12-03 03:33:06 27 4
gpt4 key购买 nike

有没有办法在 Android 2.3 或更高版本上直接访问 libstagefright.so 以从 JNI 层解码 H.264 流?

最佳答案

如果您的目标是解码基本 H.264 流,那么您的代码必须确保提取该流,编解码器特定数据是提供给编解码器的主要是SPSPPS数据,并且帧数据连同时间戳一起提供给编解码器。在所有 Android 版本中,最常见的接口(interface)是 OMXCodec,它是对底层 OMX 组件的抽象。

在 Gingerbread (Android 2.3) 和 ICS (Android 4.0.0) 中,如果您想创建解码器,最好的方法是创建一个 OMXCodec 组件并通过MediaSource 接口(interface),即您的包装器代码被建模为 MediaSourceOMXCodec 从该源读取并执行解码。

Android 2.3 视频解码器创建链接:http://androidxref.com/2.3.6/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1094

Android 4.0.0 视频解码器创建链接:http://androidxref.com/4.0.4/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1474

主要挑战如下:

  1. 将输入建模为 MediaSource

  2. 读取包装器代码以从编解码器读取缓冲区并对其进行处理并将其释放回编解码器。

为了简化起见,您可以查看 stagefright 命令行可执行代码,如 http://androidxref.com/4.0.4/xref/frameworks/base/cmds/stagefright/stagefright.cpp#233 所示。

但是,如果您的程序基于 JellyBean(Android 4.1.x、4.2.x)以上版本,那么这些会稍微简化一些。从您的 JNI 代码中,您可以创建一个 MediaCodec 组件并使用它进行解码。要将其集成到您的程序中,您可以引用 http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#316 中的 SimplePlayer 实现。

关于h.264 - 直接访问StageFright.so以从Android中的JNIlayer解码H.264流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16128960/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com