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

  • 相关阅读:
    HTTP状态码1XX深入理解
    小公司比较吃亏的两道微服务面试题
    趣谈IO多路复用的本质
    白话TCP/IP原理
    Windows 是最安全的操作系统
    白话linux操作系统原理
    google orgchart
    CSharp: itext7.* create pdf file
    javascript: iframe switchSysBar 左欄打開關閉,兼容各瀏覽器操作(edit)
    csharp: Cyotek.GhostScript.Pdf Conversion pdf convert image x64
  • 原文地址:https://www.cnblogs.com/over140/p/1640813.html
Copyright © 2020-2023  润新知