Qt-vlc 开发全记录


qt-vlc 开发起来还是非常方便,如果对定制开发没有特殊需求,对实时性也没有特殊需求,可以采用该方案。作者记录一下以防以后忘记。

到qt -vlc 的官网下载 最新的 qt-vlc 版本,使用的一个cmake工程建立。

    作者对该工程做了微微修改如下图,加入了些自己的代码。csdn-固本培元 [email protected]

    官方开源工程下载地址:http://projects.tano.si/vlc-qt/

    若有疑问,可以发email联系作者

Qt-vlc 开发全记录_第1张图片


使用vs2013 加 cmake 开发还是一件非常愉快的事情!链接起来很方便,环境这些自己也不用太过于操心,装好了就一键使用,非常巴适 ! 


跑跑工程看下效果,


Qt-vlc 开发全记录_第2张图片



vs 的cmake 工程 默认运行时候有一个 cmd 控制台,用于debug 也非常方便,c/c++ 程序员 喜欢的printf 可以 用啦!


打开一个 rtsp 地址,看看效果吧!PS: 现在开源 越来越强大了,虽然免费 ,但是很多功能那是相当强大的!离不开像是谷歌这样伟大的公司推动开源社区的发展,非常配置那些 大牛些!


Qt-vlc 开发全记录_第3张图片



重要参考:


下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);



参考文章:

 利用QT和libvlc写RTSP播放器 

http://blog.chinaunix.net/uid-26611383-id-3789962.html

Qt调用VLC写的视频播放器源码

http://blog.csdn.net/mrxiao23/article/details/8814814

Qt5整合QWidget与QML

http://www.ics.com/blog/combining-qt-widgets-and-qml-qwidgetcreatewindowcontainer




你可能感兴趣的:(图像及流媒体)