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 = ;//保存当前MovieID
DataSet dsPlayItem = null;//当前
delegate object ControlMediaPlayer(object obj);
DateTime? dtime;
int state = ;
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 > )
{
DataTable dt = ds.Tables[];
if (dt.Rows.Count > )
{
currentMovieID = (int)dt.Rows[]["MovieID"];
dsPlayItem = ds.Copy();
axWindowsMediaPlayer1.URL = Application.StartupPath + dt.Rows[]["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 > )
{
DataTable dt = ds.Tables[];
DataRow[] drs = dt.Select("MovieID="+currentMovieID.ToString());
if (drs != null && drs.Length > )
{
DataRow[] drs2 = dt.Select("SortNo<"+drs[]["SortNo"].ToString(),"sortno desc");//获取上一个movie
if (drs2 != null && drs2.Length > )
{
if (drs2[]["SortNo"].ToString() != "-1")
{
currentMovieID = (int)drs2[]["MovieID"];
dsPlayItem = ds.Copy();
axWindowsMediaPlayer1.currentPlaylist.clear();
axWindowsMediaPlayer1.URL = Application.StartupPath + drs2[]["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 > )
{
DataTable dt = ds.Tables[];
DataRow[] drs = dt.Select("MovieID=" + currentMovieID.ToString());
if (drs != null && drs.Length > )
{
DataRow[] drs2 = dt.Select("SortNo>" + drs[]["SortNo"].ToString(), "sortno asc");//获取下一个movie
if (drs2 != null && drs2.Length > )
{
currentMovieID = (int)drs2[]["MovieID"];
dsPlayItem = ds.Copy();
axWindowsMediaPlayer1.currentPlaylist.clear();
axWindowsMediaPlayer1.URL = Application.StartupPath + drs2[]["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 = ;
string[] arr = ((string)position).Split(':');
if (arr.Length == )
{
return false;
}
int iResult = ; Array.Reverse(arr);
for (int i = ; i < arr.Length ; i++)
{
if (i == )
{
if (!int.TryParse(arr[i], out iResult) || iResult < || iResult >= )
{
return false;
}
seconds += Convert.ToDouble(arr[i]);
}
else if (i == )
{
if (!int.TryParse(arr[i], out iResult) || iResult < || iResult >= )
{
return false;
}
seconds += Convert.ToDouble(arr[i]) * ;
}
else if (i == )
{
if (!int.TryParse(arr[i], out iResult) || iResult < || iResult >= )
{
return false;
}
seconds += Convert.ToDouble(arr[i]) * * ;
}
} //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 = ;
Array.Reverse(arr2);
for (int i = ; i < arr2.Length ; i++)
{
if (i == )
{
allsecends += Convert.ToDouble(arr2[i]);
}
else if (i == )
{
allsecends += Convert.ToDouble(arr2[i]) * ;
}
else if (i == )
{
allsecends += Convert.ToDouble(arr2[i]) * * ;
}
}
//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[].Select("MovieID="+currentMovieID)[]["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 > )
{
DataTable dt = ds.Tables[];
DataRow[] drs = dt.Select("MovieID=" + movieid.ToString());
if (drs != null && drs.Length > )
{
currentMovieID = (int)drs[]["MovieID"];
dsPlayItem = ds.Copy();
axWindowsMediaPlayer1.currentPlaylist.clear();
axWindowsMediaPlayer1.URL = Application.StartupPath + drs[]["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 = ;//设置返回给客服端http状态代码
string operation = ctx.Request.QueryString["operation"];
string param = ctx.Request.QueryString["param"];
int iResult = ;
bool bResult = false;
double dResult = ;
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 >= && iResult <= )
{
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 > )
{
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 > )
{
DataTable dt = ds.Tables[];
DataRow[] drs = dt.Select("MovieID=" + currentMovieID.ToString());
if (drs != null && drs.Length > )
{
DataRow[] drs2 = dt.Select("SortNo>" + drs[]["SortNo"].ToString(), "sortno asc");//获取下一个movie
if (drs2 != null && drs2.Length > )
{
currentMovieID = (int)drs2[]["MovieID"];
dsPlayItem = ds.Copy();
axWindowsMediaPlayer1.currentPlaylist.clear();
axWindowsMediaPlayer1.URL = Application.StartupPath + drs2[]["URL"].ToString();
axWindowsMediaPlayer1.Ctlcontrols.play();
}
else //到最后一个后播放第一个
{
drs2 = dt.Select("SortNo>-1", "sortno asc");//获取播放第一个movie
if (drs2 != null && drs2.Length > )
{
currentMovieID = (int)drs2[]["MovieID"];
dsPlayItem = ds.Copy();
axWindowsMediaPlayer1.currentPlaylist.clear();
axWindowsMediaPlayer1.URL = Application.StartupPath + drs2[]["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();
//}
} }
}

最新文章

  1. Weblogic AdminServer启动失败,&lt;Security&gt; &lt;BEA-090870&gt; &lt;The realm &quot;myrealm&quot; failed to be loaded
  2. chrome调试找不到 XXXX.min.map 原因及解决办法
  3. 说说oracle中的面向对象与面向集合
  4. 通过javascript把图片转化为字符画
  5. java集合框架1
  6. 《University Calculus》-chaper8-无穷序列和无穷级数-比值审敛法
  7. OneToMany与ManyToOne的属性
  8. hadoop默认3个核心配置文件说明
  9. Go 单例模式[个人翻译]
  10. mysql分表场景分析与简单分表操作
  11. Mysql 备份恢复与xtrabackup备份
  12. Android音视频之AudioRecord录音(一)
  13. 别人的Linux私房菜(18)认识系统服务(daemon)
  14. JAVA 位操作学习
  15. mac 系统安装VM虚拟机打开时报错,提示不是虚拟磁盘的解决方式。
  16. ZOJ 3962 Seven Segment Display(数位DP)
  17. Ubuntu 12.04 安装配置 Apache2
  18. GO学习笔记 - map
  19. Selenium2+python自动化70-unittest之跳过用例(skip)
  20. PHP 正则表达式(PCRE)

热门文章

  1. DataGridView绑定复杂实体(属性本身又是实体)
  2. java Unicode转UTF-8代码
  3. VS2015 C#6.0 中的那些新特性
  4. gson 自定义对象转换格式
  5. 查看Exchange邮件队列(queue)
  6. asp.net 操作excel的一系列问题(未完待续)
  7. JVM常见的七种垃圾收集器的简单比较
  8. Think in java 4th读书笔记__last update20151130
  9. 无须任何软件配置iis+ftp服务器图文说明
  10. arcgis flexviewer中由Application向widget传值