使用Java编码帧创建视频

时间:2013-06-17 18:27:08

标签: java android video frames

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

每个帧都是一个字节数组,在捕获之后,使用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)实现,所以我想知道如何添加元数据,使视频播放器能够识别我的视频。

2 个答案:

答案 0 :(得分:1)

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

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

请参阅CameraToMpegTest示例here

答案 1 :(得分:0)

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