问题标签 [mediamuxer]

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 投票
0 回答
736 浏览

android - Mp3到wav转换android

我有工作代码将 wav 转换为 m4a。无论如何通过修改我现有的代码将 mp3 转换为 m4a。我不想使用 ffmpeg 或本机代码。下面的函数适用于 wav 到 m4a 的转换,但不是为 mp3 到 m4a 工作

0 投票
1 回答
2766 浏览

android - Android 提取解码编码多路复用音频

我正在尝试调整在ExtractDecodeEditEncodeMuxTest.java中找到的代码,以便从通过 Cordova 的 device.capture.captureVideo 记录的 mp4 中提取音频和视频,解码音频,编辑解码的音频样本,编码音频,然后将音频混合回与视频并再次另存为 mp4。

我的第一次尝试只是简单地提取、解码、编码和复用音频,而不尝试编辑任何音频样本——如果我能做到这一点,我相当确定我可以根据需要编辑解码的样本。我不需要编辑视频,所以我假设我可以简单地使用 MediaExtractor 来提取和混合视频轨道。

但是,我遇到的问题是我似乎无法正确进行音频解码/编码过程。不断发生的事情是,复用器从提取的视频轨道和提取的 -> 解码 -> 编码的音轨创建 mp4,但是当视频播放正常时,音频以短暂的噪音开始,然后看起来像最后一个几秒钟的音频数据正常播放(但在视频的开头),然后在视频的其余部分静音。

一些相关领域:

配置解码器、编码器和复用器的代码:

怪物 doExtractDecodeEditEncodeMux 方法:

我在提取的前几百个音频帧中看到了这个 ACodec 错误:

这是整个logcat的 pastebin ,其中包括一些完整性检查日志,格式如下:

在出现那些 OMX_ErrorStreamCorrupt 消息时,编码和解码帧的presentationTime 似乎增加得太快了。当它们停止时,解码和编码帧的presentationTime似乎恢复到“正常”,并且似乎与我在视频开头听到的实际“好”音频相匹配——“好”音频来自原始音轨的结尾。

我希望对这些低级 Android 多媒体 API 有更多经验的人可以帮助我理解为什么会发生这种情况。请记住,我很清楚这段代码没有经过优化,在单独的线程中运行等。 - 一旦我有一个基本提取->解码->编辑->编码的工作示例,我将重构以清理内容- >多路复用过程。

谢谢!

0 投票
2 回答
8495 浏览

android - Android:使用 MediaCodec 编码音频和视频

我正在尝试使用 MediaCodec 和 MediaMuxer 对来自摄像头的视频和来自麦克风的音频进行编码。我在录制时使用 OpenGL 在图像上叠加文本。

我以这些课程为例:

我写了一个执行编码的主类。它产生 2 个线程来录制音频和视频。它不起作用(生成的文件无效),但如果我评论其中一个线程(音频或视频),它可以正常工作。另外,我需要将 TRACK_COUNT 设置为 1。这是主类的代码:

包装复用器并在开始之前等待轨道完成的类如下(我添加了一些同步只是为了测试):

负责写入 MediaCodec 编码器的类如下:

知道为什么并发运行时它可能会失败吗?

0 投票
1 回答
920 浏览

android - 在 Android 上使用 MediaMuxer 保存 h.264 流视频

(我的英语不是很好,但我会尽力而为。)

我正在开发一个将收到的 h.264 流式视频/音频帧保存到剪辑中的 Android 应用程序。我遇到了这里提到的一个问题,“缺少编解码器特定数据”。

我尝试了一些方法来解决这个问题。

  1. 分配预定义的编解码器特定数据。我从这篇文章
    中 借来的,它工作得非常完美——但仅限于我的个人手机(Sony Xperia Z3,Android 5.1.1)。大多数测试设备只是粉碎。(Android 4.3/4.4)。
  2. 从视频流本身解析编解码器特定数据。
    在我的手机上它粉碎了。但不知何故适用于某些设备。我以这段代码为例。
  3. 创建一个编码器来对接收到的视频帧进行编码,然后将它们传递给 MediaMuxer。
    是的,这是一个愚蠢的想法,它不起作用。
  4. 创建一个解码器来解码接收到的视频帧,将它们传递给编码器,然后将编码的帧传递给 MediaMuxer,保存。
    应用程序无法从编码器获取任何空闲缓冲区。僵局。

现在我的想法已经不多了。

我得到的最后希望是使用 ffmpeg。
但是我发现的资源是来自视频文件的编码/解码视频,而不是来自流。
有什么建议么?

提前致谢。:)

0 投票
1 回答
405 浏览

android - ExoPlayer 的 MediaMuxer 播放问题

我正在使用 MediaMuxer 类来编辑视频文件以使用 ExoPlayer 库进行播放。基本上我正在做的是从解码这些帧的mp4中提取视频帧,重新编码这些帧并使用 muxer.writeSampleData(..)

这一切都很好,在我的 ExoPlayer 实现完成后,我可以成功播放视频,直到视频的持续时间 >= 20 秒。当我尝试使用至少 20 秒长的视频 (.mp4) 时,就会出现播放问题。对于 MediaMuxer 或 ExoPlayer 对象,日志中没有抛出任何错误或任何其他异常。

播放问题很奇怪,但无论视频长度 >= 20 秒如何,都会以完全相同的方式发生。当播放达到 11 秒标记(进入视频 11 秒)时,帧冻结,ExoPlayer 日志表明播放器的状态已从“就绪”变为“缓冲”,并且无限期地保持在该状态。不会记录其他错误或其他相关信息。

ExoPlayer 日志打印对追踪问题没有任何帮助,因此我不确定问题出在哪里。在我提取帧、解码帧、编码帧并混合它们的视频编辑代码中的某个地方,还是在 ExoPlayer 库中?(无论长度如何,原始视频都可以正常播放)在我的 ExoPlayer 实现中卡在 11 秒标记的视频在我的设备默认 MediaPlayer 上可以正常播放。

有没有人做过类似的事情的经验?对遇到的问题可能出在哪里有任何想法,或者对如何调试有任何进一步的想法?

0 投票
1 回答
128 浏览

android - Mediacodec 对在线视频进行编码

我能够实现一个代码,该代码基于来自 grafika 的 CameraCaptureActivity 记录视频。现在我可以录制自己从 1 数到 10,但是当我去看录制的视频时,我说的是 1、3、8、9,也就是说我错过了一些要录制的帧。表面配置为:

和编码器

宽度:310 和高度:310。

我的问题是比特率吗?我应该设置哪些值才能接收我显示的要由编码器记录的每一帧?谢谢。

0 投票
1 回答
1091 浏览

android - 使用 mediacodec 和 mediamuxer 同步音频和视频

嗨,在如何向 MediaMux 提供音频数据和视频数据中,它说为了同步音频和视频,您必须“计算每帧视频应播放的音频样本数”,公式如何?你能给我一些例子吗?如果我在 video drainEncoder 函数上从 AudioRecord 读取音频数据怎么办?谢谢

0 投票
1 回答
3279 浏览

android - 使用 MediaCodec 编辑帧和编码

我能够解码 mp4 视频。如果我使用 a 配置解码器,Surface我可以在屏幕上看到视频。现在,我想编辑帧(添加一条黄线,甚至更好地重叠一个小图像)并将视频编码为新视频。没有必要显示视频,我现在不关心性能。(如果我在编辑时显示帧,如果编辑功能需要很多时间,我可能会有间隙),所以,你建议什么我,无论如何都使用 GlSurface 配置解码器并使用OpenGl(GLES),或者将其配置为 null 并以某种方式将其转换Bytebuffer为 a Bitmap,修改它,并将位图编码为字节数组?我还在 Grafika 页面中看到您可以将 aSurface与自定义 Rederer 一起使用并使用OpenGl(GLES)。谢谢

0 投票
1 回答
519 浏览

android - Issues encoding audio with Mediacodec and Motorola mobile

I have been able to implement a video/audio decoder and encoder. On my Samsung S3, everything works fine. Then I deployed into a Samsung, and I had some rotation issues I have fixed, but the final encoded video does not have audio. When I stop the mediamuxer I get the following log:

I guess is something related to the 4/82 buffers and only 4 frames encoded. I have written into the muxer all the buffers I got from the decoder, which I think there are the 82 buffers. The presentationTime and flags are the same which I get from the decoder. As I said, this code works on my Samsung S3. Do you have any ideas which would be my issue? could it be the bitrate? thanks.

0 投票
2 回答
2693 浏览

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

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

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