我创建了一个具有axWindowsMediaPlaye
r控件的Windows窗体应用程序。我没有在其上创建播放列表,但我已将 .mp4 文件存储在特定位置。我将路径传递到 Media Ended 状态下的下一个视频。玩家第一次收到正确的路径和游戏。但对于第二个视频,虽然播放器正在接收正确的播放路径,但我只能看到黑屏。
以下是Media Ended State的代码:
private void axWindowsMediaPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if(e.newState == 8)
{
//Getting jumpTo of selected page
var selectedElementJumpToValue = MainContentAreaBl.GetSelectedElementValue(_currentId, "jumpTo");
if (selectedElementJumpToValue != null)
{
_currentId = selectedElementJumpToValue;
if (_currentId != "menu")
{
pagination.Text = MainContentAreaBl.GetPaginationText(_currentId);
LaunchPlayer(selectedElementJumpToValue);
}
else
{
this.Hide();
this.SendToBack();
menu.BringToFront();
}
}
}
}
private void LaunchPlayer(string id)
{
string selectedElementPageTypeValue = MainContentAreaBl.GetSelectedElementPageTypeValue(id);
var playerFile = Path.Combine(Common.ContentFolderPath, MainContentAreaBl.GetSelectedElementDataPathValue(id));
if (selectedElementPageTypeValue == "video")
{
InitialiseMediaPlayer();
axShockwaveFlash.Stop();
axShockwaveFlash.Visible = false;
if (File.Exists(playerFile))
{
axWindowsMediaPlayer.URL = playerFile;
}
}
else if (selectedElementPageTypeValue == "flash")
{
InitialiseShockwaveFlash();
axWindowsMediaPlayer.close();
axWindowsMediaPlayer.Visible = false;
if (File.Exists(playerFile))
{
axShockwaveFlash.Movie = playerFile;
axShockwaveFlash.Play();
}
}
}
private void InitialiseMediaPlayer()
{
axWindowsMediaPlayer.Visible = true;
axWindowsMediaPlayer.enableContextMenu = false
axWindowsMediaPlayer.uiMode = "none";
axWindowsMediaPlayer.Dock = DockStyle.Fill;
}
当我调试我的应用程序时,我看到Media Player在e.newState == 10
(就绪状态)之后获得了正确的路径。我做错了什么?
编辑1:我发现当前视频进入Media Ended状态后,播放器停止播放。即使我写axWindowsMediaPlayer.ctlControls.play();
,它也不会影响媒体播放器。这是axWindowsMediaPlayer中的错误吗?
答案 0 :(得分:1)
我之前也遇到过这个问题。最可能的原因是您在播放状态仍在变化时发出命令axWindowsMediaPlayer.ctlControls.play();
(在媒体结束之后,它将变为就绪状态)。如果在播放状态发生变化时向播放器发送命令,它将不会执行任何操作。导致错误的另一个可能原因是,有时需要将媒体状态9(转换)包含在if(e.newState == 8)
中,以便您拥有if(e.newState == 8 | e.newState==9)
。我有过这样的情况,它没有接受状态8(媒体结束),可能是因为它发生得非常快并且跳转到过渡 - 不完全确定这个原因但我有一个播放器没有移动到下一个视频因为这种情况发生在播放列表中。为了解决这个问题,我做了类似的事情:
if (e.newState == 8 | e.newState== 9 | e.newState== 10)
{
if (e.newState == 8)
{ //Insert your code here
}
根据您的目标,这会略有不同。另外需要注意的是使用PlayStateChange事件来设置视频URL,这会导致WMP重新输入问题导致出现问题 - 请参阅其他帖子以获取有关我上次评论的进一步说明: here is a good one和another here。希望这有帮助!