2

ASP.Net Web アプリケーションの Web ページに埋め込まれた Silverlight アプリケーションを開発するために、C# で VSTS 2008 を使用しています。XAML に MediaElement アイテムを埋め込みました。私の質問は、Silverlight メディア プレーヤーをページに埋め込んで、エンド ユーザーが MediaElement アイテムを手動で制御して再生/一時停止/停止/巻き戻し/早送りできるようにしたいということです。参考サンプルはありますか?

前もって感謝します、ジョージ

EDIT1: より正確な要件を追加し、

実際には、再生を手動で制御したいということです。つまり、プレーヤーの再生/一時停止/停止/巻き戻し/転送イベントを処理し、イベント ハンドラーのコードを追加して MediaElement を制御し、何か他のことを行いたいということです。

EDIT2: 私のニーズは、2 つのオーバーラップしたビデオを再生したいということです。バックグラウンド ビデオとしてスクリーン、フォアグラウンド ビデオとしてカメラ (右下隅に配置)。これがコードの変更です。現在の問題は、バックグラウンド ビデオのみが再生され、フォアグラウンドの右下のビデオが再生されないことです。誰にも理由はありますか?

ところで:私の変更されたコードと現在の作業はhttp://www.codeplex.com/sl2videoplayerに基づいています

http://www.yourfilehost.com/media.php?cat=other&file=sl2videoplayer_24325_new.zip

これが私の主な修正コードの簡単な説明です。

mediaControls.xaml.cs

private MediaElement _media = null;
private MediaElement _camera = null;

public MediaElement Camera
{
    set
    {
        _camera = value;
    }
}

void btnPlay_Checked(object sender, RoutedEventArgs e)
{
    _camera.Play();            
    _media.Play();
    OnPlayClicked();
}

Page.xaml

    <MediaElement HorizontalAlignment="Stretch" Margin="0,0,0,0" x:Name="mediaPlayer" Stretch="Uniform" VerticalAlignment="Stretch" AutoPlay="false"/>
    <MediaElement Width="100" Height="100" x:Name="cameraPlayer" AutoPlay="false" HorizontalAlignment="Right" VerticalAlignment="Bottom"/>

Page.xaml.cs

cameraPlayer.Source = App.Current.Resources["c"] as Uri;

App.xaml.cs (Application_Startup 関数)

        else if (item.Key.ToLower() == "c")
        {
            FormatUri(e.InitParams["c"].ToString(), "c", false);
        }

default.html

        <param name="initParams" value="cc=true,markers=true,markerpath=markers_movie21.xml,m=http://localhost/screen.wmv,c=http://localhost/camera.wmv" />
4

3 に答える 3

4

ああ、私はあなたのためにメディアプレーヤーを手に入れました: Sl2 Video Player . MSPL オープン ソースと素晴らしい。

プレーヤーを実用的に制御する機能を追加するには、ScriptableMembers を追加します。登録ステートメントが既にコードに含まれていることがわかります。

    HtmlPage.RegisterScriptableObject("Page", page);

ScriptableMember の例を見てみましょう。

[ScriptableMember]
public void SeekPlayback(string time)
{
    TimeSpan tsTime = TimeSpan.Parse(time);
    mediaControls.Seek(tsTime);
}

すでにコードに存在します。実現したいことを行うためのメソッドをさらに追加します。次に、別の SL プレーヤーでマネージ コードからメソッドを呼び出すことができます。

HtmlElement videoPlugin = HtmlPage.Document.GetElementById("VideoPlayer");
            if (videoPlugin != null)
            {
                ScriptObject mediaPlayer = (ScriptObject)((ScriptObject)videoPlugin.GetProperty("Content")).GetProperty("Page");

                mediaPlayer.Invoke("SeekPlayback", TimeSpan.FromSeconds(seconds).ToString());

            }

またはJavaScriptから:

        var sl = document.getElementById("VideoPlayer");
        var content = sl.Content.Page;
        content.SeekPlayback('55');
于 2009-06-11T16:43:44.370 に答える
1

それらが 2 つの別個の xap パッケージである場合、Silverlight サンドボックスは両方とも個別であるため、2 つが通信する方法はありません。

于 2009-06-11T16:45:36.037 に答える
0

SL2videoplayer は、ストリーミング ビデオをサポートしていると述べています。しかし、メディア サービスのブロードキャスト URL (オンデマンドおよびライブ) を init param 'm' に指定しようとすると、何も表示されませんでした。init パラメータの例のページには、再生中のリモート wmv ファイルも示されています。

また、SL 3 でこれを使用する際の既知の問題はありますか?

于 2009-09-25T10:42:56.930 に答える