Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java中的编码帧创建视频_Java_Android_Video_Frames - Fatal编程技术网

使用Java中的编码帧创建视频

使用Java中的编码帧创建视频,java,android,video,frames,Java,Android,Video,Frames,我在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 1

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

它不是avi容器,只是h264流。尝试重命名为“*.h264”并使用某些播放器(vlc、mplayer)播放。

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

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


请参阅CameraToMpegTest示例。

ffplay是否显示视频?。。您确定正确写入了缓冲区吗?能否提供将缓冲区写入文件的方式的来源?。。