8

ActiveXVLCプリギンをWPFアプリケーションに組み込みました。そして、VLCプラグインは正常に動作しています。

AxVLCPlugin   vlc = new AxVLCPlugin();
vlc.MediaPlayerEncounteredError += vlc_MediaPlayerEncounteredError;
vlc.MediaPlayerOpening += vlc_MediaPlayerOpening;
vlc.MediaPlayerBuffering += vlc_MediaPlayerBuffering;
vlc.MediaPlayerEndReached += vlc_MediaPlayerEndReached;
 //
// Other code 
// like    windowsFormsHost1.Child = vlc; and etc
vlc.addTarget(videoURL, null, AXVLC.VLCPlaylistMode.VLCPlayListReplace, 1);
vlc.play();

しかし、VLCのすべてのイベントがまったく機能していない方法もあります。

私はこれらのイベントを意味します:

vlc.MediaPlayerEncounteredError += vlc_MediaPlayerEncounteredError;
vlc.MediaPlayerOpening += vlc_MediaPlayerOpening;
vlc.MediaPlayerBuffering += vlc_MediaPlayerBuffering;
vlc.MediaPlayerEndReached += vlc_MediaPlayerEndReached;

 void vlc_MediaPlayerEndReached(object sender, EventArgs e)
        {
            Debug.WriteLine("[P] - StreamingVideo -  END REACHED + " + DateTime.Now);
        }

        void vlc_MediaPlayerBuffering(object sender, DVLCEvents_MediaPlayerBufferingEvent e)
        {
            Debug.WriteLine("[P] - StreamingVideo -  BUFFERING + " + DateTime.Now);
        }

        void vlc_MediaPlayerOpening(object sender, EventArgs e)
        {
            Debug.WriteLine("[P] - StreamingVideo -  OPENING + " + DateTime.Now);
        }

        void vlc_MediaPlayerEncounteredError(object sender, EventArgs e)
        {
            Debug.WriteLine("[P] - StreamingVideo -  ERROR + " + DateTime.Now);
        }

彼らは発砲していません。(もちろん、これらのメソッドにはブレークポイントを設定します。)

私が本当に必要としているのは、ストリーミングエラーをキャッチし、videoURLをもう一度適用することです。そこで、私はイベントを実験して、その目標を達成するためにどのイベントを使用できるかを確認しています。

なぜそれなのか手がかりはありますか?

PSこのリンクは、 VLCプレーヤーのイベントキャッチにも役立ちません

4

3 に答える 3

4

私はあなたが何か悪いことをしているとは思わない。そうみたいです; これらのイベントは、何らかの理由で実装されていません(または実装されていません)(最新バージョンのActiveXでも)。一部のブラウザプラグインバージョンでも、これらのイベントはバグが多すぎるか、まったく発生しないことを読みました。

ただし、信頼できる3つの便利で実用的なイベントがまだあります。
発火するイベント: playEventpauseEventおよびstopEvent
発火しないイベント:MediaPlayer ..で始まるすべてのイベント

とにかく、以下のコードは私が言及したイベントで機能します:

    AxVLCPlugin vlc;
    public MainWindow()
    {
        InitializeComponent();

        vlc = new AxVLCPlugin();
        windowsFormsHost1.Child = vlc;

        vlc.pauseEvent += new EventHandler(vlc_pauseEvent);
        vlc.playEvent += new EventHandler(vlc_playEvent);
        vlc.stopEvent += new EventHandler(vlc_stopEvent);
    }

    void vlc_playEvent(object sender, EventArgs e)
    {
        Debug.WriteLine("playEvent fired!");
    }

    void vlc_pauseEvent(object sender, EventArgs e)
    {
        Debug.WriteLine("pauseEvent fired!");
    }

    void vlc_stopEvent(object sender, EventArgs e)
    {
        Debug.WriteLine("stopEvent fired!");
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.ShowDialog();
        if (ofd.FileName != "")
        {
            Debug.WriteLine(ofd.FileName);
            vlc.addTarget("file:///" + ofd.FileName, null, AXVLC.VLCPlaylistMode.VLCPlayListReplaceAndGo, 0);
            vlc.play();
        }
    }

それでも、これらのイベントはストリーミングエラーについて通知しません。IMO、あなたができることは; try-実行する場所をキャッチしvlc.addTarget(...)ますvlc.play()"file:///"URLが有効かどうかを事前に確認してください(また、プラグインの最新バージョンでファイルパスの前に含めることを忘れないでください)。そして、キャッチされたエラーが存在しないファイルや無効なパスなどに関するものでない場合にのみ、videoURLを(必要に応じて)再適用します。

または、他のラッパー/カスタムライブラリを試すこともできます。

于 2013-02-01T17:57:50.320 に答える
0

それはこのようなものであるべきではありません:

vlc.MediaPlayerEncounteredError += new MediaPlayerEncounteredErrorEventHandler(vlc_MediaPlayerEncounteredError);
于 2013-01-31T15:46:07.000 に答える
0

[デザイン]→[プロパティ]→[イベント(雷のアイコン)]→[で選択]からVLCを右クリックしaxVLCPlugin21_MediaPlayerendますMediaPlayerEndReached

詳細については、画像を参照してください。

于 2019-05-17T01:28:10.940 に答える