背景

上一篇文章主要讲述了如何获取RTSP流媒体的地址。获取到流媒体的地址之后,就可以进行流媒体的播放了。播放流媒体可以用很多开源库,例如ffmpeg等。vlc是基于ffmpeg更高一层的封装。本篇主要讲述如何使用VLC库播放摄像机的RTSP视频。

文章发表的顺序可能有点乱,麻烦根据《基于ONVIF协议的摄像机监控管理平台(1)概述》里面的文章目录进行阅读,抱歉了


一、基本思路

  1. 搜索发现设备
  2. 获取设备服务地址
  3. 获取设备能力
  4. 获取设备的配置和流媒体地址
  5. 播放视频

二、vlc库

  1. 为什么使用vlc在文章开头已经说了
  2. vlc可以自行编译。
  3. 我们用到的不是vlc,而是vlc的库。
  4. 如果想偷懒的话,可以去vlc的安装目录那里,把vlc的库都拷贝到我们的程序目录里面,就不用自己编译了(新手推荐)。

三、vlc的c#语言绑定

  1. vlc是基于c和c++的。
  2. 如果想在其它语言中调用,可能不能直接调用这些api。
  3. 我这里举例的是c#,其它语言开发的话,可以搜一下查一下vlc怎么调用
  4. 在visual studio 中创建c# winform 项目
  5. 用nuget安装Vlc.DotNet.Forms(版本是2.2.1)。不懂nuget的请google。
  6. 把官方安装的vlc目录下面的库拷贝到项目执行程序相同的目录下面(或者修改环境变量也行,直接拷贝比较省事)。
  7. 接下来就是写代码,在winform的窗口中,调用Vlc.DotNet.Forms,然后Vlc.DotNet.Forms会调用libvlc进行流媒体播放。

四、具体代码

下面简单贴一下demo代码吧。



        private void Form1_Load(object sender, EventArgs e)
        {
            Thread sendThread = new Thread(send);
            //sendThread.Start();
            //HttpGetProfiles();
            HttpGetStreamUri();
            try
            {
                /****************************
                 * 不要随意升级NutGet中的vlc软件包,只有这个版本没测试到bug
                 * ********************************/
                testVlcControl = new Vlc.DotNet.Forms.VlcControl();
                this.Controls.Add(testVlcControl);
                this.testVlcControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
                this.testVlcControl.BackColor = System.Drawing.SystemColors.ButtonShadow;
                this.testVlcControl.Location = new System.Drawing.Point(12, 12);
                this.testVlcControl.Name = "testVlcControl";
                this.testVlcControl.Size = new System.Drawing.Size(1024, 668);
                this.testVlcControl.TabIndex = 0;
                this.testVlcControl.Text = "vlcRincewindControl1";
                this.testVlcControl.VlcLibDirectory = null;
                this.testVlcControl.VlcLibDirectoryNeeded += new System.EventHandler<Vlc.DotNet.Forms.VlcLibDirectoryNeededEventArgs>(this.OnVlcControlNeedLibDirectory);
                testVlcControl.Play(new Uri("rtsp://admin:12345@192.168.1.20:554/Streaming/Channels/1?transportmode=unicast&profile=Profile_1"));
            }
            catch { }
        }

其中最重要的一行是

testVlcControl.Play(new Uri("rtsp://admin:12345@192.168.1.20:554/Streaming/Channels/1?transportmode=unicast&profile=Profile_1"));

rtsp的地址是之前用其它代码获取到的。如果不知道怎么获取的话,可以翻看我之前的文章。
有个需要注意的问题是
获取流媒体地址之后,一般是不包含账号密码的,需要自行把账号密码填充上去。
格式:rtsp://user:password@ipaddress:port/uri



rtsp://admin:12345@192.168.1.20:554/

五、部分注意事项

  1. 对于定制要求不高的项目,其实vlc足够胜任了。
  2. vlc文档较少,查资料稍微费劲。
  3. 文中举的是c#的例子,用qt和c++进行开发也是完全没问题的。我以前也是qt+vlc。
  4. 文中举例的代码是对应vlc库和c# vlc组件的版本的。如果编译出问题,可以先考虑确认一下版本号。
  5. 可以先尝试用官方的vlc安装版,播放一下流媒体视频,确保视频能够正常播放。

补充说明

有问题的可以咨询我。有偿咨询,哈哈

后记

有任何的疑问或者想法,或者对本文有质疑或者补充的话,欢迎在留言区评论,期待你的分享!


同时,也欢迎关注扫描屏幕下方关注本人微信公众号或者打赏一下这篇文章。





http://xzh.i3geek.com

爱唠叨的老鱼

爱唠叨的老鱼

技术经理,个人站长,创业者

0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据