0

我在 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)实现的,所以我想知道如何添加使视频播放器能够识别我的视频的元数据。

4

2 回答 2

1

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

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

请参阅此处的 CameraToMpegTest 示例。

于 2013-07-24T20:16:40.033 回答
0

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

于 2013-06-17T20:34:32.850 回答