是试着采取由机器人摄像机生成的预览帧,并通过所述data[]
到FFMPEG输入管以产生一FLV视频。 我使用的命令是:
ffmpeg -f image2pipe -i pipe: -f flv -vcodec libx264 out.flv
我还试图迫使输入格式yuv4mpegpipe
和rawvideo
但没有成功...通过Android系统的相机产生的预览框的默认格式为NV21
。 顺便上午invokin' ffmpeg的是通过Process API
和写入预览帧data[]
到过程stdin
...的onPreviewFrame()
定义如下:
public void onPreviewFrame(byte[] data, Camera camera)
{
try
{
processIn.write(data);
}
catch(Exception e)
{
Log.e(TAG, FUNCTION + " : " + e.getMessage());
}
camera.addCallbackBuffer(new byte[bufferSize]);
}
processIn
被连接到ffmpeg
过程stdin
和buffersize
是基于提供一种用于对文档的计算addCallbackBuffer()
。 有没有办法,我上来的错东西...?
谢谢...
多少了解了它完美的工作......这似乎是happenin'是关系到这个错误vcodec
图像流的。 似乎ffmpeg的没有提供解码NV21
格式的图片或图像流。 对于那些不得不在转换NV21
格式的预览框,以JPEG
和图像有实时传输到ffmpeg
过程中,转换必须是On the Fly
。 对于最近的可靠的解决方案On the Fly
转换为JPEG
如下:
public void onPreviewFrame(byte[] data, Camera camera)
{
if(isFirstFrame)
{
Camera.Parameters cameraParam = camera.getParameters();
Camera.Size previewSize = cameraParam.getPreviewSize();
previewFormat = cameraParam.getPreviewFormat();
frameWidth = previewSize.width;
frameHeight = previewSize.height;
frameRect = new Rect(0, 0, frameWidth, frameHeight);
isFirstFrame = false;
}
previewImage = new YuvImage(data, previewFormat, frameWidth, frameHeight, null);
if(previewImage.compressToJpeg(frameRect, 50, processIn))
Log.d(TAG, "Data : " + data.length);
previewImage = null;
camera.addCallbackBuffer(new byte[bufferSize]);
}
和ffmpeg
使用的命令是:
ffmpeg -f image2pipe -vcodec mjpeg -i - -f flv -vcodec libx264 out.flv