1:改變VLC模塊參數
http://tianxiaoma.blog.51cto.com/1501174/309519
========================================
========================================
改變VLC模塊參數
一、動態改變參數: 查詢得到對象,直接設置參數。 1、filter參數
libvlc_media_player_t *p_mediaplayer; // 輸入播放器指針 vout_thread_t *p_vout = GetVout( p_mediaplayer, p_e );
if( p_vout ) { filter_t *p_filter = filter_chain_GetFilter( p_vout->p->p_vf2_chain, 0, psz_filter_name );
if ( p_filter ) { // ..... int i_ret = var_Set( p_filter, psz_param, val); } }
2、subfilter參數
libvlc_media_player_t *p_mediaplayer; // 輸入播放器指針 input_thread_t *p_input; vlc_object_t *p_obj; vlc_value_t val; p_input = libvlc_get_input_thread( p_mi, p_e );
if( !p_input ) return;
p_obj = vlc_object_find_name( p_input, psz_filter_name, FIND_CHILD );
if( p_obj ) { // ..... int i_ret = var_Set( p_obj , psz_param, val); }
3、Media player參數
vout_thread_t *p_vout = GetVout( p_mi, p_e );
if(p_vout) { // ..... int i_ret = var_Set(p_vout , psz_param, val); }
4、Instance參數(實例參數)
libvlc_instance_t *p_instance; // 輸入實例指針 libvlc_int_t *p_libvlc = p_instance->p_libvlc_int;
if (p_libvlc) { // ..... int i_ret = var_Set(p_libvlc, psz_param, val); }
二、改變默認參數: 模塊調用前(例如打開媒體前),靜態設置。 (1) 可以通過VLC.exe的命令行傳入默認參數;
vlc.exe -vvv --extraintf=logger
(2) 也可以在調用libvlc_new函數創建實例時,傳入默認參數;
const char* vlc_args[32] = {}; int vlc_args_num =0;
vlc_args[vlc_args_num++] =
"-vvv"; // 日志輸出的級別 vlc_args[vlc_args_num++] =
"--extraintf=logger"; // 日志輸出
/* init vlc modules, should be done only once */ m_pInstance = libvlc_new (vlc_args_num , vlc_args, &ex);
(3) 也可以在打開媒體前,傳入默認參數;
szOption =
":deinterlace-mode=blend"; // Deinterlace濾鏡參數:反交錯參數 libvlc_media_add_option(m,szOption ,&ex);
/* Create a media player playing environement */ m_pMediaPlayer = libvlc_media_player_new_from_media (m, &ex);
(4) 也可以運行時程序改變;
默認參數存儲在模塊樹中。用程序改變默認參數,可使用下列函數:
#define config_GetType(a,b) __config_GetType(VLC_OBJECT(a),b) #define config_GetInt(a,b) __config_GetInt(VLC_OBJECT(a),b) #define config_PutInt(a,b,c) __config_PutInt(VLC_OBJECT(a),b,c) #define config_GetFloat(a,b) __config_GetFloat(VLC_OBJECT(a),b) #define config_PutFloat(a,b,c) __config_PutFloat(VLC_OBJECT(a),b,c) #define config_GetPsz(a,b) __config_GetPsz(VLC_OBJECT(a),b) #define config_PutPsz(a,b,c) __config_PutPsz(VLC_OBJECT(a),b,c)
程序示例:
libvlc_instance_t *p_instance; // 輸入實例指針 vlc_value_t value; // 輸入值 libvlc_int_t *p_libvlc = p_instance->p_libvlc_int;
if (p_libvlc) { // ..... config_PutInt(p_libvlc, psz_param, value.i_int); }
三、說明 1、如果要動態改變參數,VLC模塊中最好創建為“實例參數”(VLC Instance Param)。 例如:Demux模塊中,創建"my-log-receive"模塊參數:
bool b_log_receive = var_CreateGetBool( p_demux->p_libvlc,
"my-log-receive");
2、模塊中創建參數的流程如下: (1) 對象是否已創建該參數?有則返回。 (2) 訪問父對象或Instance對象,如果有則引用,並返回。 (3) 訪問模塊的默認參數,判斷是否是模塊參數?是則創建。
=====================================================================================================================
【2:用vlc搭建簡單的流媒體代理服務器】
================================================================
================================================================
===================================================================
這段時間涉及到
RTSP 代理的問題,感覺 VLC 做這方面的 demo 比較好,這里總結下,也方便我以后查閱。
環境: DarwinStreamingServer 6.0.3 + VLC 2.0.3
我之前的一篇文章( http://www.cnblogs.com/MikeZhang/archive/2012/09/09/vlcStreamingServer20120909.html )中介紹過怎樣用 vlc 搭建簡單流媒體服務器,其實這里也只是把 sample1.avi 替換成 rtsp 鏈接罷了,本文中只以 RSTP 的方式示例。
界面操作方式
這里主要介紹下服務器的搭建,客戶端就不介紹了,不懂的朋友參考我這篇文章: http://www.cnblogs.com/MikeZhang/archive/2012/09/09/vlcStreamingServer20120909.html
1 、 打開“媒體—— 打開網絡串流( N ) ”選項,如圖所示:

2 、輸入 RTSP 鏈接,並選擇“串流”,如圖所示:

3 、在彈出的界面中點擊“下一個”,進入如下界面:

4 、選擇一種格式(比如 RTSP ),點擊“添加”按鈕,選擇好相應的編碼檔案后,點擊“串流”即可:

命令行方式
這里介紹命令行方式,主要是為了在批量測試的環境中用腳本進行操作。
假設 DSS 服務器 IP 地址為 192.168.1.100 ,有如下 RTSP 鏈接:
rtsp://192.168.1.100/test.mp4
則 vlc 訪問如下:
vlc -vvv rtsp://192.168.1.100/test.mp4
如果要作為 RTSP 代理服務器使用的話,則需如下調用:
vlc -vvv rtsp://192.168.1.100/test.mp4 --sout "#transcode{vcodec=h264,vb=0,scale=0,acodec=mpga,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/test}"
比如代理服務器的 ip 為 192.168.1.101 ,並且執行了上述命令,則在客戶端訪問如下:
vlc -vvv rtsp://192.168.1.101:8554/test
好,就這些了,希望對你有幫助。