问题标签 [mediaextractor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1716 浏览

android - Android 视频精准搜索

我正在努力使用 MediaExtractor 进行精确搜索seekTo()。虽然我可以毫无问题地寻求同步帧,但我想寻求特定的时间。这个问题让我想到了一些如何做到这一点的想法,但我不确定它们是否有效。基本上,我必须寻找最接近的前一个同步帧,然后advance()是提取器,直到达到目标时间。该过程中的每一帧都将被馈送到解码器,即第一个 I 帧和其余的 P 帧。这是相关的代码片段(基于google/grafika的 MoviePlayer):

正如您可以想象的那样,通常我会排队大量的帧,但现在我对内存消耗或最终滞后感到满意。问题是该dequeueInputBuffer()方法仅在循环中工作一段时间,最终停留在返回 -1,因此根据文档,这意味着缓冲区不可用。如果我将其更改TIMEOUT_USEC-1,我将得到无限循环。

有人可以告诉我这种方法是否正确,或者为什么在某些时候我无法访问inputBuffer

0 投票
0 回答
279 浏览

android - 快速的android解码/编码媒体提取器

我正在关注来自MediaMuxer 视频压缩(更改分辨率)https://android.googlesource.com/platform/cts/+/kitkat-release/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest 的代码。爪哇_

在我的 HTC One M8 上播放一分钟的视频,需要 40 秒才能完全压缩到更小的文件大小。然而,在我的 Sony Z3 上,压缩一分钟的视频需要整整两分钟。有没有更高效的方法来进行这种压缩?

以 Whatsapp 为例,它似乎在一分二十秒内压缩了相同的视频(一分钟)。

0 投票
0 回答
71 浏览

android - 访问当前在 Android 设备上播放的音频文件的 MediaBuffer

设置数据源时,我可以通过 mediaextrator、mediacodec 和音轨访问文件/流的媒体缓冲区。

我想要的只是一种访问通过 Android 中的任何音乐应用程序播放的音频的媒体缓冲区的方法。

0 投票
0 回答
261 浏览

android - 增加 PCM 样本数据大小

我在使用它时注意到MediaExtractor了,因为电影的音频样本比视频帧多得多,因此使用 One-Image-Decode/One-SoundSample-Decode/One-Image-Encode/OneSound-SoundSample-Encode 不是好的策略,因为它总是以有更多的音频样本排队等待编码而告终。

当使用MediaExtractor自定义 PCM 样本大小大于 4096 字节(或上下文的大小)时,这是否可能?8192会很棒。

为了:

大小将始终为 4096。

这意味着对于 44100、立体声、16 位声音,这表示 +- 23 毫秒,即每秒或多或少 43.5 个音频样本,有时每秒 24 个图像。将 PCM 的样本大小加倍将允许视频始终有相同或更多的音频准备好进行编码。这甚至可以让我以 24 fps 同步它并使用 播放音频样本AudioTrack,因此它为实时预览我的渲染打开了可能性。

我试过了:

但它看起来更像是为解码器设置最小内部缓冲区的优化设置。

尺寸可以定制吗?

[编辑]

目前,我在排队时为每个视频帧编码两个音频样本,并且视频编码速度的性能变化并不明显。正如预测的那样,这几乎同时结束。

0 投票
0 回答
249 浏览

android - 低杠杆 hls 安卓播放器

我在 HLS 流上使用MediaExtractor类时遇到问题。

根据此处提供的示例代码,我的这个简单的应用程序很糟糕;使用mp4 文件我没有问题:媒体提取器检测到编解码器,并且可以绘制到表面视图表面。

如果我将相同的代码切换到hls 流,不幸的是,媒体提取器类无法检测到格式。

有没有办法指示媒体提取器正确处理这种格式?

0 投票
0 回答
655 浏览

java - 如何将 rtsp 数据提取到 MediaCodec

我在使用 MediaPlayer 播放我的 RTSP 流时遇到问题,所以我决定使用较低级别的 API - MediaExtractor 和 MediaCodec。

问题是 MediaExtractor 的 setDataSource() 方法不接受 RTSP 流。

所以,我的问题是,如何将 rtsp 数据放入 MediaCodec 输入缓冲区?

0 投票
1 回答
5583 浏览

android - Android MediaExtractor readSampleData IllegalArgumentException

我尝试关注这个问题Concatenate multiple mp4 audio files using android´s MediaMuxer and concatenate video files。

但是由于某种原因,当我调用 readSampleData 时,MediaExtractor 会引发 IllegalArgumentException

在官方 API 中,这个函数根本不应该抛出任何异常!这是怎么回事 ?

我发现一个老问题表明 ByteBuffer 的大小可能是负责任的:Android MediaMuxer readSampleData IllegalStateException

我已经尝试了大量的尺寸值,但没有一个能解决问题。有我应该知道的标准尺寸吗?

任何提示都会有所帮助!

0 投票
1 回答
1176 浏览

android - 使用 MediaSync 和 MediaExtractor 播放速度提高 2 倍

我正在使用 MediaSync 和 MediaExtractor 播放视频。

要开始播放,我写了下面的代码

我已将以下代码用于解码器回调:

如果我修改了 onOutputBufferAvailable 中的代码,它会以正常的播放速度播放,

这不是正确的做法。

如果有人可以帮助我找到以正常速度播放视频的正确方法。

0 投票
1 回答
1209 浏览

android - 识别 Android 上的 HE-AAC 音频以进行正确解码和播放

我使用MediaExtractor / MediaCodecAndroid 上的组合(目标 API 级别 >= 16)来解码音频流。现在,在播放包含 MPEG-4 HE-AAC 音频数据的 mp4/m4a 容器时,我遇到了一个微妙的问题。

在查询轨道时MediaFormatMediaFormat.KEY_SAMPLE_RATE我实际上只得到了预期大小的一半,例如,对于需要播放采样率为 44100 的轨道,MediaFormat返回 22050。在阅读了一些关于 HE-AAC 的文档后,我了解到这是“正确的”该编解码器如何工作。

尽管如此,要在实例上播放音轨,AudioTrack我必须使用正确的(播放)采样率来配置它,即 44100 而不是 22050。

因此,我正在寻找一种方法来确定音频何时以 API 目标级别 >= 16 进行 HE-AAC 编码,因此我可以将采样率设置为AudioTrack报告采样率的两倍。

编辑:我确实检查了MediaFormat何时MediaCodec返回MediaCodec.INFO_OUTPUT_FORMAT_CHANGED。格式将如下所示:

为了获得正确的播放,AudioTrack我需要将采样率设置为 2 * 采样率 = 44100。

我想知道是否csd-0包含更多信息来推断配置文件/格式/等。对于上面的示例,csd-0缓冲区中的 5 个字节如下所示:

现在我想知道这个“编解码器特定数据”的具体结构

0 投票
1 回答
847 浏览

android - android 4.1(API 16)中捕获的缓冲区到缓冲区编码/解码

我搜索了几个小时..我只想对录制的电影进行有效的解码/编码。这在 android 4.1 上是否可行?现在我只将几 kb 写入我的 mp4 文件。没有错误。

在这工作之后,我将使用 KEY_FRAME_RATE 和 KEY_I_FRAME_INTERVAL 将其置于慢动作中。

我使用 mediaExtractor 来配置 MediaCodec。我看到 3 个步骤(完整代码请参阅要点):

1./

2./

3./

这是我从谷歌的 EncodeDecodeTest 文件中修改的完整函数: gist

谢谢你的帮助,菲利克斯