我已成功将libavcodec库导入到iPhone应用程序项目中,并用它将电影文件解码为YUV420P数据,以便我可以获取电影的所有帧然后将它们转换为RGB数据,因此可以通过OpenGL ES。
电影可以成功播放,但由于从YUV到RGB的转换和OpenGL的显示方法(glDrawArrays)很慢,所以它很慢。
是否有更智能的方式播放视频(假设电影必须由libavcodec解码)?比如直接显示YUV或转换为类似YUV的数据,可以直接显示?或者其他显示方法比glDrawArrays更快? YUV数据可以由Core Graphics加载吗?
尝试将YUV转换为RGB。就像是:
img_convert_ctx = sws_getContext(320,
192,
PIX_FMT_YUV420P,
480,
320,
PIX_FMT_RGB24,
sws_flags, NULL, NULL, NULL);
然后:
if (frameData->data[0]) {
sws_scale (img_convert_ctx, frameData->data, frameData->linesize,
0, 192,
picture.data, picture.linesize);
}