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回調,調試以後才發現的。內存

而後,我就把他的代碼拷貝拷貝,將回調函數中得到的圖像指定爲控件的背景(控件背景的顯示模式爲拉伸),就實現了視頻以拉伸的形式展現在控件上了。

最後檢查一下有沒有內存泄露什麼的,就打開任務管理器,放一段視頻,看看內存使用率會不會升高什麼的。

相關文章
相關標籤/搜索