zoukankan      html  css  js  c++  java
  • 在C#中实现视频播放器

    当我们需要在C#中实现视频播放器的时候,可以使用如下几种方法:

    一、使用MediaPlayer ActiveX控件

    在C#中支持视屏播放器最简单的方式就是插入MediaPlayer控件了,在WPF中还内置了对MediaPlayer的封装MediaElement,可以通过它直接打造一个播放器。

    使用MediaPlayer控件的好处是简单,它已经基本封装了常用的功能,只需要很少的几行代码就可以实现媒体播放器的功能。并且,由于操作系统中已经内置了MediaPlayer,不需要额外集成播放器的文件。

    不过,它的一个最大的问题是视频支持格式有限。这个问题本身并不严重,在十年前就可以通过安装Media Player Codec Pack 的方式来扩展其支持格式的。对于一些私有格式的视频文件播放,也可以采用这种方案。

    这种方式本身还是非常强大的,不过它带来了插件的安装问题了。如果你的程序是被许多客户端所使用的话,还是会有不少的麻烦的。

    • 插件不容易被集成安装
    • 安装完了后又不少参数要设置,并且不容易通过程序来设置它
    • 第三方插件容易和客户端环境冲突,出问题不容易定位和处理
    • 插件更新不方便

    当然,如果客户端较少,可以人工维护的话,用MediaPlayer也不失为一种简单易行的方案。

    二、使用VLC ActiveX控件

    为了免除插件的麻烦,一种替换方案是直接使用一个比较强大的播放器VLC Player,通过它的ActiveX控件实现视频播放的功能。

        

    该方法本质上和方法一一样,是调用的ActiveX控件,好处是可以非常快捷的实现播放器的功能。

    axVLCPlugin21.playlist.add("mms://new-media/publishingpoint1", "", " :mms-caching=1000");
    axVLCPlugin21.playlist.play();

    这种方式和前面的方法一样,涉及到第三方程序的安装。不过,使用VLC的好处是,它的安装和更新比MediaPlayer的插件简单一些。出问题的几率也少一些。但一样存在acitvex控件的安装、注册、更新和冲突问题。

     

    三、使用LIB VLC库

    这种方式依然是依赖的VLC播放器的功能,不过它并不使用VLC的activex控件,通过pinvoke vlc的dll实现播放器的功能。相当于利用vlc的api实现了一个vlc的播放器。

    Github上也有比较完善的对它的封装:https://github.com/ZeBobo5/Vlc.DotNet。如果要详细了解其结构可以参看园子里的这篇入门文章: c#万能视频播放器

    这种方式比较成熟了,网上对libvlc的介绍非常多,集成起来还是非常容易的。出问题时相应的定位也比较容易,可以直接用vlc player对比。

    这种方式比起直接使用VLC ActiveX来,开发起来要麻烦一些,但是可以实现一些更底层的控制。另外,由于不需要安装部署和更新都是可控的。可以满足绝大部分情况下的视频播放需要。

     

    四、使用FFMPEG库

    LibVLC的方式比虽然算简单易用,但是如果我们想实现一些更底层的功能时,此时就要则可以使用ffmpeg库了。实际上,vlc player的底层也是依赖于ffmpeg库的实现的, 他们之间是这样的一个关系。

        

    使用ffmpeg的时,就拥有了更加底层的api了,此时可以实现更加强大的功能。并且它是跨平台的,对于移动平台的音视频开发也是非常有帮助的。

    关于ffmpeg的介绍,网上还是有比较多的文章的,不过它相关的内容也比较多,后续我也会写一些文章介绍一些我使用过程中的一些心得。

    如果只是想实现一个播放器的话,网上也有一些现成的封装的。

    https://github.com/unosquare/ffmediaelement

    也有文章介绍这个库如何使用:

    https://github.com/DG-Wangtao/FFMEVideoPlayer

    这个库本身没有什么大问题,基本上可以满足大多数场景的使用。但我试用了一下,一些异常的情况下的处理还是不如vlc来的完善。

     

     

  • 相关阅读:
    C# 数组 随机 排序
    安全防护之加盐慢哈希加密
    NLog的介绍使用
    xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance(xsi:schemaLocation详解)
    如何计算时间复杂度(转)
    ppp协议介绍(转)
    Netlink 介绍(译)
    TIME_WAIT状态的一些总结
    带头结点单链表的翻转(递归)
    压缩前端文件(html, css, js)
  • 原文地址:https://www.cnblogs.com/TianFang/p/7827988.html
Copyright © 2011-2022 走看看