using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; using System.Net; using System.IO; using System.Configuration; namespace MediaPlayerDemo20140925 { public partial class BVBMovieDemo : Form { bool loop = true;//是否重复播放 bool isStop = false; int currentMovieID = 0;//保存当前MovieID DataSet dsPlayItem = null;//当前 delegate object ControlMediaPlayer(object obj); DateTime? dtime; int state = 0; object objListerner;//销毁时使用 static string ip = ConfigurationManager.AppSettings["ip"];//http://*:8080/ public BVBMovieDemo() { InitializeComponent(); } private void BVBMovieDemo_Load(object sender, EventArgs e) { DataSet ds = BVBDBAccess.DBHelper.Query("select * from PlayItem where sortno=-1"); if (ds != null && ds.Tables.Count > 0) { DataTable dt = ds.Tables[0]; if (dt.Rows.Count > 0) { currentMovieID = (int)dt.Rows[0]["MovieID"]; dsPlayItem = ds.Copy(); axWindowsMediaPlayer1.URL = Application.StartupPath + dt.Rows[0]["URL"].ToString(); } else { MessageBox.Show("无启动视频,请在数据库中设置。","温馨提示"); return; } } Thread thread = new Thread(new ThreadStart(listern)); thread.Start(); timer1.Start(); this.Activate(); this.WindowState = FormWindowState.Maximized; } ///================================================================================================= /// <summary> Plays this object. </summary> /// <remarks> lidongbo, 2014/9/26. </remarks> ///================================================================================================= private bool Play() { ControlMediaPlayer op = delegate( object obj) { isStop = false; axWindowsMediaPlayer1.Ctlcontrols.play(); return true; }; return (bool)axWindowsMediaPlayer1.Invoke(op,""); } ///================================================================================================= /// <summary> Stops this object. </summary> /// <remarks> lidongbo, 2014/9/26. </remarks> ///================================================================================================= private bool Stop() { ControlMediaPlayer op = delegate(object obj){ isStop = true; axWindowsMediaPlayer1.Ctlcontrols.stop(); return true; }; return (bool)axWindowsMediaPlayer1.Invoke(op,""); } ///================================================================================================= /// <summary> Pauses this object. </summary> /// <remarks> lidongbo, 2014/9/26. </remarks> ///================================================================================================= private bool Pause() { ControlMediaPlayer op = delegate(object obj) { axWindowsMediaPlayer1.Ctlcontrols.pause(); return true; }; return (bool)axWindowsMediaPlayer1.Invoke(op,""); } ///================================================================================================= /// <summary> Resumes this object. </summary> /// <remarks> lidongbo, 2014/9/26. </remarks> ///================================================================================================= private bool Resume() { ControlMediaPlayer op = delegate(object obj) { isStop = false; axWindowsMediaPlayer1.Ctlcontrols.play(); return true; }; return (bool)axWindowsMediaPlayer1.Invoke(op,string.Empty); } ///================================================================================================= /// <summary> Previous this object. </summary> /// <remarks> lidongbo, 2014/9/26. </remarks> ///================================================================================================= private bool Previous() { ControlMediaPlayer op = delegate(object obj) { DataSet ds = BVBDBAccess.DBHelper.Query("select * from playitem"); if (ds != null && ds.Tables.Count > 0) { DataTable dt = ds.Tables[0]; DataRow[] drs = dt.Select("MovieID="+currentMovieID.ToString()); if (drs != null && drs.Length > 0) { DataRow[] drs2 = dt.Select("SortNo<"+drs[0]["SortNo"].ToString(),"sortno desc");//获取上一个movie if (drs2 != null && drs2.Length > 0) { if (drs2[0]["SortNo"].ToString() != "-1") { currentMovieID = (int)drs2[0]["MovieID"]; dsPlayItem = ds.Copy(); axWindowsMediaPlayer1.currentPlaylist.clear(); axWindowsMediaPlayer1.URL = Application.StartupPath + drs2[0]["URL"].ToString(); axWindowsMediaPlayer1.Ctlcontrols.play(); } } } } axWindowsMediaPlayer1.Ctlcontrols.play(); return true; }; return (bool)axWindowsMediaPlayer1.Invoke(op,string.Empty); } private bool Next() { ControlMediaPlayer op = delegate(object obj) { DataSet ds = BVBDBAccess.DBHelper.Query("select * from playitem"); if (ds != null && ds.Tables.Count > 0) { DataTable dt = ds.Tables[0]; DataRow[] drs = dt.Select("MovieID=" + currentMovieID.ToString()); if (drs != null && drs.Length > 0) { DataRow[] drs2 = dt.Select("SortNo>" + drs[0]["SortNo"].ToString(), "sortno asc");//获取下一个movie if (drs2 != null && drs2.Length > 0) { currentMovieID = (int)drs2[0]["MovieID"]; dsPlayItem = ds.Copy(); axWindowsMediaPlayer1.currentPlaylist.clear(); axWindowsMediaPlayer1.URL = Application.StartupPath + drs2[0]["URL"].ToString(); //axWindowsMediaPlayer1.fullScreen == true;// axWindowsMediaPlayer1.fullScreen; axWindowsMediaPlayer1.Ctlcontrols.play(); } } } return true; }; return (bool)axWindowsMediaPlayer1.Invoke(op, string.Empty); } ///================================================================================================= /// <summary> 静音. </summary> /// <remarks> lidongbo, 2014/9/3. </remarks> ///================================================================================================= private bool MuteOn() { ControlMediaPlayer op = delegate(object obj) { axWindowsMediaPlayer1.settings.mute = true; return true; }; return (bool)axWindowsMediaPlayer1.Invoke(op,string.Empty); } ///================================================================================================= /// <summary> 取消静音. </summary> /// <remarks> lidongbo, 2014/9/3. </remarks> ///================================================================================================= private bool MuteOff() { ControlMediaPlayer op = delegate(object obj) { axWindowsMediaPlayer1.settings.mute = false; return true; }; return (bool)axWindowsMediaPlayer1.Invoke(op,string.Empty); } private int GetVolume() { ControlMediaPlayer op = delegate(object obj) { return axWindowsMediaPlayer1.settings.volume; }; return (int)axWindowsMediaPlayer1.Invoke(op,""); } private bool SetVolume(int volume) { ControlMediaPlayer op = delegate(object obj) { axWindowsMediaPlayer1.settings.volume = (int)obj; return true; }; return (bool)axWindowsMediaPlayer1.Invoke(op,volume); } private bool SetLoop(bool loop) { this.loop = loop; return true; //axWindowsMediaPlayer1.settings.setMode("loop", true); } ///================================================================================================= /// <summary> 获取当前进度. </summary> /// <remarks> lidongbo, 2014/9/26. </remarks> /// <returns> The seek. </returns> ///================================================================================================= private string GetSeek() { ControlMediaPlayer op = delegate(object obj) { return axWindowsMediaPlayer1.Ctlcontrols.currentPositionString; //return axWindowsMediaPlayer1.Ctlcontrols.currentPosition.ToString()+"|" +axWindowsMediaPlayer1.Ctlcontrols.currentPosition.ToString() + "|"+axWindowsMediaPlayer1.currentMedia.durationString + "|"+axWindowsMediaPlayer1.currentMedia.duration; }; return (string)axWindowsMediaPlayer1.Invoke(op,string.Empty); } private bool SetSeek(string position) { double seconds = 0; string[] arr = ((string)position).Split(':'); if (arr.Length == 0) { return false; } int iResult = 0; Array.Reverse(arr); for (int i = 0; i < arr.Length ; i++) { if (i == 0) { if (!int.TryParse(arr[i], out iResult) || iResult < 0 || iResult >= 60) { return false; } seconds += Convert.ToDouble(arr[i]); } else if (i == 1) { if (!int.TryParse(arr[i], out iResult) || iResult < 0 || iResult >= 60) { return false; } seconds += Convert.ToDouble(arr[i]) * 60; } else if (i == 2) { if (!int.TryParse(arr[i], out iResult) || iResult < 0 || iResult >= 24) { return false; } seconds += Convert.ToDouble(arr[i]) * 60 * 60; } } //if (arr.Length == 3) //{ // for (int i = arr.Length - 1; i >= 0; i--) // { // if (i == 0) // { // if (!int.TryParse(arr[i], out iResult) || iResult < 0 || iResult >= 60) // { // return false; // } // seconds += Convert.ToDouble(arr[i]); // } // else if (i == 1) // { // if (!int.TryParse(arr[i], out iResult) || iResult < 0 || iResult >= 60) // { // return false; // } // seconds += Convert.ToDouble(arr[i]) * 60; // } // else if (i == 2) // { // if (!int.TryParse(arr[i], out iResult) || iResult < 0 || iResult >= 24) // { // return false; // } // seconds += Convert.ToDouble(arr[i]) * 60 * 60; // } // } //} ControlMediaPlayer op = delegate(object obj) { string[] arr2 = axWindowsMediaPlayer1.currentMedia.durationString.Split(':'); double allsecends = 0; Array.Reverse(arr2); for (int i = 0; i < arr2.Length ; i++) { if (i == 0) { allsecends += Convert.ToDouble(arr2[i]); } else if (i == 1) { allsecends += Convert.ToDouble(arr2[i]) * 60; } else if (i == 2) { allsecends += Convert.ToDouble(arr2[i]) * 60 * 60; } } //for (int i = arr.Length - 1; i >= 0; i--) //{ // if (i == 0) // { // allsecends += Convert.ToDouble(arr2[i]); // } // else if (i == 1) // { // allsecends += Convert.ToDouble(arr2[i]) * 60; // } // else if (i == 2) // { // allsecends += Convert.ToDouble(arr2[i]) * 60 * 60; // } //} if ((double)obj > allsecends) { return false; } double result = (double)obj / allsecends * axWindowsMediaPlayer1.currentMedia.duration; axWindowsMediaPlayer1.Ctlcontrols.currentPosition = result; return true; }; if (!(bool)axWindowsMediaPlayer1.Invoke(op, seconds)) { return false; }; return true; } private object GetMovieInfo() { ControlMediaPlayer op = delegate(object obj) { return "当前视频ID:" + currentMovieID + ",名称:" + dsPlayItem.Tables[0].Select("MovieID="+currentMovieID)[0]["MovieName"].ToString(); }; return axWindowsMediaPlayer1.Invoke(op,""); } private bool PlayMovie(int movieid, ref string returnString) { ControlMediaPlayer op = delegate(object obj) { DataSet ds = BVBDBAccess.DBHelper.Query("select * from playitem"); if (ds != null && ds.Tables.Count > 0) { DataTable dt = ds.Tables[0]; DataRow[] drs = dt.Select("MovieID=" + movieid.ToString()); if (drs != null && drs.Length > 0) { currentMovieID = (int)drs[0]["MovieID"]; dsPlayItem = ds.Copy(); axWindowsMediaPlayer1.currentPlaylist.clear(); axWindowsMediaPlayer1.URL = Application.StartupPath + drs[0]["URL"].ToString(); axWindowsMediaPlayer1.Ctlcontrols.play(); return true; } } return false; }; if (!(bool)axWindowsMediaPlayer1.Invoke(op, string.Empty)) { returnString = "不存在"; return false; }; return true; } private void listern() { try { using (HttpListener listerner = new HttpListener()) { objListerner = listerner; listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问 listerner.Prefixes.Add(ip); listerner.Start(); while (true) { bool IsSuccess = false; string returnString = string.Empty; //等待请求连接 //没有请求则GetContext处于阻塞状态 HttpListenerContext ctx = listerner.GetContext(); ctx.Response.StatusCode = 200;//设置返回给客服端http状态代码 string operation = ctx.Request.QueryString["operation"]; string param = ctx.Request.QueryString["param"]; int iResult = 0; bool bResult = false; double dResult = 0; if (!string.IsNullOrEmpty(operation)) { switch (operation) { case "play": IsSuccess = Play(); break; case "stop": IsSuccess = Stop(); break; case "muteon": IsSuccess = MuteOn(); break; case "muteoff": IsSuccess = MuteOff(); break; case "setvolume": if (Int32.TryParse(param, out iResult) && iResult >= 0 && iResult <= 100) { SetVolume(Convert.ToInt32(param)); IsSuccess = true; } else { if (string.IsNullOrEmpty(param)) { returnString += "请输入参数"; } else { returnString += "参数的值应在0到100之间"; } IsSuccess = false; } break; case "getvolume": returnString = GetVolume().ToString(); IsSuccess = true; break; case "previous": IsSuccess = Previous(); break; case "next": IsSuccess = Next(); break; case "loopon": SetLoop(true); IsSuccess = true; break; case "loopoff": SetLoop(false); IsSuccess = true; break; case "pause": IsSuccess = Pause(); break; case "resume": IsSuccess = Resume(); break; case "getseek": returnString = GetSeek(); IsSuccess = true; break; case "setseek": IsSuccess = SetSeek(param); if (!IsSuccess) { returnString = "请输入正确的时间格式和时间点"; } break; case "currentmovie": returnString = GetMovieInfo().ToString(); IsSuccess = true; break; case "playmovie": if (Int32.TryParse(param, out iResult) && iResult > 0) { IsSuccess = PlayMovie(Convert.ToInt32(param), ref returnString); } else { IsSuccess = false; returnString += "请输入MovieID"; } break; } } //使用Writer输出http响应代码 using (StreamWriter writer = new StreamWriter(ctx.Response.OutputStream)) { //writer.WriteLine("<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title>The WebServer Test</title></head><body>"); //writer.Write(returnString); //writer.WriteLine("<form method=get action=/form>"); //writer.WriteLine("<input type=text name=operation value=''>"); //writer.WriteLine("<input type=text name=param value=''>"); //writer.WriteLine("</form>"); //writer.WriteLine("<input type=submit name=提交 value=提交>"); //writer.WriteLine("</body></html>"); ctx.Response.ContentType = "text/plain"; String callbackFunName = ctx.Request.QueryString["callbackparam"]; //writer.Write(callbackFunName + "([ { name:"John"}])"); writer.Write(callbackFunName + "({ result:"" + (IsSuccess ? "success" : "fail") + "",data:"" + returnString + ""})"); writer.Close(); ctx.Response.Close(); } } listerner.Stop(); } } catch { } //catch (Exception ex) { // MessageBox.Show(ex.Message); //} } private void timer1_Tick(object sender, EventArgs e) { if (loop && !isStop) { //利用影片总长度比较来得到 //axWindowsMediaPlayer1.Ctlcontrols.play(); if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsStopped) { DataSet ds = BVBDBAccess.DBHelper.Query("select * from playitem"); if (ds != null && ds.Tables.Count > 0) { DataTable dt = ds.Tables[0]; DataRow[] drs = dt.Select("MovieID=" + currentMovieID.ToString()); if (drs != null && drs.Length > 0) { DataRow[] drs2 = dt.Select("SortNo>" + drs[0]["SortNo"].ToString(), "sortno asc");//获取下一个movie if (drs2 != null && drs2.Length > 0) { currentMovieID = (int)drs2[0]["MovieID"]; dsPlayItem = ds.Copy(); axWindowsMediaPlayer1.currentPlaylist.clear(); axWindowsMediaPlayer1.URL = Application.StartupPath + drs2[0]["URL"].ToString(); axWindowsMediaPlayer1.Ctlcontrols.play(); } else //到最后一个后播放第一个 { drs2 = dt.Select("SortNo>-1", "sortno asc");//获取播放第一个movie if (drs2 != null && drs2.Length > 0) { currentMovieID = (int)drs2[0]["MovieID"]; dsPlayItem = ds.Copy(); axWindowsMediaPlayer1.currentPlaylist.clear(); axWindowsMediaPlayer1.URL = Application.StartupPath + drs2[0]["URL"].ToString(); axWindowsMediaPlayer1.Ctlcontrols.play(); } } } } } } } private void BVBMovieDemo_FormClosed(object sender, FormClosedEventArgs e) { if (objListerner != null) { ((HttpListener)objListerner).Abort(); } Application.Exit(); } private void BVBMovieDemo_MaximumSizeChanged(object sender, EventArgs e) { axWindowsMediaPlayer1.uiMode = "none"; } private void axWindowsMediaPlayer1_DoubleClickEvent(object sender, AxWMPLib._WMPOCXEvents_DoubleClickEvent e) { if (axWindowsMediaPlayer1.fullScreen) { axWindowsMediaPlayer1.fullScreen = false; } if (this.FormBorderStyle == FormBorderStyle.None) { this.FormBorderStyle = FormBorderStyle.FixedSingle; this.WindowState = FormWindowState.Normal; } else { this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindowState.Maximized; } } private void axWindowsMediaPlayer1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.Escape && this.WindowState!= FormWindowState.Normal) { this.FormBorderStyle = FormBorderStyle.FixedSingle; this.WindowState = FormWindowState.Normal; } } private void axWindowsMediaPlayer1_ClickEvent(object sender, AxWMPLib._WMPOCXEvents_ClickEvent e) { //if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsPlaying) //{ // axWindowsMediaPlayer1.Ctlcontrols.pause(); //} //else if (axWindowsMediaPlayer1.playState == WMPLib.WMPPlayState.wmppsPaused) //{ // axWindowsMediaPlayer1.Ctlcontrols.play(); //} } } }