首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用FFmpeg实现安卓摄像头采集

使用FFmpeg实现安卓摄像头采集
EN

Stack Overflow用户
提问于 2013-03-08 04:07:25
回答 1查看 9.5K关注 0票数 9

我正在尝试获取安卓摄像头生成的预览帧,并将data[]传递给ffmpeg输入管道以生成flv视频。我使用的命令是:

代码语言:javascript
复制
ffmpeg -f image2pipe -i pipe: -f flv -vcodec libx264 out.flv

我还尝试将输入格式强制转换为yuv4mpegpiperawvideo,但都没有成功……android-camera生成的预览帧默认格式为NV21。调用ffmpeg的方法是通过Process API并将预览帧data[]写入进程的stdin...onPreviewFrame()定义如下:

代码语言:javascript
复制
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 process stdin,并根据为addCallbackBuffer()提供的文档计算buffersize。有什么地方不对劲吗...?

谢谢..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 17:31:57

有点让它工作得很完美...似乎正在发生的错误与图像流的vcodec有关。似乎ffmpeg没有提供解码NV21格式的图像或图像流。为此,必须将NV21格式的预览帧转换为JPEG,并且由于图像必须实时流式传输到ffmpeg进程,因此转换必须是On the Fly格式。对于On the FlyJPEG的转换,最可靠的解决方案如下:

代码语言:javascript
复制
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命令是:

代码语言:javascript
复制
ffmpeg -f image2pipe -vcodec mjpeg -i - -f flv -vcodec libx264 out.flv
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15280722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档