首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android -如何使用Camera2库将摄像头流传送到ffmpeg?

Android -如何使用Camera2库将摄像头流传送到ffmpeg?
EN

Stack Overflow用户
提问于 2021-03-28 04:46:31
回答 1查看 199关注 0票数 1

我正在尝试创建一个应用程序,显示设备的摄像头在屏幕上,也流相机的srt。为此,我使用了Camera2库和ffmpeg (通常我使用的是https://github.com/tanersener/mobile-ffmpeg,这是一个用于Android的ffmpeg包装器)。

我的计划是使用Camera2 (使用ImageReader.OnImageAvailableListener类上的onImageAvailable方法)获取摄像头流,并将此流发送到udp://localhost:1234。然后,我可以使用ffmpeg通过udp获得流,并通过srt发送它。

我已经解决了使用ffmpeg通过srt发送流的部分,它工作得很好。事实上,如果我将"android_camera“设置为我的ffmpeg命令的输入,我的应用程序可以正常工作。这种方法的问题是,如果我这样做,我会阻止对相机的访问,所以我不能在屏幕上显示另一个库的相机。

我还发现了一个代码,它使用Camera2通过udp来流式传输摄像头,它可以工作,但这个代码的问题是,在通过udp发送之前,将每个帧转换为位图,这使得它的性能不佳。

因此,我需要知道通过udp将数据传递到ffmpeg的最佳方法是什么,这样ffmpeg就可以处理它并通过srt发送它?

Camera2允许我配置在监听器上接收帧的格式:

代码语言:javascript
复制
ImageReader.newInstance(1280, 720, ImageFormat.JPEG, /*maxImages*/2);

在本例中,我将JPEG设置为ImageFormat,但在这里,我将允许您使用所有可用的格式:

未知,RGB_565,YV12,Y8,Y16,NV16,NV21,YUY2,JPEG,DEPTH_JPEG,YUV_420_888,YUV_422_888,YUV_444_888,FLEX_RGB_888,FLEX_RGBA_8888,RAW_SENSOR,RAW_PRIVATE,RAW10,RAW12,DEPTH16,DEPTH_POINT_CLOUD,,私有,HEIC

这是我接收每个帧的方法,我需要知道的是,在通过udp将帧发送到ffmpeg?之前,我必须进行什么样的转换。

代码语言:javascript
复制
@Override
public void onImageAvailable(ImageReader reader) {

}

提前感谢您阅读问题:)

EN

回答 1

Stack Overflow用户

发布于 2021-03-29 09:11:05

在相机方面,你可能会想要使用YUV_420_888,因为这是所有彩色相机都保证支持的格式。这是一个4:2:0的YUV二次采样缓冲区。

我不知道FFMPEG会在udp上接受什么;您必须阅读它的文档(或代码)才能弄清楚。但最有可能的是,FFMPEG将支持某种YUV4:2:0格式,如NV21、YV12等。理想情况下,它将支持行和像素步长可调的灵活格式,就像安卓的YUV_420_888格式一样。但如果不是这样,您将需要将YUV数据与FFMPEG所需的布局相匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66835919

复制
相关文章

相似问题

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