今天不当心回来看见本身这篇记录,全屏应该说的是“视频播放时拉伸至整个控件”,当时表述有误,并且文中描写的方法也不是太好。目前我使用FFmpeg+SDL2从新写了一个播放器,不用VLC控件了,一个是加载那些vlc解码库(又大)麻烦,另外一个缘由是本身写播放器可控性强一点。html
=====ide
工做还没完成,大概记录一下吧!函数
用VLC播放视频时,它老是保持着原有比例,并不铺满控件。3d
网上照了一些方法,有的人说libvlc_set_fullscreen,其实这是真的全屏幕,我也没研究过,用法比较复杂,不是简简单单的调一个函数就能实现的,具体看官方说明。调试
有的人说libvlc_video_set_aspect_ratio,可是我看别人说只有第一次能够按照自定义长宽比,第二次设置没用,那么在控件大小变更后,就没法实现铺满整个控件了。可是在控件大小不变或者比例不变的状况下,应该是能够用的。orm
设置这个长宽比我也没有试过,由于当时我已经抄了第三种方式的大量代码,不想就这么放弃。视频
第三种方式也是参考网上的,主要流程是设置libvlc_video_set_format和libvlc_video_set_callbacks,利用video回调函数,处理每一帧图像,把它输出到控件上。htm
LIBVLC_API void libvlc_video_set_callbacks | ( | libvlc_media_player_t * | mp, |
libvlc_video_lock_cb | lock, | ||
libvlc_video_unlock_cb | unlock, | ||
libvlc_video_display_cb | display, | ||
void * | opaque | ||
) |
参考资料:http://www.cnblogs.com/smartsensor/p/4343769.htmlblog
大体是如这位大神所说,可是我实际使用中发现,它调用回调函数的顺序并非按照libvlc_video_lock_cb 、libvlc_video_display_cb 、libvlc_video_unlock_cb 这样的顺序执行的,而是先unlock后display,这应该算是一个坑吧,我按照大神的代码老是走不进display回调,调试以后才发现的。内存
而后,我就把他的代码拷贝拷贝,将回调函数中得到的图像指定为控件的背景(控件背景的显示模式为拉伸),就实现了视频以拉伸的形式展现在控件上了。
最后检查一下有没有内存泄露什么的,就打开任务管理器,放一段视频,看看内存使用率会不会升高什么的。