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

android - Android:MediaCodec:在 Nexus 上生成 480x480 的不良视频,而 640x640 效果很好

我正在使用 MediaCodec(和 MediaMuxer)在 android 上渲染 Mpeg4/avc 视频。

我正在测试 LG Nexus 4 和三星 Galaxy 5。

在三星上,640x640 和 480x480 帧大小的渲染视频看起来都符合预期。

但是,在 Nexus 上,480x480 生成的视频看起来很糟糕,而 640x640 生成的视频很好。

问题是:原因是什么?这是我不知道的错误还是“功能”。

是否有一个众所周知的帧大小可以依靠在所有 Android 设备上正确呈现?还是我们需要在各种设备上进行测试?

0 投票
2 回答
1206 浏览

android - 在 Android 上的测试用例之外运行 ExtractDecodeEditEncodeMuxTest

我正在尝试添加功能以在 Android 上提取、解码、编辑、编码和混合视频。因此,我发现了一些非常有用的实现,它是 Android CTS ExtractDecodeEditEncodeMuxTest的一部分。不幸的是,代码只有在作为测试用例的一部分执行时才有效。我试图从正常活动中执行它并得到:

E/ExtractDecodeEditEncodeMuxTest (18781): java.lang.IllegalStateException: 无法停止复用器

W/System.err(18781):java.lang.RuntimeException:表面帧等待超时 W/System.err(18781):在 ...OutputSurface.awaitNewImage(OutputSurface.java:216)

任何想法,为什么输出表面不接收帧?

更新: 这里是工作测试用例和非工作实现的日志文件。两者的代码完全相同。唯一的区别是工作的一个是 AndroidTestCase,另一个是在 IntentService 内的应用程序中运行。

似乎整个事情在大约 6 帧后停止提取和解码。有任何想法吗?

工作测试用例日志输出

非工作日志输出

0 投票
1 回答
234 浏览

android - 适用于 android OS 4.1.2 及更高版本的 Muxer 等效库

目前我们正在开发一款安卓视频编辑应用程序。我们面临两个主要问题

我们有一个字节缓冲区,我们从中使用媒体编解码器的 H264 流。现在我们想从中创建一个 mp4 视频。我们知道,从 4.3 开始,我们可以使用媒体复用器来做到这一点。但是我们需要支持像 4.1.2 这样的旧操作系统,因为它有 MediaCodec 库。我想知道是否有任何其他方法可以在不使用 muxer 的情况下从 H264 流中创建 mp4 文件。

0 投票
4 回答
18280 浏览

android - 在android中的视频上添加水印位图:4.3的MediaMuxer或ffmpeg

这是我的场景:

  • 从网上下载 avi 电影
  • 打开位图资源
  • 将此位图叠加在影片底部的所有背景帧上
  • 将视频保存在外部存储上
  • 视频长度通常为 15 秒

这可以使用 MediaMuxer 来实现吗?很高兴收到有关此事的任何信息

我一直在寻找http://bigflake.com/mediacodec/#DecodeEditEncodeTest(感谢@fadden),它在那里说:

“在 Nexus 5 上解码帧并将其复制到 ByteBuffer glReadPixels()中大约需要 8 毫秒,速度足以跟上 30fps 输入的速度,但是将其作为 PNG 保存到磁盘所需的额外步骤非常昂贵(大约半秒) "

所以几乎 1 秒/帧是不可接受的。从我的想法来看,一种方法是将每个帧保存为 PNG,打开它,在其上添加位图叠加,然后保存。然而,这将花费大量时间来完成。

我想知道是否有办法做这样的事情:

  1. 从外部存储打开视频文件
  2. 开始解码
  3. 每个解码的帧都将随着内存中的位图覆盖而改变
  4. 帧被发送到编码器。

在iOS上,我看到有一种方法可以获取原始音频+原始视频+图像并将它们添加到容器中,然后对整个内容进行编码......

我应该切换到 ffmpeg 吗?ffmpeg 的稳定性和兼容性如何?我是否冒着与 android 4.0+ 设备的兼容性问题的风险?有没有办法使用 ffmpeg 来完成这个?我是这个领域的新手,还在做研究。


多年后的编辑:
问题已经过去了很多年,而且 ffmpeg 在许可方面并不是很容易添加到商业软件中。这是如何演变的?使用默认 sdk 的较新版本的 android 在这方面的能力更强?


稍后再编辑

我因发布信息作为答案而获得了一些反对票,因此我将编辑原始问题。这是一个很棒的库,从我的测试来看,它确实将水印应用于视频,并使用进度回调进行处理,从而更容易向用户显示进度,并且还使用默认的 android sdks。https://github.com/MasayukiSuda/Mp4Composer-android

该库使用 Android MediaCodec API 生成 Mp4 电影并应用过滤器、缩放和旋转 Mp4。

示例代码,可能如下所示:

在模拟器上进行测试,似乎在 android 8+ 上运行良好,而在旧版本上会生成黑色视频文件。但是,在真实设备上进行测试时似乎可以正常工作。

0 投票
1 回答
1348 浏览

android - Android MediaMuxer 音频问题

我正在尝试使用 MediaMuxer 将音轨添加到视频中。以下代码有效,但音频在视频中途停止。视频和音频文件都只有一个轨道。音频和视频的播放速度似乎还不错。音频文件比视频长,所以我认为这不是问题。我已经有一段时间了,现在无法弄清楚。

打印出来的媒体格式如下

任何指导将不胜感激。

谢谢

0 投票
0 回答
1079 浏览

android - Android MediaMuxer readSampleData IllegalStateException

我正在使用以下代码生成视频。但是,每 5 次尝试 readSampleData 就会引发 IllegalArgumentException 或 IllegalStateException。我能做些什么来阻止异常。我可以在调用 readSampleData 之前检查提取器的状态吗?如果是这样,怎么做?

实际代码在视频提取器循环之后将音频添加到视频中。

0 投票
1 回答
435 浏览

android - 使用 MediaMuxer 和 MediaCodec 将 wmv 视频文件转换为 mp4 视频文件

我想将 .wmv 视频文件转换为 mp4 视频文件。可以使用MediaMuxerMediaCodec类吗?

0 投票
0 回答
1314 浏览

android - 使用 mediaMuxer 示例录制音频和视频?

我正在尝试使用 mediaMuxer 录制音频和视频。我按照https://github.com/google/grafika的视频录制示例进行操作,但是当我连接音频流时,它会导致一半以上的视频损坏。有谁知道任何显示如何正确录制音频和视频的示例或教程?

0 投票
1 回答
2651 浏览

android - 如何使用 MediaCodec 和 MediaMuxer 录制视频和音频

我可以在 MediaCodec 和 MediaMuxer 的帮助下录制(编码)视频。接下来,我需要在 MediaCodec 和 MediaMuxer 的帮助下处理音频部分和混合音频与视频。

我面临两个问题:

  1. 如何使用 MediaCodec 对音频进行编码。我需要在单独的线程中编码音频和视频吗?

  2. 如何将音频和视频数据传递给 MediaMuxer(因为 writeSampleData() 方法一次只需要一种类型的数据)?

我提到了MediaMuxerTest,但它使用的是 MediaExtractor。我需要使用 MediaCodec,因为视频编码是使用 MediaCodec 完成的。如果我错了,请纠正我。

任何建议或建议都会非常有帮助,因为这些新 API 没有适当的文档可用。

笔记:

  1. 我的应用程序面向 API 18+(Android 4.3+)。
  2. 我已经将Grafika用于视频编码。
0 投票
0 回答
301 浏览

android - 使用媒体编解码器进行视频压缩

我有一个需要在 android 中压缩的视频,目前 m 使用 ffmpeg 并且工作正常,但我想尝试使用媒体编解码器和媒体复用器。我已经阅读了http://developer.android.com/reference/android/media/MediaCodec.html中的文档,并且还尝试了这些链接: https
://github.com/holrory/MediaCodecDemo 和上面有关媒体编解码器的许多链接.

谁能告诉我它是如何工作的以及采取了哪些步骤?

提前致谢!!