问题标签 [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 投票
3 回答
2025 浏览

android - 获取音频 wav 文件的比特率或比特深度

AudioTrack用来播放 .wav 音频文件。一切都很好,但我现在已经硬编码了音频文件的位深度,同时AudioTrackSTATIC_MODE.

我想以编程方式获取 .wav 文件的位深度/比特率,然后在AudioTrack对象中设置编码。我曾尝试使用MediaExtractorMediaFormat但它只给了我以下信息:

在 的文档中MediaFormat,它说这KEY_BIT_RATE仅编码器。这是否意味着我只能在编码原始 PCM 位时使用此选项。如果是,还有什么其他方式可以以编程方式读取比特率/比特深度?我已经尝试使用mediainfo二进制文件在终端上获取同一文件的信息,它为我提供了正确的位深度。

0 投票
1 回答
1197 浏览

android - 调用 MediaExtractor.setDataSource() 时抛出异常

我将原始 H264 流放在一个文件中,并将其放在内部存储中。当我使用 File 类访问文件时,它可以正常工作,但是当我使用以下代码时,它会给出异常

W/System.err:java.io.IOException:无法实例化提取器。

我还使用了 Filedescriptor 而不是 filePath,但它也不起作用。我该如何解决这个问题?谢谢

编辑:文件权限已添加到清单文件中,因此没有权限问题。

0 投票
1 回答
5032 浏览

android - Mediacodec 再次解码视频和编码得到损坏的文件

我正在尝试实现https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java 但使用修改源一个视频文件 mp4。mime 类型为 video/avc,比特率 288kbps,iframeinterval 100,宽度:176,高度:144。文件大小为 6MB。当我对视频进行解码并将帧放入输出表面时,我可以将帧保存到位图并查看帧。但最后,编码后(与原始视频的参数相同),我得到一个 700kb 的文件,我看不到视频(可能是损坏的文件)。

和解码编码部分:

如果我将框架放入图像中并且我可以看到它,我猜框架对 OutputSurface 来说是正常的。而且我在编码器配置中没有看到任何奇怪的地方。你能帮我吗,至少说一下我认为我可以检查哪些?谢谢。

0 投票
1 回答
729 浏览

android - 在 Android 上解码 MP3 文件然后编码为 AAC 的最快方法是什么?

我有一个使用 MediaCodec 和 MediaExtractor 的工作解决方案,但是 6mb MP3 的解码需要 15 秒 + 15 秒的 AAC 编码。总计 > 30 秒。我需要一些非常快<10秒的东西。有人知道更快的解决方案吗?

编辑

我的瓶颈来自 Mediacodec 本身。他们提供的字节缓冲区太小了。将 MediaFormat 设置为 AAC 时,InputBytebuffers 一次只有 4096 个字节,这对我来说太慢了。它适用于流式传输,但不适用于文件到文件。

我切换到在 3 秒而不是 15 秒内解码的 C lib 解码器。但是编码器仍然需要 15 秒。任何人都有可以添加 ADTS 标头的 C lib AAC 编码器?

0 投票
2 回答
2693 浏览

android - 从 Mp4 中提取音频并保存到 SD 卡 (MediaExtractor)

我的 SD 卡中有一个 mp4 视频文件。我想从视频中提取音频,然后使用 MediaExtractor Api 将提取的音频作为单独的文件保存在 sd 卡上。这是我尝试过的代码:

我被困在这里我不知道如何获取选定的音轨并将其保存到 SD 卡。

0 投票
0 回答
1241 浏览

android - AAC 解码器 Android 媒体编解码器(来自 Gstreamer 的数据)

我想使用 G-Streamer 将音频从我的 Raspberry 流式传输到我的 Android 手机。在 Gstreamer 中,我使用以下管道: gst-launch-1.0 audiotestsrc !法克!“音频/mpeg,mpegversion=4”!多路复用器。mpegtsmux 名称=mux !udpsink 主机=224.0.0.1 端口=8001

faac 将音频编码为 AAC LC ( https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-faac.html )

和 mpegtsmux 创建一个 MPEG-TS 流(https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-mpegtsmux.html

我尝试自己用 Android Studio 制作 Android 应用程序。我正在使用 Multicastsocket 接收数据。然后我尝试使用媒体编解码器和媒体提取器实现 AAC 解码器。extractor.setDataSource 方法不能直接使用套接字,所以我将数据写入文件,让提取器从文件中获取数据并将其传递给 MediaCodec 以创建解码器。

提取器似乎意识到它的 AAC 但我认为解码器有问题。这是代码的重要部分:

这些是我在 logcat 中收到的所有消息:

正如我所说,我将一些音频数据写入了提取器从中获取信息的文件中。这个文件可以播放!即使使用普通的 Android 音乐应用程序。所以我认为接收数据的部分运作良好。提取器或解码器一定有问题,可能是解码器,因为提取器意识到格式是 AAC。我还下载了 AAC 测试文件,但同样的问题和失败消息。

我希望有一个人可以帮助我!谢谢你的帮助!

0 投票
1 回答
2194 浏览

android - 使用opengl表面将一个H.264视频重新编码到另一个在我的android上非常慢

我正在开发将一个视频转换为另一个视频的功能,并为每一帧添加额外的效果。我决定使用 opengl-es 在每一帧上应用效果。我的输入和输出视频是使用 H.264 编解码器的 MP4。我使用 MediaCodec API (android api 18+) 将 H.264 解码为 opengl 纹理,然后使用我的着色器使用此纹理在表面上绘制。我认为使用带有 H.264 的 MediaCodec 会在 android 上进行硬件解码,而且速度会很快。但似乎并非如此。重新编码 432x240 15 秒的小视频总共消耗了 28 秒的时间!

请看看我的代码+个人资料信息并分享一些建议,如果我做错了什么,请批评。

我的代码:

和简介信息: Profile 显示了 dequeueOutputBuffer 花费的大部分时间

在三星 Galaxy Note3 Intl (Qualcom) 上测试

0 投票
1 回答
2384 浏览

android - Decoding an AAC audio file into a RAW PCM file

I have an AAC-format audio file that im trying to convert into a raw format PCM file, in order to mix it with another audio file and play it using AudioTrack later on.

After some research I came across this library that decodes my AAC file appropriately. However, it only passes the decoded bytes directly to the AudioTrack. When trying to write the decoded bytes into an output stream instead, the resulting file only contains noise.

this is the code i use to decode the AAC file -

To play the decoded file i use a plain AudioTrack that reads and plays from a buffer -

What am I missing?

0 投票
2 回答
795 浏览

android - mediacodec 解码 h264 流限制

mediacodec在samsung S6,android 5.1.1上解码h264流,发现mediacodec的输入缓冲区必须以“0001”开头(不需要设置pps,sps),否则ACodec会报错。

我还尝试使用 mediaextractor 播放 mp4 文件,它工作正常,但媒体编解码器的缓冲区不是以“0001”开头。

我不知道为什么解码一个h264流有这样的限制,目前我需要分析来自socket的流,并将数据切割成小包(每个包以0001开头)然后将它们交给mediacodec,但效率低下。

0 投票
1 回答
1552 浏览

android - Android MediaCodec 如何准确分帧修剪音频

我正在构建在 Android 上精确修剪视频文件的功能。转码是用MediaExtractorMediaCodec和实现的MediaMuxer。我需要帮助截断任意音频帧以匹配对应的视频帧。

我相信必须在解码器输出缓冲区中修剪音频帧,这是可用于编辑未压缩音频数据的逻辑位置。

对于输入/输出修剪,我正在计算对原始音频缓冲区的必要偏移和大小调整,以将其塞入可用的端盖帧中,并且我正在使用以下代码提交数据:

我的问题是数据调整似乎只影响复制到输出音频缓冲区的数据,而不是缩短写入MediaMuxer. 输出视频要么在剪辑末尾丢失几毫秒的音频,要么如果我写入太多数据,音频帧会从剪辑末尾完全丢弃。

如何正确修剪音频帧?