需要用windows media player播放视频,两个摄像头从不同位置录像的视频,要一起播放,从某个给定时间段开始播放,速度为0.1
先上代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WMPLib;
namespace videotest
{
public partial class Form1 : Form
{
bool flag2 = true;
public double cp;//视频开始时间
public string url = "";
public string url2 = "";
public double changdu;//需要显示的一个业务变量
public string no;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
axWindowsMediaPlayer1.URL = url;
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = 0d;
axWindowsMediaPlayer1.uiMode = "none";
axWindowsMediaPlayer1.settings.autoStart = false;
axWindowsMediaPlayer1.Ctlcontrols.play();
axWindowsMediaPlayer2.URL = url2;
axWindowsMediaPlayer2.Ctlcontrols.currentPosition = 0d;
axWindowsMediaPlayer2.uiMode = "none";
axWindowsMediaPlayer2.settings.autoStart = false;
axWindowsMediaPlayer2.Ctlcontrols.play();
timer1.Interval = 100;
timer1.Enabled = true;
label3.Text = cp.ToString();
label4.Text = changdu.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
if (axWindowsMediaPlayer1.playState == WMPPlayState.wmppsPlaying && axWindowsMediaPlayer2.playState == WMPPlayState.wmppsPlaying)
{
axWindowsMediaPlayer1.Ctlcontrols.pause();
axWindowsMediaPlayer2.Ctlcontrols.pause();
button1.Text = "播放";
}
else
{
axWindowsMediaPlayer1.Ctlcontrols.play();
axWindowsMediaPlayer2.Ctlcontrols.play();
button1.Text = "暂停";
}
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
if (axWindowsMediaPlayer1.playState == WMPPlayState.wmppsPlaying && axWindowsMediaPlayer2.playState == WMPPlayState.wmppsPlaying)
{
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = trackBar1.Value/1000d;
axWindowsMediaPlayer2.Ctlcontrols.currentPosition = trackBar1.Value/1000d;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (axWindowsMediaPlayer1.playState == WMPPlayState.wmppsPlaying)
{
trackBar1.Maximum = (int)(axWindowsMediaPlayer1.currentMedia.duration)*1000-1000;
trackBar1.Minimum = 0;
trackBar1.Value = (int)(axWindowsMediaPlayer1.Ctlcontrols.currentPosition)*1000;
}
if (axWindowsMediaPlayer1.playState == WMPPlayState.wmppsMediaEnded)
{
trackBar1.Value = 0;
button1.Text = "播放";
}
if (flag2&& axWindowsMediaPlayer1.playState == WMPPlayState.wmppsPlaying&& axWindowsMediaPlayer2.playState == WMPPlayState.wmppsPlaying)
{
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = cp;
axWindowsMediaPlayer2.Ctlcontrols.currentPosition = cp;
trackBar1.Value = (int)(cp*1000);
axWindowsMediaPlayer1.Ctlcontrols.pause();
axWindowsMediaPlayer2.Ctlcontrols.pause();
axWindowsMediaPlayer1.settings.rate = 0.1;
axWindowsMediaPlayer2.settings.rate = 0.1;
button1.Text = "播放";
flag2 = false;
}
label1.Text = axWindowsMediaPlayer1.currentMedia.durationString;
label2.Text = TimeChange(axWindowsMediaPlayer1.Ctlcontrols.currentPosition);
}
private string TimeChange(double t)
{
string res = "";
int m = (int)Math.Floor(t / 60d);
int s = (int)(t - m * 60d);
res = m.ToString().PadLeft(2, '0')+":"+s.ToString().PadLeft(2, '0')+"."+ Math.Round(((t - m * 60d)-s),3)*1000;
return res;
}
private void trackBar1_MouseUp(object sender, MouseEventArgs e)
{
timer1.Enabled = true;
}
private void trackBar1_MouseDown(object sender, MouseEventArgs e)
{
timer1.Enabled = false;
}
private void button3_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.currentPosition += 3;
axWindowsMediaPlayer2.Ctlcontrols.currentPosition += 3;
}
private void button4_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.currentPosition -= 3;
axWindowsMediaPlayer2.Ctlcontrols.currentPosition -= 3;
}
private void button2_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.Ctlcontrols.stop();
axWindowsMediaPlayer2.Ctlcontrols.stop();
trackBar1.Value = 0;
}
private void button5_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.settings.rate = 0.1;
axWindowsMediaPlayer2.settings.rate = 0.1;
}
private void button6_Click(object sender, EventArgs e)
{
axWindowsMediaPlayer1.settings.rate = 0.2;
axWindowsMediaPlayer2.settings.rate = 0.2;
}
/// <param name="VideoName">视频文件pic/guiyu.mov</param>
/// <param name="WidthAndHeight">图片的尺寸如:240*180</param>
/// <param name="CutTimeFrame">开始截取的时间如:"1"</param>
#region 从视频画面中截取一帧画面为图片
public string GetPicFromVideo(string VideoName, string WidthAndHeight, string CutTimeFrame)
{
string ffmpeg = @"ffmpeg.exe";
string PicName = @"F:/"+no+".jpg"; //Server.MapPath(Guid.NewGuid().ToString().Replace("-", "") + ".jpg");
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(ffmpeg);
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.Arguments = " -i " + VideoName + " -y -f image2 -ss " + CutTimeFrame + " -t 0.001 -s " + WidthAndHeight + " " + PicName; //設定程式執行參數
try
{
System.Diagnostics.Process.Start(startInfo);
return PicName;
}
catch (Exception err)
{
return err.Message;
}
}
#endregion
private void button7_Click(object sender, EventArgs e)
{
GetPicFromVideo(url,"1024*768", cp.ToString());
}
}
}
后面还用 ffmpeg.exe来做了截图功能,ffmpeg文件三件套下载在我的其他链接里