【发布时间】:2016-05-05 05:39:58
【问题描述】:
目标:无论设备的方向如何,都以正确的方向将 Android 相机流式传输到 Wowza 服务器(即视频始终正面朝上)
我已经查看了此处有关相机方向的所有问题,到目前为止,它们似乎都只是更改呈现到屏幕上的预览或在 MP4 文件中设置一个标志(不适合我的用例:流式传输)。
我正在将相机帧流式传输到 Wowza 服务器,而在 Wowza 服务器上接收到的视频始终是横向的。如果手机始终保持相同的方向,这很好,但我不能保证我的用户会这样做。根据我收集到的信息,当您直接从相机中抓取帧并将它们提供给编码器时,您将获得设备相机的自然方向(在我的情况下可能是横向安装的),这完全不受预览的影响.这是有问题的,因为如果设备在流期间旋转,图像也会随之旋转。
我尝试使用 openGL 矩阵在自定义 GLSurfaceView.Renderer 中转换预览,它所做的只是转换屏幕上的视图,而不是发送到编码器的帧。
我已阅读 Grafika 的示例,但不确定在将帧输入编码器之前我需要旋转帧的哪个位置。我使用 SurfaceTexture 作为相机预览,然后渲染到 GLSurfaceView(并使用我自己的自定义 GLSurfaceView.Renderer)。
如何将帧旋转到编码器?
理想情况下,我会在 openGL 中执行此操作。我曾考虑在填充 mediacodec.dequeueInputBuffer 缓冲区之前旋转帧,但这将使用 CPU 完成,并且由于实时应用程序,我很谨慎。也许我忽略了一些关于预览的东西。我已经看到其他广播应用程序会在设备旋转时拆除 UI 上的 Preview 层并重新构建它。
参考资料:
【问题讨论】:
标签: android opengl-es android-camera live-streaming android-mediacodec