基於VLC SDK的二次開發

 

最近一直想總結一下vlc的二次開發,因爲項目前期採用的方案是使用vlc提供的windows下sdk,因此打算利用該sdk,實現一個播放器功能,所以嘗試了一下vlc的二次開發,發現其實也很簡單,vlc的sdk已經封裝了大部分的實現,我們知道vlc在處理時採用了命令方式,因此在封裝過程中比較關鍵的是如何設置封裝參數,下面就進行一下總結,希望對大家有用。

首先:在vlc的網站上下載含有sdk的vlc文件目錄,由於vlc不斷的升級,可能版本以及sdk接口都會發生一下變化,不過思想原理是一樣的:
vlc首先要初始化一個實例:
定義變量:

 libvlc_exception_t m_libvlc_ex;                 ///< vlc處理異常句柄
 libvlc_instance_t* m_plibvlc_Instance;          ///< libvlc 實例對象
 libvlc_media_t*    m_plibvlc_media;             ///< media對象
 libvlc_media_player_t* m_plibvlc_media_player;  ///< vlc播放器對象

定義輸入5個參數:

char *vlc_argv[5] = {'\0'};

 char szCach[125];
 sprintf(szCach, "--rtsp-caching=%d", nRtspCachTime); // 緩衝時間

 vlc_argv[0] = "--ignore-config";
  vlc_argv[1] = "--vout=direct3d";
  vlc_argv[2] = "--aspect-ratio=5:4"; 
 vlc_argv[3] = szCach;
 vlc_argv[4] = strFullArgc;

其中最後一個參數如何得到的呢,這就是我們要創建一個播放器的主要參數:
如果你僅僅是播放參數,則該參數可以置爲空,但是如果想保存收到的rtsp視頻流,則需要初始化該參數爲下面的方式,其中strSavePath爲保存路徑
sprintf(strFullArgc, "--sout=#duplicate{dst=std{acess=file,mux=ts,dst=%s}}", strSavePath);

然後把參數賦值爲 vlc_argv[4] = strFullArgc;

使用上述參數初始化播放器:

// 初始化異常處理變量
 libvlc_exception_init(&m_libvlc_ex);

// 創建並初始化一個libvlc實例
 m_plibvlc_Instance = libvlc_new(5, vlc_argv, &m_libvlc_ex);

 
 // 根據給定的媒體文件(鏈接地址或者文件地址)創建一個media對象,
 m_plibvlc_media = libvlc_media_new(m_plibvlc_Instance, m_pStrUrl, &m_libvlc_ex);
 
 // 根據給定的媒體對象創建一個播放器對象
 m_plibvlc_media_player = libvlc_media_player_new_from_media(m_plibvlc_media, &m_libvlc_ex);

設置播放窗口:
libvlc_media_player_set_hwnd(m_plibvlc_media_player, (void*)hwnd, &m_libvlc_ex);

其中的hwnd爲窗口句柄:
下面就可以播放了:
libvlc_media_player_play(m_plibvlc_media_player, &m_libvlc_ex);

停止播放:
  // 停止播放對象
  libvlc_media_player_stop(m_plibvlc_media_player, &m_libvlc_ex);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章