【问题标题】:Android encoder muxer: raw h264 to mp4 containerAndroid 编码器复用器:原始 h264 到 mp4 容器
【发布时间】:2014-04-10 18:40:50
【问题描述】:

我创建了一个 h264 原始视频文件,并且能够在 Android 4.3 及更高版本上使用 Android MediaMuxer 对它进行多路复用。现在我需要支持 Android 4.1 和 4.2 版本。我找到了Jcodec。并且有一个这样做的例子:

https://github.com/jcodec/jcodec/blob/master/samples/main/java/org/jcodec/samples/mux/AVCMP4Mux.java

但我在第 70 行收到 java.nio.ReadOnlyBufferException 异常:

H264Utils.encodeMOVPacket(数据);

我猜这段代码不适用于 Android?我该如何解决。熟悉 Jcodec 的人可以帮忙吗?

【问题讨论】:

    标签: android h.264 codec muxer jcodec


    【解决方案1】:

    我放弃了 Jcodec。它暴露了太多编解码器内部的东西,而且根本没有关于使用的文档。 Mp4Parser 为我完成了这项工作,而且很简单。这是我将原始 h264 视频混合到 mp4 容器中的代码:

        String h264Path = "path to my h264 file, generated by Android MediaCodec";
    
        DataSource videoFile = new FileDataSourceImpl(h264Path);
    
        H264TrackImpl h264Track = new H264TrackImpl(videoFile, "eng", 5, 1); // 5fps. you can play with timescale and timetick to get non integer fps, 23.967 is 24000/1001
    
        Movie movie = new Movie();
    
        movie.addTrack(h264Track);
    
        Container out = new DefaultMp4Builder().build(movie);
        FileOutputStream fos = new FileOutputStream(new File("path to my generated file.mp4"));
        out.writeContainer(fos.getChannel());
    
        fos.close();
    

    here 中找到了代码示例。循环关闭!现在我的视频编码器实现可以在 Android 4.1 及更高版本上运行,不需要 FFMpeg

    顺便说一句:Android 库存“Gallery”应用使用 Mp4Parser,在其开源许可证中列出。

    【讨论】:

    • Android 应该真的把 muxer 做成兼容库,主要是文件操作,不涉及硬件编码器。当前 4.3 作为最低 sdk 版本太高了。
    • 您是如何生成 h264 文件作为输入发送到 mp4parser 的?我有 mp4 格式,需要在我的视频中添加音频。如何使用 mp4Parser?
    • @user2204093 使用Android视频编码框架,看看import android.media.MediaCodec;导入android.media.MediaFormat; Android 确实有 MediaMuxer,但它来自 API 18 及更高版本
    • 感谢您的快速回复,我使用 jcodec 从一系列图像创建视频但它没有音频并且输出是 mp4,它有 muxer 但在 android 版本中似乎无法生成 h264,什么我现在应该做什么?仍然使用媒体编解码器来获取 h264?还是其他方式?
    • jcodec 是软件编码,我怀疑它可以在生产环境中使用。你想坚持使用 Android 原生编码器,它是硬件加速的。拥有 h264 后,您可以使用 Mp4Parser 或原生 Android Muxer (API > 18) 将 h264 和视频混合在一起。
    猜你喜欢
    • 2016-07-10
    • 2012-05-09
    • 2019-06-08
    • 1970-01-01
    • 2016-03-27
    • 2014-02-11
    • 2012-07-03
    • 2014-12-28
    • 2017-10-11
    相关资源
    最近更新 更多