2

axWindowsMediaPlayer コントロールを持つ Windows フォーム アプリケーションを作成しました。プレイリストは作成していませんが、.mp4ファイルを特定の場所に保存しています。Media Ended状態で次のビデオへのパスを渡します。初めて、プレイヤーは正しいパスを受け取り、プレイします。しかし、2 番目のビデオでは、プレイヤーが再生するための正しいパスを受信して​​いるにもかかわらず、黒い画面しか表示されません。

メディア終了状態のコードは次のとおりです。

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(Ready 状態) の後に正しいパスを取得することがわかりました。私は何を間違っていますか?

編集 1:現在のビデオが Media Ended 状態になった後、プレーヤーの再生が停止することがわかりました。と書いてもaxWindowsMediaPlayer.ctlControls.play();メディアプレイヤーには影響ありません。これは axWindowsMediaPlayer のバグですか?

4

1 に答える 1

1

私も以前にこの問題に遭遇しました。最も可能性の高い原因は axWindowsMediaPlayer.ctlControls.play();、再生状態がまだ変化しているときにコマンドを実行したことです ( Media Endedの後、 Ready状態に変化します)。再生状態が変化しているときにプレイヤーにコマンドが送信されても​​、何もしません。エラーの別の考えられる原因は、Media State 9 (transitioning) を含める必要が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
            }

これは、達成しようとしているものによって若干異なります。もう 1 つ気をつけなければならないことは、PlayStateChange イベントを使用してビデオ URL を設定することです。これにより、WMP の再エントリの問題の結果として問題が発生します。前回のコメントの詳細については、他の投稿を参照し ください . お役に立てれば!

于 2016-12-08T17:54:17.437 に答える