问题标签 [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 回答
1713 浏览

android - MediaMuxer 和 MediaExtractor 从 mp4 中提取视频

我尝试从 mp4 中提取视频并与其他音频混合,这是视频部分:

创作:

视频格式:

当它运行到行:mp4Muxer.stop() 时,会发生异常:

我已经阅读了Extract Decode Encode Mux Audio,但仍然找不到原因,请帮助我。

0 投票
1 回答
1625 浏览

android - EncodeDecodeMux - 三星设备 - 在 S6 Edge 和 S5 上测试

参考:https ://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.java

我正在使用上面的代码来编码/解码/复用,以便制作具有较低分辨率和比特率的视频。它适用于所有分辨率,包括 nexus5、LG g3 和 one plus 上的 4k 视频。

但三星设备表现出不当行为。

  • 如果我将 4k 视频 (3840x2160) 作为输入并想将其分辨率降低到 1920x1080,我会遇到异常。

  • 如果我将 4k 视频 (3840x2160) 作为输入并想将其分辨率降低到 1280x720,我仍然会遇到异常。

  • 如果我将目标分辨率设置为 640x360,它工作得非常好。

我认为这可能与三星设备上的编解码器问题有关。

以下是代码片段

以下语句导致异常

以下是堆栈跟踪

0 投票
0 回答
319 浏览

android - Android - MediaMuxer 现在支持 WebM 吗?

该文档指出以下内容:

MediaMuxer 有助于复用基本流。目前只支持一个 mp4 文件作为输出,最多支持一个音频和/或一个视频基本流。

当我查找 MediaMuxer.OutputFormat 包时,还有一个“MUXER_OUTPUT_WEBM”常量。它只是一个占位符还是 MediaMuxer 已经支持 webM 来混合音频和视频数据?如果没有,目前有没有办法混合到 webM 容器中?

0 投票
1 回答
3644 浏览

java - android - 设置媒体编解码器的呈现时间

我使用下面的代码将原始数据编码为 h264 以创建视频,它的编码非常好,但视频播放速度太快。演示时间似乎有问题。当记录开始时,我设置“tstart”的值,并为每一帧计算当前时间与 tstart 的差异,并将其传递给 queueinputbuffer,但没有任何改变。哪个部分有问题?我知道在 android 4.3 中我可以将表面传递给 mediacodec,但我想支持 android 4.1。提前致谢。

0 投票
1 回答
2942 浏览

android - 使用 mediacodec 和 mediamuxer 处理 mp4 文件时的音频和视频轨道同步问题

我想通过多路复用来自麦克风的音频(覆盖 didGetAudioData)和来自摄像头的视频(覆盖 onpreviewframe)来生成 mp4 文件。但是,我遇到了音视频同步问题,视频会出现比音频快。我想知道问题是否与不兼容的配置或presentationTimeUs有关,有人可以指导我如何解决这个问题。下面是我的软件。

视频配置

得到如下视频演示PTS,

音频配置

得到如下音频演示PTS,

我的问题是仅对音频应用抖动功能引起的吗?如果是,我如何为视频应用抖动功能?我还尝试通过https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/EncodeDecodeTest.java找到正确的音频和视频演示文稿PTS . 但是 encodedecodeTest 只提供了视频 PTS。这就是我的实现将系统纳米时间用于音频和视频的原因。如果我想在encodedecodetest中使用视频presentationPTS,如何构建兼容的音频presentationPTS?感谢帮助!

以下是我如何将 yuv 帧排队到视频媒体编解码器以供参考。对于音频部分,除了presentationPTS不同外,其他都是相同的。

0 投票
1 回答
2626 浏览

android - 将第二个音轨添加到 MediaMuxer

我有一个视频文件.mp4- 只有视频轨道。

我正在使用MediaExtractorMediaMuxer添加音频文件。这很好用。

在处理过的文件上,我想添加另一个音轨。

所以我再次使用MediaExtractorMediaMuxer复制文件,(创建视频和音频轨道,读取 [extractor] 和写入 [muxer])。此外,我正在尝试将第二个音轨添加到混音器。但这会引发错误Failed to add the track to the muxer

在这个链接中,我们可以看到 muxer 不支持多轨。

代码来自链接:

还有其他方法吗?优雅的方式?

顺便说一句,我试图避免使用第 3 方——比如 ffmpeg 左右……但如果这将是我唯一的解决方案……

- 编辑 -

我的相关代码

0 投票
0 回答
997 浏览

android - Android MediaProjection 性能改进

我想问一下,是否可以提高 MediaProjection.

在流行答案后编辑。

应用程序的伪结构:

1)AppCompatActivity中的全屏FrameLayout:

2) 使用 SurfaceView 进行相机预览

3) 将相机预览添加到 FrameLayout

4)创建输入表面:

5)创建虚拟显示器并将虚拟显示器渲染到Surface。

6)MediaMuxer用于音频/视频多路复用流。

例如,10 秒。录音:

这是〜20 FPS。

我想要30 FPS。(设备可以以 30 FPS 录制全高清,所以我认为这是可能的。)

我尝试从 Android Studio 2.0 录制屏幕,并且对于:
宽度:720 像素
高度:1280像素
比特率:8Mbps
的视频仍然是 20 FPS。

在华为荣耀 4C、Android 5.1.1 ~20 FPS 上测试。
在 Vodafone Smart Ultra 6、Android 5.1.1 上进行了测试,视频具有 ~40 FPS。

我尝试使用 TinyDancer来测量 FPS,它在录制过程中显示 60 FPS。

哪里可能是弱点?录制期间的 CPU 使用率 < 10%。

另外问题:Android 6 中的 MediaProjection 性能更好吗?

(注意:我用叠加视图记录相机预览。)

0 投票
0 回答
536 浏览

android - MediaMuxer 不录制视频。帮我解决麻烦

我使用 MediaCodec 和 MediaMuxer 从字节数组录制视频。但结果是无法录制视频。系统提示:“文件不正确”。您可以看到下面的代码示例。我需要获取 mp4 格式的视频文件。请告诉我这是什么问题。

日志:

0 投票
2 回答
682 浏览

android - 批量写入样本时,Mediamuxer 会产生损坏的视频

我正在尝试使用 Android 的 MediaMuxer 和 MediaCodec 来制作 MP4 视频。

如果我通过调用 writeSampleData() 将编解码器中的帧直接排放到多路复用器,则一切正常并生成正确的视频。

但是,如果我尝试首先将这些帧存储在一个数组中,然后再决定将它们发送到多路复用器,即使演示时间戳是正确的,我也无法生成工作视频。

出于某种原因,似乎 mediamuxer 输出不仅取决于演示时间戳,还取决于调用“writeSampleData”的实际时间,尽管我的理解是拥有正确的时间戳就足够了。

任何人都可以对这个问题有所了解吗?

0 投票
1 回答
1552 浏览

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

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

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

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

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

如何正确修剪音频帧?