Android 1080p视频通话/聊天SDK?

时间:2020-06-16 07:42:43

标签: android video-streaming videochat high-resolution videocall

我正在尝试将1080p视频聊天流嵌入Android上的Unity应用中。

我曾尝试使用Agora.io来实现此目的,但是当前版本的Agora for Unity完全在CPU上运行,并且在我的Android设备上将1080p纹理从CPU复制到GPU花费了20ms-太慢了在我的应用中保持一致的60fps帧频。理想情况下,我要么需要执行复制操作以不阻塞渲染线程,要么需要在10毫秒内完成复制,或者我需要完全在硬件中进行解码。

我已经深入研究了其他视频播放器应用程序是如何实现这一点的,通常,它们使用Android MediaCodec或ExoPlayer将视频直接解码为硬件中的纹理。但是,这对于视频聊天应用似乎并不可行,因为将视频流编码为Android-supported formats之一的过程会引入过多的延迟。

我对诸如Skype和环聊之类的应用如何实现这一目标感到好奇-但我怀疑它们要么以30fps的速度运行,要么将视频分辨率限制为720p或更低。

我还考虑过使用Basis texture compression之类的东西来创建自己的视频聊天协议,以在GPU而非CPU上解压缩纹理,但是关于如何编译和将Basis集成到Android应用程序中的信息很少。

所以我的问题是,有人知道视频聊天SDK可以提供这种性能和保真度,而无需进行过多的开发工作吗?

1 个答案:

答案 0 :(得分:0)

事实证明,我的分析完全错误。纹理副本根本没有保留-实际上,纹理解码和复制到GPU大约需要3毫秒,而我的探查器只是报告了错误的时序。

真正的瓶颈是我试图将图像渲染到250K三角形表面的事实。事实证明,在正常情况下,我的Android设备只能使用GLES渲染100K三角形的曲面。但是,在切换到Vulkan之后,确保三角形具有连接的边缘(极大地缩小了网格索引缓冲区),并执行了一些次要的网格优化,我能够使用1080p 30fps Agora将三角形预算增加到400K并达到稳定的60fps帧速率视频聊天流。