安卓sdk不再支持MUXER_OUTPUT_MPEG_2_TS,如何安卓把h264 acc文件打包保存为ts文件
时间: 2023-12-04 12:05:25 浏览: 134
muxer-class.zip_class_directshow MP4_mp4 muxer_muxer
5星 · 资源好评率100%
从 Android 10 开始,MediaMuxer 不再支持输出 MPEG-2 TS 格式,而是只支持输出 MP4 格式。因此,如果你需要将 H.264 视频和 AAC 音频打包为 TS 格式的文件,则需要使用第三方库来实现。
有一些开源的库可以实现将 H.264 和 AAC 打包为 TS 格式的文件,例如 libavcodec 和 FFmpeg。下面以 FFmpeg 为例,介绍如何使用 FFmpeg 在 Android 中将 H.264 和 AAC 打包为 TS 格式的文件。
首先,在项目的 build.gradle 文件中添加 FFmpeg 的依赖:
```groovy
implementation 'com.arthenica:mobile-ffmpeg-full:4.5.0.LTS'
```
然后,在代码中使用 FFmpeg 进行 TS 文件的打包,示例代码如下:
```java
String videoFilePath = "video.h264"; // H.264视频文件路径
String audioFilePath = "audio.aac"; // AAC音频文件路径
String outputFilePath = "output.ts"; // 输出文件路径
String[] ffmpegCommand = new String[] {
"-i", videoFilePath, // 输入视频文件
"-i", audioFilePath, // 输入音频文件
"-c:v", "copy", // 复制视频流
"-c:a", "copy", // 复制音频流
"-bsf:v", "h264_mp4toannexb", // 将H.264流转换为Annex-B格式
"-f", "mpegts", // 输出为MPEG-2 TS格式
outputFilePath // 输出文件路径
};
FFmpeg.execute(ffmpegCommand); // 执行FFmpeg命令
```
在具体实现中,需要指定输入的 H.264 视频文件和 AAC 音频文件的路径,以及输出文件的路径。然后,构建 FFmpeg 命令,将视频流和音频流分别复制到输出文件中,并将视频流转换为 Annex-B 格式,最后输出为 MPEG-2 TS 格式的文件。最后执行 FFmpeg 命令即可完成 TS 文件的打包。
需要注意的是,使用 FFmpeg 进行打包时,需要保证输入的 H.264 和 AAC 文件的编码参数和时间戳信息正确,以确保输出的 TS 文件能够正常播放。
阅读全文