Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
流行Android视频播放器中的视频渲染方法_Android_Video - Fatal编程技术网

流行Android视频播放器中的视频渲染方法

流行Android视频播放器中的视频渲染方法,android,video,Android,Video,视频在YUV颜色空间中编码。Android API只支持RGB开箱即用。作为VPlayer或MX播放器的流行Android视频播放器如何解决此问题?2一般解决方案: 使用纯软件算法转换YUV->RGB 使用3D着色器硬件执行繁重的转换YUV->RGB 此外,质疑这是否是最佳方法(即,这意味着您正在用软件解码视频)——您应该这样做吗?硬件能否处理它(同时显示它)?大多数硬件使用ffmpeg解码音频/视频: 在opencv中,您可以执行此操作 cv::Mat myuv(height + heigh

视频在YUV颜色空间中编码。Android API只支持RGB开箱即用。作为VPlayer或MX播放器的流行Android视频播放器如何解决此问题?

2一般解决方案:

  • 使用纯软件算法转换YUV->RGB
  • 使用3D着色器硬件执行繁重的转换YUV->RGB

  • 此外,质疑这是否是最佳方法(即,这意味着您正在用软件解码视频)——您应该这样做吗?硬件能否处理它(同时显示它)?

    大多数硬件使用ffmpeg解码音频/视频:


    在opencv中,您可以执行此操作

    cv::Mat myuv(height + height / 2, width, CV_8UC1, (unsigned char *) mem);
    cv::Mat bgr(width, height, CV_8UC3);
    cv::cvtColor(myuv, bgr, CV_YUV420sp2RGB, 3);
    

    FFMPEG提供通过sws_缩放功能转换YUV->RGB,但速度非常慢。MX播放器使用,我也在一个应用程序上使用过,效果很好!你在高清视频上有类似于MX播放器的显示帧速率?使用3D着色器硬件进行繁重的转换YUV->RGB。我尝试了使用glTexSubImage2D的着色器。它甚至比软件YUV->RGB转换还要慢。我在高清视频中看到了人工制品,屏幕的某些部分来自一个画面,而另一些来自另一个画面(可能是因为滞后)。我听说glTexSubImage2D本身并不是很慢,因为它使用从RAM复制纹理数据到GPU内存(但我可能错了)。使用纯软件算法转换YUV->RGB。这个原理使用CPU,这对我来说是难以接受的,因为我同时也使用ffmpeg对视频帧进行解码。你使用的是什么样的硬件?这可能会影响速度。我使用HTC Desire(Android 2.3,但没有扩展GL_OES_EGL_image_external)