android– 在byte []中保存Camera2输出流

android– 在byte []中保存Camera2输出流,第1张

概述我支持使用videochat功能的应用程序.我使用Camera2forAPI>=21.相机工作.现在我需要从我的设备的相机接收数据并将其写入byte[],然后将数组传递给本机方法以处理和传输图像对手.用C.My任务编写的视频传输功能–在byte[]中正确记录视频(因为该参数接受本机方法,即在视频显示

我支持使用vIDeochat功能的应用程序.我使用Camera2 for API> = 21.相机工作.现在我需要从我的设备的相机接收数据并将其写入byte [],然后将数组传递给本机方法以处理和传输图像对手.用C .My任务编写的视频传输功能 – 在byte []中正确记录视频(因为该参数接受本机方法,即在视频显示器上执行所有下一步 *** 作).

如果我开始添加一些东西,相机就会停止工作.
帮助我正确,轻松地实现此任务.我尝试使用MediaRecorder,但它不会在byte []中写入数据.我看过标准的Google例子,比如Camera2Basic,Camera2VIDeo.我尝试在本教程中实现MediaRecorder.但它不起作用.
 据我所知,ImageReader仅用于图像.
 MediaCodec-太复杂了,我真的不明白.
实现从我的设备的相机获取图像并将其记录到byte []中的更好和最简单的方法.如果可能的话,给我一些代码或资源样本,我可以看到它.谢谢

解决方法:

你想使用ImageReader;它是旧相机API预览回调的预期替换(以及用于拍摄JPEG或RAW图像,另一种常见用途).

使用YUV_420_888格式.

ImageReader的图像使用ByteBuffer而不是byte [],但您可以直接通过JNI传递ByteBuffer,并使用standard JNI methods获取指向图像每个平面的voID *指针.这比首先复制到byte []要高效得多.

编辑:更多细节:

假设您拥有自己的软件视频编码/网络传输库,并且您不想使用AndroID的硬件视频编码器. (如果这样做,则需要使用MediaCodec类).

>设置预览视图(SurfaceVIEw或TextureVIEw),将其大小设置为所需的预览分辨率.
>使用YUV_420_888格式和所需的录制分辨率创建ImageReader.连接listener to it.
>打开相机设备(可以与前面的步骤并行完成)
>从VIEw和ImageReader中获取Surface,并使用它们创建camera capture session
>创建会话后,create a capture request builder使用TEMPLATE_RECORDING(以优化录制用例的设置),以及add both the Surfaces as targets用于请求
>构建请求并将其设置为repeating request.
>相机将开始将缓冲区推入预览和ImageReader.每当新帧准备就绪时,您将获得onImageAvailable回调.获取latest Image from the ImageReader’s queue,获取组成ycbcr图像的三个ByteBuffers,并将它们通过JNI传递给您的本机代码.
>完成处理图像后,请务必使用close it.为了提高效率,ImageReader中有固定数量的图像,如果不返回图像,相机将会停止,因为它没有要写入的缓冲区.如果需要并行处理多个帧,则可能需要增加ImageReader构造函数的maxImages参数.

总结

以上是内存溢出为你收集整理的android – 在byte []中保存Camera2输出流全部内容,希望文章能够帮你解决android – 在byte []中保存Camera2输出流所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1116453.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存