问题标签 [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 和 MediaExtractor 从 mp4 中提取视频
我尝试从 mp4 中提取视频并与其他音频混合,这是视频部分:
创作:
视频格式:
当它运行到行:mp4Muxer.stop() 时,会发生异常:
我已经阅读了Extract Decode Encode Mux Audio,但仍然找不到原因,请帮助我。
android - EncodeDecodeMux - 三星设备 - 在 S6 Edge 和 S5 上测试
我正在使用上面的代码来编码/解码/复用,以便制作具有较低分辨率和比特率的视频。它适用于所有分辨率,包括 nexus5、LG g3 和 one plus 上的 4k 视频。
但三星设备表现出不当行为。
如果我将 4k 视频 (3840x2160) 作为输入并想将其分辨率降低到 1920x1080,我会遇到异常。
如果我将 4k 视频 (3840x2160) 作为输入并想将其分辨率降低到 1280x720,我仍然会遇到异常。
如果我将目标分辨率设置为 640x360,它工作得非常好。
我认为这可能与三星设备上的编解码器问题有关。
以下是代码片段
以下语句导致异常
以下是堆栈跟踪
android - Android - MediaMuxer 现在支持 WebM 吗?
该文档指出以下内容:
MediaMuxer 有助于复用基本流。目前只支持一个 mp4 文件作为输出,最多支持一个音频和/或一个视频基本流。
当我查找 MediaMuxer.OutputFormat 包时,还有一个“MUXER_OUTPUT_WEBM”常量。它只是一个占位符还是 MediaMuxer 已经支持 webM 来混合音频和视频数据?如果没有,目前有没有办法混合到 webM 容器中?
java - android - 设置媒体编解码器的呈现时间
我使用下面的代码将原始数据编码为 h264 以创建视频,它的编码非常好,但视频播放速度太快。演示时间似乎有问题。当记录开始时,我设置“tstart”的值,并为每一帧计算当前时间与 tstart 的差异,并将其传递给 queueinputbuffer,但没有任何改变。哪个部分有问题?我知道在 android 4.3 中我可以将表面传递给 mediacodec,但我想支持 android 4.1。提前致谢。
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不同外,其他都是相同的。
android - 将第二个音轨添加到 MediaMuxer
我有一个视频文件.mp4
- 只有视频轨道。
我正在使用MediaExtractor
并MediaMuxer
添加音频文件。这很好用。
在处理过的文件上,我想添加另一个音轨。
所以我再次使用MediaExtractor
并MediaMuxer
复制文件,(创建视频和音频轨道,读取 [extractor] 和写入 [muxer])。此外,我正在尝试将第二个音轨添加到混音器。但这会引发错误Failed to add the track to the muxer
。
在这个链接中,我们可以看到 muxer 不支持多轨。
代码来自链接:
还有其他方法吗?优雅的方式?
顺便说一句,我试图避免使用第 3 方——比如 ffmpeg 左右……但如果这将是我唯一的解决方案……
- 编辑 -
我的相关代码
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 性能更好吗?
(注意:我用叠加视图记录相机预览。)
android - MediaMuxer 不录制视频。帮我解决麻烦
我使用 MediaCodec 和 MediaMuxer 从字节数组录制视频。但结果是无法录制视频。系统提示:“文件不正确”。您可以看到下面的代码示例。我需要获取 mp4 格式的视频文件。请告诉我这是什么问题。
日志:
android - 批量写入样本时,Mediamuxer 会产生损坏的视频
我正在尝试使用 Android 的 MediaMuxer 和 MediaCodec 来制作 MP4 视频。
如果我通过调用 writeSampleData() 将编解码器中的帧直接排放到多路复用器,则一切正常并生成正确的视频。
但是,如果我尝试首先将这些帧存储在一个数组中,然后再决定将它们发送到多路复用器,即使演示时间戳是正确的,我也无法生成工作视频。
出于某种原因,似乎 mediamuxer 输出不仅取决于演示时间戳,还取决于调用“writeSampleData”的实际时间,尽管我的理解是拥有正确的时间戳就足够了。
任何人都可以对这个问题有所了解吗?
android - Android MediaCodec 如何准确分帧修剪音频
我正在构建在 Android 上精确修剪视频文件的功能。转码是用MediaExtractor
、MediaCodec
和实现的MediaMuxer
。我需要帮助截断任意音频帧以匹配对应的视频帧。
我相信必须在解码器输出缓冲区中修剪音频帧,这是可用于编辑未压缩音频数据的逻辑位置。
对于输入/输出修剪,我正在计算对原始音频缓冲区的必要偏移和大小调整,以将其塞入可用的端盖帧中,并且我正在使用以下代码提交数据:
我的问题是数据调整似乎只影响复制到输出音频缓冲区的数据,而不是缩短写入MediaMuxer
. 输出视频要么在剪辑末尾丢失几毫秒的音频,要么如果我写入太多数据,音频帧会从剪辑末尾完全丢弃。
如何正确修剪音频帧?