首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Camerax视频序列化和传输

Android Camerax视频序列化和传输
EN

Stack Overflow用户
提问于 2021-06-15 14:46:59
回答 1查看 504关注 0票数 3

对于一个涉及光学相机通信(OCC)的研究项目,我需要积极分析视频帧,目前我正在我的pc上使用python和opencv (我用智能手机记录视频,然后处理)。我想用我的三星星系a40上的摄像头实时处理这段视频。我是android开发的新手,所以我只想创建一个基本的应用程序,用于捕捉视频并将其传输到我的pc上进行分析。我的应用程序需要在30 fps时捕获1080 p,或者更好。

我目前正在使用Android,该API提供了imageAnalysis用例,它允许我访问原始图像平面:我获得YUV_420_888格式的ImageProxy

我仍在熟悉API,但能够根据在线示例复制一些基本应用程序。我还有一个具体问题:

--在pc上序列化和传输图像给我的python应用程序的最好方法是什么?--我计划使用套接字创建一个简单的TCP连接,将图像转换成位图,然后像这样直接发送。但是,我不确定这种方法是否非常有效,我也不知道如何转换图像并缓冲它。代码示例当然是受欢迎的。有线连接(USB电缆到我的pc)也是可能的,但我没有找到任何支持。

任何想法都欢迎!提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-21 08:54:21

如果你真的关心性能,你应该使用UDP而不是TCP。请记住,UDP并不保证您发送的数据包在接收端以相同的顺序到达,或者如果您可以在单个UDP消息中发送的最大数据包大小为65535字节。因此,您应该实现某种逻辑,以便在接收方重新排序数据包,并告诉发送方您遗漏了什么。

一般情况下,实时流媒体应用,如Stadia,PS远程播放等,采用了某种FEC (前向纠错)机制,使接收者可以自行恢复丢失的数据包。在我的流媒体应用程序中,我使用了泽拉西。当然,使用FEC是可选的。

YUV_420_888格式在压缩方面也不是很理想,对于流,我建议使用h.264或VP8之类的格式。你会在互联网上找到一些例子,例如(这个项目有点老了,但可能有助于了解这个想法)。

https://github.com/bytestar/android-h264-stream-demo

月光是一个非常好的开源流媒体应用程序。它也适用于Android,它绝对值得一看,看看它是如何工作的。

有些东西对您的项目来说可能有些过分,但至少我建议使用UDP,将一个大的YUV_420_888框架分成几个小的。在所有这些小数据包中,包括以下信息供接收者使用

  1. 一个唯一的标识符(以便接收方知道数据包属于哪个YUV_420_888帧)
  2. 序列号(如果将YUV_420_888帧分割成10块,则索引在0和9之间)
  3. 关于接收方在拆分的YUV_420_888帧中可以期望的序列号的信息

分割大型YUV_420_888帧的原因是为了避免MTU问题(大于当前默认MTU值的消息将被丢弃,通常约为1500个字节)。

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

https://stackoverflow.com/questions/67988539

复制
相关文章

相似问题

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