• 0

Question

Hello gang,

I had to switch an app from VLC to WMP (VLC is a great media player, but the 2.0 version affected all the interfaces so...)

I am trying to find the event that gets fired when a local file has completed playing. The EndOfStream does not file for local files (drat) and the PlayStateChange fires twice for "WMPLib.WMPPlayState.wmppsStopped" I could set a local variable, but before I got down that Hack Path I wanted to see if anyone knows of the proper event.

thanks.

Link to comment
https://www.neowin.net/forum/topic/1065850-net-wmp-end-of-file/
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Just took a quick look at the documentation: it seems that when the PlayStateChange event is fired, you need to check the argument passed (which is an integer) to determine what happened. In particular, the value 8 means "MediaEnded", which might be what you need. See http://msdn.microsoft.com/en-us/library/windows/desktop/dd562460(v=vs.85).aspx

  • 0
  On 25/03/2012 at 23:57, Dr_Asik said:

Just took a quick look at the documentation: it seems that when the PlayStateChange event is fired, you need to check the argument passed (which is an integer) to determine what happened. In particular, the value 8 means "MediaEnded", which might be what you need. See http://msdn.microsof...0(v=vs.85).aspx

Thanks, but I knew that. This value: "WMPLib.WMPPlayState.wmppsStopped" is number 8. I have a small test bed but when that code runs and calls a "NextMedia" function, that function does not run. I have taken the advice I found elsewhere in that I have a timer (hack!) that is enabled when the media stops (hack!) and that calls the "NextMedia", which works (HACK!)

Very strange.

  • 0

Strange indeed, I can't reproduce your problem. Here's what I tried:

- Created a new Winforms project

- Added a reference to Windows Media Player (File Version 12.0.7601.17514, there was a second one but older)

- Added the control to the toolbox, dragged it on the form, renamed it to mediaPlayer

- Added a menu to open a file

- Added the following code:

using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace WmpTest {
public partial class Form1 : Form {

public Form1() {
InitializeComponent();
mediaPlayer.PlayStateChange += mediaPlayer_PlayStateChange;
}
void mediaPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) {
if (e.newState == (int)WMPLib.WMPPlayState.wmppsMediaEnded) {
Debug.WriteLine("Got MediaEnded event");
}
}
void ouvrirToolStripMenuItem_Click(object sender, EventArgs e) {
var openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK) {
mediaPlayer.URL = openFileDialog.FileName;
}
}
}
}[/CODE]

When a file finishes playing, I only see "Got MediaEnded event" once in the Debug output window.

  • 0

Here's some code that you can use in your PlayStateChange event handler to see what is triggered in what order:

var enumValues = (int[])Enum.GetValues(typeof(WMPLib.WMPPlayState));
var enumNames = Enum.GetNames(typeof(WMPLib.WMPPlayState));
for(int i = 0; i < enumValues.Length; ++i) {
if (e.newState == enumValues[i]) {
Debug.WriteLine(enumNames[i]);
}
}[/CODE]

It'll print the names of all the events in the Output window of Visual Studio during debugging. This is what I see when I set the URL and let it play to completion:

wmppsTransitioning

wmppsTransitioning

wmppsPlaying

wmppsMediaEnded

wmppsTransitioning

wmppsStopped

This topic is now closed to further replies.
  • Posts

    • If you look at all RAID implementations that exist, you're going to find exceptions. However, all the modern consumer varieties tend to have some things in common (by default). I'll stick to describing those. When you add a disk to a RAID array, metadata is stored at the end of the disk. It records the array the disk is part of, which other disks are in the array, etc. This is called the RAID superblock. If you create a RAID 1 array, your operating system will see them all as a single disk that is very slightly smaller than a single disk (due to the superblock). Everything you write to the RAID disk gets written identically to each of its member disks by the storage controller. Technically, disks are read/written in blocks (each block is multiple sectors in size), but this is all transparent to the user. Every file you create or change or delete is created/changed/deleted on every member disk simultaneously. This is true whether you have 2 disks in the array or more than 2.  If one disk completely fails, you can still operate just fine off the remaining disk(s) (but see the caution below). If you remove one disk and attach it to another PC, it should work fine. The partition information and everything is all at the front of the disk, just as expected. The superblock will just appear as some extra junk at the very end of the disk, outside any partition. In some scenarios, where it is recognized as a RAID member disk from another PC, there might be an extra step before it will let you use it, but it's all very doable. Caution:  Blocks are read from the disks in a staggered fashion. For example, with 2 disks, all the odd blocks are read from one disk and all the even blocks are read from the other. By working together like this, read speeds can be practically doubled. But this comes with a huge drawback. If a disk doesn't fail completely, but instead develops bad sectors, you may not realize it. The bad sectors may happen to be in blocks that are never read on that disk. In some cases, people have had bad sectors develop on one disk, then had the other disk fail, and only then realized that the remaining disk has bad sectors and corrupt data. Every backup method has its pros and cons. Never trust just RAID, or just an external HDD, or just the cloud. Use multiple methods to backup important data.
    • Evidence that it affects "most" people negatively? Based on what? The fact that their are millions of users in fact show me the opposite, that "most" are quite happy.
  • Recent Achievements

    • Conversation Starter
      Kavin25 earned a badge
      Conversation Starter
    • One Month Later
      Leonard grant earned a badge
      One Month Later
    • Week One Done
      pcdoctorsnet earned a badge
      Week One Done
    • Rising Star
      Phillip0web went up a rank
      Rising Star
    • One Month Later
      Epaminombas earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      537
    2. 2
      ATLien_0
      205
    3. 3
      +FloatingFatMan
      167
    4. 4
      Michael Scrip
      151
    5. 5
      Som
      127
  • Tell a friend

    Love Neowin? Tell a friend!