VLC播放器是一款功能强大且小巧的播放器,它支持多种多样的音视频格式,比如MPEG1,2以及mp3等等。并且通过Qt和VLC的结合能让每个开发者写出自己的视频流媒体播放器。
    Qt与VLC结合编写流媒体播放器主要有两种办法:
      一. 通过VLC-Qt库
    VLC-Qt库是基于libVlc的,后者是VLC 媒体的接口,开发者通过其可以开发出基于VLCMedia的应用。所以VLC-QT具备所以LIBVLC的功能。VLC-Qt库的下载地址是:https://vlc-qt.tano.si/,我选择的是Windows 64bit,当然要选择适合自己电脑的版本。下载安装之后,记住自己的安装目录,之后有用。

     安装好之后,在自己的Qt中项目.pro文件中要添加配置文件。具体来说,如果你的库安装目录为E:\vlc-qt,那么就应该在.pro中加入
     LIBS +=E:/vlc-qt/lib -VLCQtCore -VLCQtWidgets
     INCLUDPATH +=E:/vlc-qt/include (注意是斜杠不是反斜杠)这样才能把下载的库添加进去。
     之后,在ntadej大牛的GitHub上面,他已经给出了样例程序(事实上上面那个库也是他做的)。样例程序比较复杂,但是其关键代码还是比较易懂的。代码地址:https://github.com/vlc-qt/examples。在simple player.cpp中,关键代码如下:
 
  1. _instance = new VlcInstance(VlcCommon::args(), this);  //创建VLC媒体示例
  2. _player = new VlcMediaPlayer(_instance);  //创建播放器
  3. _player->setVideoWidget(ui->video);  //把播放器关联ui中的video控件上面,这样就能在video控件上面播放流媒体
  4. _equalizerDialog->setMediaPlayer(_player);  //之后都是关联配置,比如声音等等
  5. ui->video->setMediaPlayer(_player);
  6. ui->volume->setMediaPlayer(_player);
  7. ui->volume->setVolume(50);
  8. ui->seek->setMediaPlayer(_player);

   这个和之后直接用libvlc还是很相似的。运行它的样例程序,点击open url 按钮就能播放流媒体了。当然他不只做了播放流媒体,还有播放本地媒体文件,两者大同小异,只是在new VLCMedia函数中,输入的参数一个是rtsp流地址,另一个是本地文件地址而已。
  1. _media = new VlcMedia(file,true,_instance);  //创建播放本地文件的媒体
  2. _media = new VlcMedia(url,_instance);  //而这个是创建播放url的 
二. 直接调用libvlc      
   libvlc就是为VLC Media提供的函数接口,通过这个库可以方便地创建VLC媒体播放器。
     首先下载LibVLC的SDK库。http://www.videolan.org/这是官网地址。下载好之后仍然把他放在E:\sdk中。然后在项目的.pro文件添加配置。
       LIBS += E:\sdk\lib\libvlc.lib 
       LIBS += E:\sdk\lib\libvlccore.lib
       INCLUDEPATH += E:\sdk\include
        此外还需要添加动态运行库.dll文件。需要把你的libvlc.dll  libvlccore.dll 以及include/vlc/plugins这个文件夹放在可执行目录下面,也就是编译之后产生的build文件夹下面的debug文件夹里面,把它和testvideo.exe(我的程序名,需要看你们自己的名字而定)放在一起就行,这样就添加好动态运行库了。
       至于里面的程序,主要部分可以与上面的程序对比来看:
 
  1. libvlc_m
    = libvlc_media_new_path (libvlc_inst, char_url);//创建一个可以播放的媒体
  2. libvlc_mp = libvlc_media_player_new_from_media
    (libvlc_m);//创建一个代表libvlc的示例
  3. libvlc_media_release (libvlc_m);//释放这个可以播放的媒体
  4. libvlc_media_player_set_hwnd
    (libvlc_mp,screen_hwnd);//把libVLC的弹出窗口嵌入程序中
  5. int x=libvlc_media_player_play
    (libvlc_mp);//播放视频
          
   会发现两者还是很相近的。
           说到这里, 必须要提的是雷霄骅大神,给了我很大帮助。他自己在博客上面写了很多关于视频流媒体的内容和样例,我的libvlc部分也参考了它的博客。
          雷霄骅博客地址:http://blog.csdn.net/leixiaohua1020/article/details/42363079(最简单示例)
                                       http://blog.csdn.net/leixiaohua1020/article/details/42363593(最简单的播放器GUI)

VLC和Qt结合编写流媒体rtsp播放器的更多相关文章

  1. Qt编写的RTSP播放器+视频监控(vlc版本)

    几天写了个ffmpeg版本,今天特意抽空改写个vlc版本,之前vlc播放视频后,被接管了不能识别到鼠标,需要重新编译vlc源码得到支持鼠标消息的版本. /*** vlc视频播放类 作者:feiyang ...

  2. Qt编写的RTSP播放器+视频监控(android版本)

    之前写过vlc版本,ffmpeg版本,也在linux上和嵌入式linux上跑过视频监控,这次想直接用ffmpeg的库写个android版本,qt+ffmpeg+android直接用之前的qt+ffmp ...

  3. Qt编写的RTSP播放器+视频监控(ffmpeg版本)

    记得四年前就写了个简易版本的,当时写得非常粗糙,代码实在惨不忍睹,时隔多年后,重新写了个版本,同时还解决了以前不支持6画面8画面切换等异形布局的问题.1:可以用过目录下的rtsp.txt设置要显示的视 ...

  4. Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器

    基于NDK开发Android平台RTSP播放器 最近做了不少android端的开发,有推流.播放.直播.对讲等各种应用,做了RTMP.RTSP.HTTP-FLV.自定义等各种协议,还是有不少收获和心得 ...

  5. 基于Live555,ffmpeg的RTSP播放器直播与点播

    基于Live555,ffmpeg的RTSP播放器直播与点播 多路RTSP高清视频播放器下载地址:http://download.csdn.net/detail/u011352914/6604437多路 ...

  6. EasyPlayer RTSP播放器:一个适用于安防行业的工具利器(EasyPlayer Windows v2.0.17.0709)

    本文转自EasyDarwin开源团队成员Sword的博客:http://blog.csdn.net/swordtwelve EasyPlayer(Windows) v2.0.17.0709版本又更新发 ...

  7. EasyPlayer RTSP播放器运行出现: Unable to load DLL 找不到指定的模块。exception from HRESULT 0x8007007E 解决方案

    最近有EasyPlayer RTSP播放器的开发者反馈,在一台新装的Windows Server 2008的操作系统上运行EasyPlayer RTSP播放器出现"Unable to loa ...

  8. RTSP播放器开发填坑之道

    好多开发者提到,在目前开源播放器如此泛滥的情况下,为什么还需要做自研框架的RTSP播放器,自研和开源播放器,到底好在哪些方面?以下大概聊聊我们的一点经验,感兴趣的,可以关注 github: 1. 低延 ...

  9. Android、iOS平台RTMP/RTSP播放器实时音量调节

    介绍移动端RTMP.RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对 ...

随机推荐

  1. 上述代码在JavaScript事件处理中

    上述代码在JavaScript事件处理中很常见,主要设置为与旧版本的Internet Explorer(主要在IE9之前)兼容,因为旧版本的IE不支持标准的W3C事件处理规范. 此代码中的e表示事件对 ...

  2. Docker 容器数据卷(Data Volume)与数据管理

    卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必 ...

  3. php--常见算法1

    <?php //递归输出123321 function digui($num){ echo $num; if($num<3){ digui($num+1); } echo $num; } ...

  4. JavaJDBC【一、概述】

    其实这个内容在学习java基础的时候就有看过了,只是没有详细整理,在这再整理一下 数据库操作对于任何一门后端语言来说都是很重要的 JDBC:Java Data Base Connectivity 内容 ...

  5. SeekBar 滚动条

    原seek_thumb样式----------------------------------------------------------------------↑↑↑↑↑ android:thu ...

  6. zencart分类页每页显示产品数量自定义选择的方法

    zencart默认分类页每页显示产品数量是固定的,如何让顾客可以选择每页显示的产品的数量呢?效果图 方式一:全部展示 方式二:下拉菜单 修改方法 1.导入sql INSERT INTO configu ...

  7. P4294 [WC2008]游览计划 (斯坦纳树)

    题目链接 差不多是斯坦纳树裸题,不过边权化成了点权,这样在合并两棵子树时需要去掉根结点的权值,防止重复. 题目还要求输出解,只要在转移时记录下路径,然后dfs一遍就好了. #include<bi ...

  8. Android WebView js混合cookie和localStorage存储

    一.cookie存储和取出: (1)存储: ------------------- **在loadURL之前调用** -------------------- /** * 同步一下cookie */ ...

  9. BZOJ 2243: [SDOI2011]染色 (树剖+线段树)

    树链剖分后两个区间合并的时候就判一下相交颜色是否相同来算颜色段数就行了. CODE #include <vector> #include <queue> #include &l ...

  10. 【Wince-ListView】Wince中的 ListView怎么显示网格?

    using System.Runtime.InteropServices; using System.Windows.Forms; namespace CETEST { public class Co ...