在 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) 我正在使用AMediaCodec和AMediaExtractor,在所有设备上一切正常(我希望:),但是如果我在 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
基本信息
目标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
日志将显示最后两个缓冲周期。我希望你能看到一些有价值的东西。
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
我正在尝试使用 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 NDK 下可用示例的审查,我们可以使用 MediaCodec 或 OpenMAXAL 接口来使用硬件解码器 (OMX.xxx)。
我的问题是:
这是在移动设备(Android 上的 Snapdragon 820)上使用硬件解码器的最佳方式吗?
使用 OMX 比 MediaCodec 有什么优势吗?当前的 Android 标头实际上仅支持 MPEG2/.ts mimetype。我希望您可以通过 OpenMax 支持视频流解码(mp4 等) - 这是正确的评估吗?
我的要求是:
我已经使用 ffmpeg 编写了基本播放器,但我无法使用硬件解码器,所以没有遵循它。
我对任何其他能够实现上述目标的框架(免费或商业)持开放态度。
我想修剪现有的 aac-mp4 音频文件。我第一次想“修剪” 0 个字节,基本上只是为了使用 MediaCodec/MediaExtractor 复制文件。
问题:
将 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) 全部,
我正在使用 MediaCodec 类生成视频/avc 视频流。流编码很好,但是,我想使用 B 帧以获得更好的压缩。虽然我已将配置文件设置为 AVCProfileHigh 编码器不会生成 B 帧。视频流只有 I 帧和 P 帧。
以下是媒体配置文件配置。
mFormat.setInteger(MediaFormat.KEY_PROFILE, MediaCodecInfo.CodecProfileLevel.AVCProfileHigh);
MediaCoder 支持 B 帧吗?如果是,则锄头配置 B 帧。
我正在尝试使用MediaProjection API记录屏幕。我想修剪媒体投影录制的视频。有没有不使用任何第三方依赖项的方法?
android mediamuxer android-mediaprojection android-mediacodec
假设您有一个 20 秒的视频(可能是用设备相机拍摄的),并且您想在视频中添加一个叠加层。
(叠加层只是一个普通的光栅图像,即一个 Android Image( doc )。)
您想要创建一个新视频,将叠加作为视频图像的一部分,然后保存视频。
事实上,MediaCodec SDK 可以用来做这个工作吗?
https://developer.android.com/reference/android/media/MediaCodec
过去,您通常会使用 FFMPEG 来解决此类问题,但这是一团糟且速度缓慢。
MediaCodec 可以在这里使用吗?
由于它是“新的”,我无法找到有关此的任何信息.....
android ×10
mediamuxer ×2
android-10.0 ×1
input-buffer ×1
java ×1
media ×1
rgb ×1
video ×1
yuv ×1