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