问题标签 [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.
android - 如何使用 MediaMuxer 混合两个音频样本并编码回音频文件
我目前有两个独立的媒体提取器和编解码器,用于将每个单独的样本分解为ByteBuffer
s. 然后我将每个样本存储到两个short
数组中。然后我调用我的混合函数,它将两个样本合二为一short[]
,如果我short[]
用AudioTrack
它播放它,结果会很好,两种声音可以同时播放。
但是,我真正想做的是MediaMuxer
将我的新文件转换short[]
回 mp4 音频文件并将其存储到设备中以供以后播放。有人可以帮我弄清楚我做错了什么吗?
这是我拥有的一些代码...如您所见,我注释掉了AudioTrack
,这就是我试图将其short[]
转回的地方,ByteBuffer
以便我可以使用媒体多路复用器来创建音频文件。这给我的结果是一个新的音频文件,它是存储在我的设备上的正确名称和总长度......但是当我尝试播放它时......它在几分之一秒内从开始跳到结束,实际上并没有播放和音频。
更新
我添加了一种方法来尝试将 pcm 文件编码为音频文件以进行播放。这会创建一个新文件,但现在当我播放它时,它的长度是预期长度的两倍,而且它一直在播放静态文件。我认为我创建 song.raw 文件的方式有问题,或者将该文件编码为 mp4 有问题。这是我将 pcm 文件编码为 mp4 的其余代码。有人可以告诉我哪里可能出错了吗?谢谢你。
android - 如何在android中配音视频
我想在Android中制作一个配音应用程序。该应用程序的流程是:
- 从图库中获取视频和音频。
- 减少视频文件的原始声音。并在此视频文件上混合(配音)选定的音频。
- 在此视频文件上混合音频后,将其保存到外部存储器中。
我为此使用 MediaMuxer,但没有成功。请帮助我解决这个问题。
问候, 普拉泰克
android - 我已经选择了一个视频和音频文件,现在我想将我选择的音频/声音添加到我的视频中
我已经选择了一个视频和音频文件,现在我想将我选择的音频添加到视频中
我想将 .mp4 中的输出文件保存在外部或内部存储目录中我在 Google 上搜索并发现 ffmpeg、mediaMuxer、mp4parser 但我无法获得正确的示例或解决方案。
android - android - 如何混合音频文件和视频文件?
我有一个从麦克风录制的 3gp 文件和一个 mp4 视频文件。我想将音频文件和视频文件混合到一个 mp4 文件中并保存。我搜索了很多,但没有发现任何有助于使用 Android 的 MediaMuxer api 的东西。 MediaMuxer api
更新:这是我混合两个文件的方法,我有一个例外。原因是目标mp4文件没有任何音轨!someOne 可以帮我将音频和视频轨道添加到 muxer 吗?
例外
我的代码:
更新2:问题解决了!检查我对我的问题的回答。
感谢您的帮助
android - MediaMuxer 能够合并视频的官方要求是什么
在一个包含不同MediaCodec
和(其他Android.Media
命名空间的东西)概念证明的应用程序中,我在 opengl 帧上生成一个视频以及一个 PCM 音调,以便我有数据发送到两个MediaCodec
编码器(PCM 块发送到MediaCodec
音频编码器和带有表面颜色格式的帧发送到MediaCodec
视频编码器)。
你看我来了:我制作 AVC/mp4a 电影。这些生成的电影在任何播放器中都播放得很好。
我正在使用MediaMuxer
将视频合并在一起。我知道MediaFormat
视频需要相同才能将它们合并在一起。但是,假设我有这些电影:
Happy_cat.mp4 320x20024fps1 i-frame per secondSource: Interwebz
甲乙_Yellow background.mp4320x20024fps1 i-frame per secondSource: Me
使用MediaMuxer
,我可以将 A 的任何拆分或完整版本混合在一起,或者将 B 混合在一起,但我不能将 A 与 B 合并。
如果我连接 A(1) + B(1) + A(2) + B(2),我会看到玩家玩 A(1) 然后跳到 A(2),跳过 B 的确切持续时间。话,它会显示猫,然后跳到猫而不显示黄色背景。如果我连接 B(1)+A(1)+B(2)+A(2),则相同。我的声音会看到黄色,它会跳过猫,然后会显示黄色,然后在播放猫之前停止。
知道电影需要共享相同的格式,我有一个参考电影,我使用MediaExtractor
.
由于在将轨道添加到复用器之前无法在 MediaFormat 中设置的参数,我是否仅限于具有相同来源的电影?MediaFormat 中是否csd-0
重要?csd-1
因为我认为视频之间可能会有所不同。这是我比较视频时最担心的问题。我担心MediaMuxer
可能会在某些原生 API 方法中消化 csd-0 中的这些数据,以及如果存在基于 csd-0/csd-1 中数据的媒体配置差异的错误。[更新] 在阅读了有关 csd-x 的http://bigflake.com/mediacodec/部分后,我越来越确信这是 csd 的问题。唯一的解决方案是对所有内容进行转码。:(
来自 B(1) A(1) B(2) A(2) 合并的数据
B(1) 黄色:
A(1) 猫:
B(2) 黄色:
A(2) 猫:
[更新]
在我的原始源代码中,我没有正确设置曲目顺序。解决这个问题后,我可以说用手机(MediaCodec/MediaMuxer/3rd 方应用程序)制作的任何东西都将具有相同的音频和视频 CSD,并且会优雅地合并。任何外部 AVC 电影通常都会有不同的 CSD,如果是这样,则不会合并,因此在能够合并之前,必须从支持/可播放的 AVC 转码到手机 CODEC AVC。请注意,可以播放的任何内容都可以与所有其他 MediaCodec 功能一起使用。由于它是用未知的编码器编码的,因此播放该视频变得不那么简单了。可能有一些可能性可以从外部来源的电影中复制 CSD,但我没有成功。
为了确定电影是使用所有者手机还是其他手机编码的,在启动我的应用程序时,我创建了一个空电影并将捕获的 CSD 保存到文件中。然后我可以将它与任何电影进行比较。如果有一个开发良好的助手可以使 CSD 数据人性化,这样至少它很容易理解并且更容易使编码适应该源,这将是很有趣的。
android - 从麦克风录制时将 .pcm 转换为 aac
我有一个程序可以记录麦克风的声音并将声音保存在 .pcm 文件中。
我在程序中有一个单独的函数,它使用 MediaCodec 和 MediaMuxer 将 .pcm 转换为 aac。
是否可以修改我的程序,以便使用 MediaCodec 直接将 .pcm 转换为 aac?我该怎么做?是否有指南或代码示例可以做到这一点?
这是我的程序中记录麦克风声音的代码片段:
android - MediaMuxer writeSampleData 错误
我使用 MediaMuxer 混合音频和无线电数据,数据来自两个编码器,流是正确的,我得到输出并播放它。但是由于错误,当 writeSampleData 时 MediaMuxer 可能会失败:
我看到 MPEG4Writer,错误的根本原因是视频的时间戳,它让 MediaMuxer 运行到 IllegalState。在我做了很多测试之后,我知道视频和音频时间戳都可能会出错,当我改变音频采样率时,重复率会改变。
当我只录制音频或收音机时,错误不会再次出现。
有人可以给我一些建议吗?
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
我已经尝试了大量的尺寸值,但没有一个能解决问题。有我应该知道的标准尺寸吗?
任何提示都会有所帮助!
android - 将麦克风输入添加到 MediaMuxer Android
嘿,我正在尝试开发可以记录屏幕内容以及麦克风输入的截屏应用程序。我能够实现视频录制,但我找不到任何关于将麦克风输入添加到 mediaMuxer 的信息。我知道我可以使用 mediarecorder 类,但是我怎样才能将 mediarecorder 添加到复用器?到目前为止,我已经找到了这段代码。
虽然我可以向多路复用器添加一个音频格式,但我不确定如何将麦克风输入添加到多路复用器。有人可以指出我正确的方向或提供某种示例代码吗?
android - 如何在android中以编程方式将音频.mp3转换为.m4a
我不想使用 ffmpeg。目前,我能够将 m4a 音频与 mp4 视频混合。我还希望添加需要 mp3 到 m4a 转换的 mp3 音频。我能够使用以下代码将 wav 转换为 m4a 但不能将 mp3 转换为 m4a
这是我的代码。