最簡單的 libVLC 播放器

libVLC 非常的強大,利用它可以很容易地實現(xiàn) VLC Media Player 中的任何功能,比如:快速播放媒體、從中提取元數(shù)據,甚至是提取單個視頻幀 ......
由于 libVLC 是跨平臺的,因此在編寫程序時,應盡可能的兼容多個系統(tǒng)。除此之外,我們后續(xù)還會添加一些 GUI 交互。所以從本節(jié)開始,會逐漸引入 Qt(當然了,你也可以選擇自己擅長的其他 GUI 框架)。
為了介紹 libVLC 的用法,我們從最簡單的播放器開始著手,來播放一個本地媒體或者網絡串流,同時也能了解它的主要工作流程。
1
基本配置
配置 libVLC 比較簡單,只需要引入相關庫和頭文件的路徑就行了。但是在后續(xù)的示例中,這部分配置會被頻繁的使用,所以為了方便起見,可以將其定義到一個獨立的 pri 文件中(例如:libVLC.pri):
#?vlc?相關配置
win32?{
????INCLUDEPATH?+=?$$PWD/../vlc-3.0.8/sdk/include
????LIBS?+=?-L$$PWD/../vlc-3.0.8/sdk/lib?-llibvlc?-llibvlccore
}?else?{
????INCLUDEPATH?+=?/usr/local/include
????LIBS?+=?-L/usr/local/lib?-lvlc?-lvlccore
}
然后在使用時,只需要在 pro 文件中包含這個 pri 就可以了:
include($$PWD/../libVLC.pri)
2
工作流程
在使用 VLC API 之前,需要先將 vlc/vlc.h 頭文件包含進來:
#include?
#include?
using?namespace?std;
int?main()
{
????//?vlc?播放相關代碼
????return?0;
}
對于使用 libVLC 的程序來說,必須先通過 libvlc_new() 函數(shù)初始化一個 VLC 實例。
當然了,還需要創(chuàng)建一個媒體以及播放器,媒體分為兩類:
本地媒體:由 libvlc_media_new_path() 創(chuàng)建,參數(shù)為本地媒體路徑。
網絡媒體:由?libvlc_media_new_location() 創(chuàng)建,網絡流可以是 HTTP、RTSP 等。
const?char?*?localMrl?=?"F:\\Videos\\Sample.mkv";
const?char?*?rtspMrl?=?"http://ivi.bupt.edu.cn/hls/cctv6hd.m3u8";
libvlc_instance_t?*instance;
libvlc_media_player_t?*player;
libvlc_media_t?*media;
//?創(chuàng)建并初始化?libvlc?實例
instance?=?libvlc_new(0,?nullptr);
//?創(chuàng)建一個媒體
media?=?libvlc_media_new_path(instance,?localMrl);
//?media?=?libvlc_media_new_location(instance,?rtspMrl);
//?創(chuàng)建一個媒體播放器
player?=?libvlc_media_player_new_from_media(media);
一旦準備就緒,就可以開始播放了:
libvlc_media_player_play(player);
但是這里有個問題,播放是異步的,因此要想辦法等一會兒,否則程序很快就會退出:
waitPlaying(player);
注意:這里是等待播放結束(完整播放),你也可以使用 sleep() 等待若干秒。
最后,在程序結束之前,建議釋放下 libVLC 的相關資源:
//?釋放?media
libvlc_media_release(media);
//?釋放?media?player
libvlc_media_player_release(player);
//?釋放?libvlc?實例
libvlc_release(instance);
切記,這是一個很好的習慣!
等待的具體實現(xiàn)如下,只要不出錯、不結束,就一直等著吧:
void?waitPlaying(libvlc_media_player_t?*mp)
{
????libvlc_state_t?state;
????do?{
????????state?=?libvlc_media_player_get_state(mp);
????}?while?(state?!=?libvlc_Error?&&?state?!=?libvlc_Ended);
}
3
測試程序
運行程序,來看看效果吧:

看什么看,沒想到你是這樣的大熊兔 O(∩_∩)O哈哈~!
·END·
?
點個在看,么么噠!

