【问题标题】:Create video with encoded frames in Java在 Java 中创建带有编码帧的视频
【发布时间】:2013-06-13 19:18:54
【问题描述】:

我在 Android (Java) 中有一个应用程序,它对来自相机的帧进行编码。

每一帧都是一个字节数组,在被捕获后,使用 API MediaCodec 进行编码。

如果我直接在视频文件上写入帧,我可以用 ffplay 打开它(而不是用另一个视频播放器作为 VLC),但它说例如:

Input #0, h263, from 'example.avi':
Duration: N/A, bitrate: N/A
Stream #0.0: Video: h263, yuv420p, 640x480 [PAR 12:11 DAR 16:11], 25 fps, 25 tbr, 1200k tbn, 29.97 tbc
5.58 A-V:  0.000 s:0.0 aq=    0KB vq=    0KB sq=    0B f=0/0   0/0   

换句话说,它不识别持续时间,也不识别比特率。

我想我必须将元数据写入文件,但我不知道该怎么做。

正如我在帖子中所说,该应用程序是使用 Java(使用 Android API)实现的,所以我想知道如何添加使视频播放器能够识别我的视频的元数据。

【问题讨论】:

    标签: java android video frames


    【解决方案1】:

    MediaCodec 的输出是原始 H.264 流。从 Android 4.3 (API 18) 开始,您可以通过 MediaMuxer 类运行此流并将其转换为 .mp4 文件。

    您可能感兴趣的一个相关项目是,您现在可以将相机的 Surface 预览提供给 MediaCodec,而不是通过 ByteBuffer 传递 YUV 数据。这种方法需要较少的数据复制,并且不需要颜色平面交换。

    请参阅 CameraToMpegTest 示例 here

    【讨论】:

      【解决方案2】:

      它不是 avi 容器,它只是 h264 流。尝试重命名为“*.h264”并与一些播放器(vlc,mplayer)一起玩。

      【讨论】:

      • ffplay 是否显示视频?.. 你确定你写入缓冲区正确吗?您能否提供将缓冲区写入文件的方式的来源?...
      猜你喜欢
      • 2022-01-15
      • 2014-01-08
      • 1970-01-01
      • 2021-01-04
      • 2021-08-17
      • 2012-11-12
      • 1970-01-01
      • 2014-03-18
      • 2017-04-04
      相关资源
      最近更新 更多