C#用VLC “全屏” 播放视频(有误)

今天不当心回来看见本身这篇记录,全屏应该说的是“视频播放时拉伸至整个控件”,当时表述有误,并且文中描写的方法也不是太好。目前我使用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回调,调试以后才发现的。内存

而后,我就把他的代码拷贝拷贝,将回调函数中得到的图像指定为控件的背景(控件背景的显示模式为拉伸),就实现了视频以拉伸的形式展现在控件上了。

最后检查一下有没有内存泄露什么的,就打开任务管理器,放一段视频,看看内存使用率会不会升高什么的。

相关文章
相关标签/搜索