本文整理汇总了C#中IMediaPosition.get_Duration方法的典型用法代码示例。如果您正苦于以下问题:C# IMediaPosition.get_Duration方法的具体用法?C# IMediaPosition.get_Duration怎么用?C# IMediaPosition.get_Duration使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IMediaPosition
的用法示例。
在下文中一共展示了IMediaPosition.get_Duration方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Init
public override void Init()
{
if (!isPlaying)
{
string Filename = "";
float size = 0;
double Max = 0;
int volume = 0;
graph = new FilterGraph() as IFilterGraph;
media = graph as IMediaControl;
eventEx = media as IMediaEventEx;
igb = media as IGraphBuilder;
imp = igb as IMediaPosition;
master.form.Invoke((MethodInvoker)delegate()
{
Filename = master.form.M_Filename.Text;
media.RenderFile(Filename);
size = (float)master.form.M_PrevSize.Value;
master.form.M_PrevSize.Enabled = false;
imp.get_Duration(out Max);
master.form.M_Seek.Maximum = (int)(Max);
master.form.M_Seek.Value = 0;
volume = master.form.M_Volume.Value;
span = (uint)(1000000.0f / master.form.M_CollectFPS);
});
graph.FindFilterByName("Video Renderer", out render);
if (render != null)
{
window = render as IVideoWindow;
window.put_WindowStyle(
WindowStyle.Caption | WindowStyle.Child
);
window.put_WindowStyleEx(
WindowStyleEx.ToolWindow
);
window.put_Caption("ElectronicBoard - VideoPrev -");
int Width, Height, Left, Top;
window.get_Width(out Width);
window.get_Height(out Height);
window.get_Left(out Left);
window.get_Top(out Top);
renderSize.Width = (int)(Width * size);
renderSize.Height = (int)(Height * size);
Aspect = (float)renderSize.Height / (float)renderSize.Width;
window.SetWindowPosition(Left, Top, renderSize.Width, renderSize.Height);
eventEx = media as IMediaEventEx;
eventEx.SetNotifyWindow(master.form.Handle, WM_DirectShow, IntPtr.Zero);
media.Run();
foreach (Process p in Process.GetProcesses())
{
if (p.MainWindowTitle == "ElectronicBoard - VideoPrev -")
{
renderwindow = p.MainWindowHandle;
break;
}
}
isPlaying = true;
iba = media as IBasicAudio;
iba.put_Volume(volume);
//master.form.checkBox3_CheckedChanged(null, null);
master.Start();
}
}
}
示例2: StartCapture
//.........这里部分代码省略.........
// Get the SampleGrabber interface
sampGrabber = (ISampleGrabber) new SampleGrabber();
// Start building the graph
hr = capGraph.SetFiltergraph(m_FilterGraph);
DsError.ThrowExceptionForHR(hr);
// Add the video source
hr = m_FilterGraph.AddSourceFilter(txtAviFileName.Text, "File Source (Async.)", out capFilter);
DsError.ThrowExceptionForHR(hr);
//add AVI Decompressor
IBaseFilter pAVIDecompressor = (IBaseFilter) new AVIDec();
hr = m_FilterGraph.AddFilter(pAVIDecompressor, "AVI Decompressor");
DsError.ThrowExceptionForHR(hr);
IBaseFilter ffdshow;
try
{
// Create Decoder filter COM object (ffdshow video decoder)
Type comtype = Type.GetTypeFromCLSID(new Guid("{04FE9017-F873-410E-871E-AB91661A4EF7}"));
if (comtype == null)
throw new NotSupportedException("Creating ffdshow video decoder COM object fails.");
object comobj = Activator.CreateInstance(comtype);
ffdshow = (IBaseFilter) comobj; // error ocurrs! raised exception
comobj = null;
}
catch
{
CustomMessageBox.Show("Please install/reinstall ffdshow");
return;
}
hr = m_FilterGraph.AddFilter(ffdshow, "ffdshow");
DsError.ThrowExceptionForHR(hr);
//
IBaseFilter baseGrabFlt = (IBaseFilter) sampGrabber;
ConfigureSampleGrabber(sampGrabber);
// Add the frame grabber to the graph
hr = m_FilterGraph.AddFilter(baseGrabFlt, "Ds.NET Grabber");
DsError.ThrowExceptionForHR(hr);
IBaseFilter vidrender = (IBaseFilter) new VideoRenderer();
hr = m_FilterGraph.AddFilter(vidrender, "Render");
DsError.ThrowExceptionForHR(hr);
IPin captpin = DsFindPin.ByDirection(capFilter, PinDirection.Output, 0);
IPin ffdpinin = DsFindPin.ByName(ffdshow, "In");
IPin ffdpinout = DsFindPin.ByName(ffdshow, "Out");
IPin samppin = DsFindPin.ByName(baseGrabFlt, "Input");
hr = m_FilterGraph.Connect(captpin, ffdpinin);
DsError.ThrowExceptionForHR(hr);
hr = m_FilterGraph.Connect(ffdpinout, samppin);
DsError.ThrowExceptionForHR(hr);
FileWriter filewritter = new FileWriter();
IFileSinkFilter filemux = (IFileSinkFilter) filewritter;
//filemux.SetFileName("test.avi",);
//hr = capGraph.RenderStream(null, MediaType.Video, capFilter, null, vidrender);
// DsError.ThrowExceptionForHR(hr);
SaveSizeInfo(sampGrabber);
// setup buffer
if (m_handle == IntPtr.Zero)
m_handle = Marshal.AllocCoTaskMem(m_stride*m_videoHeight);
// tell the callback to ignore new images
m_PictureReady = new ManualResetEvent(false);
m_bGotOne = false;
m_bRunning = false;
timer1 = new Thread(timer);
timer1.IsBackground = true;
timer1.Start();
m_mediaextseek = m_FilterGraph as IAMExtendedSeeking;
m_mediapos = m_FilterGraph as IMediaPosition;
m_mediaseek = m_FilterGraph as IMediaSeeking;
double length = 0;
m_mediapos.get_Duration(out length);
trackBar_mediapos.Minimum = 0;
trackBar_mediapos.Maximum = (int) length;
Start();
}
else
{
MessageBox.Show("File does not exist");
}
}
示例3: Play
void Play(String fileName)
{
try
{
graphBuilder = (IGraphBuilder)new FilterGraph();
mediaCtrl = (IMediaControl)graphBuilder;
mediaEvt = (IMediaEventEx)graphBuilder;
mediaPos = (IMediaPosition)graphBuilder;
videoWin = (IVideoWindow)graphBuilder;
pane.getInfo(InfoQueue, fileName);
graphBuilder.RenderFile( fileName, null );
videoWin.put_Owner(Video_panel.Handle);
//videoWin.put_Owner(this.Handle);
videoWin.put_WindowStyle(WindowStyle.Child | WindowStyle.ClipChildren);
setWindow();
mediaCtrl.Run();
double total_time;
mediaPos.get_Duration(out total_time);
Video_timer.Enabled = true;
iStatus = InfoStatus.Play;
message_label.Width = 0;
message_label.Height = 0;
}
catch (Exception)
{
MessageBox.Show("Couldn't start");
}
}
示例4: PlayMovieInWindow
//.........这里部分代码省略.........
MFError.ThrowExceptionForHR(hr);
}
// Have the graph builder construct its the appropriate graph automatically
hr = this.graphBuilder.RenderFile(filename, null);
DsError.ThrowExceptionForHR(hr);
if (EVRControl == null)
{
//Ищем рендерер и отключаем соблюдение аспекта (аспект будет определяться размерами видео-окна)
IBaseFilter filter = null;
graphBuilder.FindFilterByName("Video Renderer", out filter);
if (filter != null)
{
IVMRAspectRatioControl vmr = filter as IVMRAspectRatioControl;
if (vmr != null) DsError.ThrowExceptionForHR(vmr.SetAspectRatioMode(VMRAspectRatioMode.None));
}
else
{
graphBuilder.FindFilterByName("Video Mixing Renderer 9", out filter);
if (filter != null)
{
IVMRAspectRatioControl9 vmr9 = filter as IVMRAspectRatioControl9;
if (vmr9 != null) DsError.ThrowExceptionForHR(vmr9.SetAspectRatioMode(VMRAspectRatioMode.None));
}
}
}
// QueryInterface for DirectShow interfaces
this.mediaControl = (IMediaControl)this.graphBuilder;
this.mediaEventEx = (IMediaEventEx)this.graphBuilder;
this.mediaSeeking = (IMediaSeeking)this.graphBuilder;
this.mediaPosition = (IMediaPosition)this.graphBuilder;
// Query for video interfaces, which may not be relevant for audio files
this.videoWindow = (EVRControl == null) ? this.graphBuilder as IVideoWindow : null;
this.basicVideo = (EVRControl == null) ? this.graphBuilder as IBasicVideo : null;
// Query for audio interfaces, which may not be relevant for video-only files
this.basicAudio = this.graphBuilder as IBasicAudio;
basicAudio.put_Volume(-(int)(10000 - Math.Pow(Settings.VolumeLevel, 1.0 / 5) * 10000)); //Громкость для ДиректШоу
// Is this an audio-only file (no video component)?
CheckIsAudioOnly();
if (!this.isAudioOnly)
{
//Определяем аспект, если он нам не известен
if (in_ar == 0)
{
MediaInfoWrapper media = new MediaInfoWrapper();
media.Open(filepath);
in_ar = media.Aspect;
media.Close();
}
if (videoWindow != null)
{
// Setup the video window
hr = this.videoWindow.put_Owner(this.source.Handle);
DsError.ThrowExceptionForHR(hr);
hr = this.videoWindow.put_WindowStyle(DirectShowLib.WindowStyle.Child | DirectShowLib.WindowStyle.ClipSiblings |
DirectShowLib.WindowStyle.ClipChildren);
DsError.ThrowExceptionForHR(hr);
}
MoveVideoWindow();
}
else
{
if (VHost != null)
{
VHost.Dispose();
VHost = null;
VHandle = IntPtr.Zero;
VHostElement.Child = null;
}
}
// Have the graph signal event via window callbacks for performance
hr = this.mediaEventEx.SetNotifyWindow(this.source.Handle, WMGraphNotify, IntPtr.Zero);
DsError.ThrowExceptionForHR(hr);
this.Focus();
// Run the graph to play the media file
hr = this.mediaControl.Run();
DsError.ThrowExceptionForHR(hr);
this.currentState = PlayState.Running;
SetPauseIcon();
double duration = 0.0;
hr = mediaPosition.get_Duration(out duration);
DsError.ThrowExceptionForHR(hr);
slider_pos.Maximum = duration;
//Запускаем таймер обновления позиции
if (timer != null) timer.Start();
}
示例5: MainFormLoader
private void MainFormLoader()
{
if (!Application.Current.Dispatcher.CheckAccess())
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new MainFormLoaderDelegate(MainFormLoader));
else
{
try
{
// If we have ANY file open, close it and shut down DirectShow
if (this.currentState != PlayState.Init)
CloseClip();
//список плохих титлов
ArrayList badlist = new ArrayList();
if (isInfoLoading)
{
double maximum = 0;
int index_of_maximum = 0;
int num = 0;
//забиваем длительность
foreach (object obj in dvd)
{
string[] titles = (string[])obj;
string ifopath = Calculate.GetIFO(titles[0]);
if (File.Exists(ifopath))
{
MediaInfoWrapper media = new MediaInfoWrapper();
media.Open(ifopath);
string info = media.Width + "x" + media.Height + " " + media.AspectString + " " + media.Standart;
media.Close();
//получаем информацию из ифо
VStripWrapper vs = new VStripWrapper();
vs.Open(ifopath);
double titleduration = vs.Duration().TotalSeconds;
//string info = vs.Width() + "x" + vs.Height() + " " + vs.System(); //При обращении к ifoGetVideoDesc на некоторых системах происходит вылет VStrip.dll..
//Теперь нужная инфа будет браться из МедиаИнфо..
vs.Close();
string titlenum = Calculate.GetTitleNum(titles[0]);
combo_titles.Items.Add("T" + titlenum + " " + info + " " + Calculate.GetTimeline(titleduration) + " - " + titles.Length + " file(s)");
//Ищем самый продолжительный титл
if (titleduration > maximum)
{
maximum = titleduration;
index_of_maximum = num;
}
num += 1;
}
//метод если нет IFO
else
{
try
{
int n = 0;
double titleduration = 0.0;
string info = "";
foreach (string tilte in titles)
{
int hr = 0;
this.graphBuilder = (IGraphBuilder)new FilterGraph();
// Have the graph builder construct its the appropriate graph automatically
hr = this.graphBuilder.RenderFile(tilte, null);
DsError.ThrowExceptionForHR(hr);
// QueryInterface for DirectShow interfaces
this.mediaControl = (IMediaControl)this.graphBuilder;
this.mediaPosition = (IMediaPosition)this.graphBuilder;
//определяем длительность
double cduration = 0.0;
hr = mediaPosition.get_Duration(out cduration);
DsError.ThrowExceptionForHR(hr);
//определяем различные параметры
if (n == 0)
{
this.basicVideo = this.graphBuilder as IBasicVideo;
//this.basicAudio = this.graphBuilder as IBasicAudio;
int resw;
int resh;
double AvgTimePerFrame;
hr = basicVideo.get_SourceWidth(out resw);
DsError.ThrowExceptionForHR(hr);
hr = basicVideo.get_SourceHeight(out resh);
DsError.ThrowExceptionForHR(hr);
hr = basicVideo.get_AvgTimePerFrame(out AvgTimePerFrame);
double framerate = 1 / AvgTimePerFrame;
string system = "NTSC";
if (framerate == 25.0)
system = "PAL";
info += resw + "x" + resh + " " + system + " ";
}
//.........这里部分代码省略.........
示例6: FileLoad
//Мотод для загрузки видео файла.
public void FileLoad(string sfile, Panel vPanel)
{
CleanUp();
graphBuilder = (IGraphBuilder) new FilterGraph();
mediaControl = graphBuilder as IMediaControl;
mediaPosition = graphBuilder as IMediaPosition;
videoWindow = graphBuilder as IVideoWindow;
basicAudio = graphBuilder as IBasicAudio;
ddColor.lBrightness = 0;
ddColor.lContrast = 0;
ddColor.lGamma = 0;
ddColor.lSaturation = 0;
graphBuilder.RenderFile(sfile, null);
videoWindow.put_Owner(vPanel.Handle);
videoWindow.put_WindowStyle(WindowStyle.Child
| WindowStyle.ClipSiblings
| WindowStyle.ClipChildren);
videoWindow.SetWindowPosition(vPanel.ClientRectangle.Left,
vPanel.ClientRectangle.Top,
vPanel.ClientRectangle.Width,
vPanel.ClientRectangle.Height);
mediaControl.Run();
CurrentStatus = mStatus.Play;
mediaPosition.get_Duration(out mediaTimeSeconds);
allSeconds = (int)mediaTimeSeconds;
}
示例7: MainFormLoader
private void MainFormLoader()
{
if (!Application.Current.Dispatcher.CheckAccess())
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new MainFormLoaderDelegate(MainFormLoader));
else
{
try
{
// If we have ANY file open, close it and shut down DirectShow
if (this.currentState != PlayState.Init)
CloseClip();
if (isInfoLoading)
{
string info = "";
double maximum = 0;
double titleduration = 0.0;
int index_of_maximum = 0;
int num = 0;
//забиваем длительность
foreach (object obj in dvd)
{
string[] titles = (string[])obj;
string ifopath = Calculate.GetIFO(titles[0]);
if (File.Exists(ifopath))
{
//получаем информацию из ифо
VStripWrapper vs = new VStripWrapper();
vs.Open(ifopath);
titleduration = vs.Duration().TotalSeconds;
info = vs.GetVideoInfo();
vs.Close();
string titlenum = Calculate.GetTitleNum(titles[0]);
combo_titles.Items.Add("T" + titlenum + " " + info + " " + Calculate.GetTimeline(titleduration) + " - " + titles.Length + " file(s)");
}
else
{
//метод если нет IFO (через DS)
info = "";
bool first = true, error = false;
foreach (string tilte in titles)
{
try
{
int hr = 0;
this.graphBuilder = (IGraphBuilder)new FilterGraph();
// Have the graph builder construct its the appropriate graph automatically
hr = this.graphBuilder.RenderFile(tilte, null);
DsError.ThrowExceptionForHR(hr);
//определяем различные параметры
if (first)
{
int resw, resh;
double AvgTimePerFrame;
this.basicVideo = this.graphBuilder as IBasicVideo;
hr = basicVideo.get_SourceWidth(out resw);
DsError.ThrowExceptionForHR(hr);
hr = basicVideo.get_SourceHeight(out resh);
DsError.ThrowExceptionForHR(hr);
hr = basicVideo.get_AvgTimePerFrame(out AvgTimePerFrame);
DsError.ThrowExceptionForHR(hr);
double framerate = 1 / AvgTimePerFrame;
string system = (framerate == 25.0 || framerate == 50.0) ? "PAL" : "NTSC";
info = resw + "x" + resh + " " + system;
first = false;
}
//определяем длительность
double cduration = 0.0;
this.mediaPosition = (IMediaPosition)this.graphBuilder;
hr = mediaPosition.get_Duration(out cduration);
DsError.ThrowExceptionForHR(hr);
titleduration += cduration;
}
catch (Exception)
{
error = true;
}
finally
{
//освобождаем ресурсы
CloseInterfaces();
}
}
string titlenum = Calculate.GetTitleNum(titles[0]);
combo_titles.Items.Add("T" + titlenum + " " + info + " " + Calculate.GetTimeline(titleduration) + (error ? " ERROR" : "") + " - " + titles.Length + " file(s)");
}
//Ищем самый продолжительный титл
if (titleduration > maximum)
{
maximum = titleduration;
//.........这里部分代码省略.........