zoukankan      html  css  js  c++  java
  • C# Winform播放多媒体文件 [AudioVideoPlayback ]


    前言

      关键字:C# Microsoft.DirectX.AudioVideoPlayback、C# 播放器

      无言。

    正文

      一、支持播放多媒体文件类型

        ".avi"、".wmv"、".mpeg"、".mpg"

      二、准备

        Microsoft.DirectX.AudioVideoPlayback命名空间在Framework中并包含,需要单独的安装Microsoft DirectX SDK,为了方便,这里提供两个必须的dll直接使用:Microsoft.DirectX.rar

        

      三、实现

        新建Winform项目,引用命名空间: using Microsoft.DirectX.AudioVideoPlayback;

        3.1  初始化

                Video movie;
                Microsoft.DirectX.AudioVideoPlayback.Audio audio;

                path 
    = path.ToLower();
                
    if (path.StartsWith("http://"|| path.StartsWith("https://"))
                    movie 
    = Video.FromUrl(new Uri(path), true);
                
    else
                    movie 
    = Video.FromFile(path);

                audio 
    = movie.Audio;

          代码说明:

            a).  注意变量movieaudio是作为类的成员变量。

            b).  Video支持本地/远程视频文件播放。

            c).  这里不贴关于path的验证代码,自行加上即可。

        3.2  常用方法和属性

          Play  播放

          Stop  停止播放

          Pause  暂停

          CurrentPosition与Duration配合控制总进度和当前进度(位置)

          audio.Volume  控制声音大小,注意范围

        3.3  停止播放和释放资源

                try
                {
                    movie.Stop();
                    
    if (audio != null)
                        audio.Dispose();
                    audio 
    = null;
                    
    if (movie != null)
                        movie.Dispose();
                    movie 
    = null;
                }
                
    catch
                {
                    
    try
                    {
                        movie 
    = null;
                    }
                    
    catch { }
                }

        代码说明:

          当播放完毕之后需要调用这段代码释放资源。

      四、注意

        4.1  声音设置

          声音的设置范围为0到-10000。如果你的控件是0到100可以用公式:value * 100 - 10000。

        4.2  Video对象释放的问题

          在Dispose之前判断一下Video对象为不为null就可以了,之前也找了蛮多资料,直接Dispose的话代码会不继续往下执行了,甚至都没法try得到。

        4.3  播放完毕的委托

          movie.Ending这里并没有成功,我这里也是用的定时器,在定时器里面判断比较CurrentPosition与Duration,但是这里有个问题注意,有可能播放完了CurrentPosition也不等于Duration,所以需要额外处理,判断记录一下上一次CurrentPosition的值,如果两次相等,那么也应该是结束了,这里定时器我设置为1秒。

    结束语

      上月末(09年12月)也正式上班了,算是给我一份新年礼物吧,比较中意,总算是到了起码福利正规的企业,有了很多可以讨论的同事,好好把握一下,准备扎根了 :) 现在在从事手机方面的开发,估计一段时间之后可能会写点那方面的文章。

  • 相关阅读:
    5 年,只为了一个更好的校验框架
    springboot 中 inputStream 神秘消失之谜
    没啥用的黑科技——自动生成测试对象信息框架
    投资中最简单的事
    一个提升英文单词拼写检测性能 1000 倍的算法?
    基于 junit5 实现 junitperf 源码分析
    关于 junit4 90% 的人都不知道的特性,详解 junitperf 的实现原理
    性能测试到底该怎么做?
    从代码生成说起,带你深入理解 mybatis generator 源码
    java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!
  • 原文地址:https://www.cnblogs.com/over140/p/1640813.html
Copyright © 2011-2022 走看看