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
好,就这些了,希望对你有帮助。