Silverlight媒体播放器

时间:2009-06-11 16:37:02

标签: c# silverlight xaml media-player

我正在使用VSTS 2008和C#来开发嵌入在ASP.Net Web应用程序的网页中的Silverlight应用程序。我在XAML中嵌入了MediaElement项。我的问题是,我想在页面中嵌入一个Silverlight媒体播放器,它可以让最终用户手动控制MediaElement项目 - 播放/暂停/停止/快退/转发。有没有参考样品?

提前谢谢, 乔治

EDIT1:添加更准确的要求,

实际上,我想手动控制播放,这意味着我想处理播放器播放/暂停/停止/倒带/转发事件,并为事件处理程序添加我的代码来控制MediaElement并执行其他操作。

EDIT2:我的需求是,我想播放两个重叠的视频。屏幕作为背景视频和相机作为前景视频(位于右下角)。这是我对代码的修改,我目前的问题是,只播放背景视频,从未播放前景右下角视频。有没有人有任何想法?

BTW:我修改的代码和当前工作基于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 function)

        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" />

3 个答案:

答案 0 :(得分: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');

答案 1 :(得分:1)

如果它们是两个单独的xap软件包,那么两者之间就无法进行通信,因为Silverlight沙箱都是单独的。

答案 2 :(得分:0)

SL2videoplayer表示它支持流媒体视频。但是,当我尝试将媒体服务广播网址(OnDemand和Live)提供给初始化参数时,没有任何信息显示出来。在init param example page中还会显示正在播放的远程wmv文件。

还有任何与SL 3一起使用的问题吗?