2016-04-15 102 views
2

我不熟悉Silverlight(5),但認爲我已經接近了我想要做的工作。感謝任何幫助。Silverlight 5動態流URI設置

基本上,我需要將動態生成的平滑流URI傳遞給播放器,並正確設置「媒體源」。

步驟我走..

客戶端調用,一個鍵 - 值對..

<param name="InitParams" value="mediaurl=http://playready.directtaps.net/smoothstreaming/TTLSS720VC1/To_The_Limit_720.ism/Manifest" /> 

MainPage.xaml中..

<!--Media:PlaylistItem DeliveryMethod="AdaptiveStreaming" MediaSource="mPlayer" /--> 

App.xaml.cs

public Dictionary<string, string> PageData = new Dictionary<string, string>(); 
private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    var paramValues = e.InitParams; 

    foreach (var param in paramValues) 
    { 
     this.PageData.Add(param.Key, param.Value); 

    } 

    this.RootVisual = new MainPage(); 

} 

MainPage.xaml.cs ..

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 

     App currentApp = (App)Application.Current; 

     string uriString = currentApp.PageData["mediaurl"]; 

     MessageBox.Show(uriString); 

     Microsoft.SilverlightMediaFramework.Core.Media.PlaylistItem item = new Microsoft.SilverlightMediaFramework.Core.Media.PlaylistItem(); 

     item.MediaSource = new Uri(uriString, UriKind.Absolute); 

     item.DeliveryMethod = 
      Microsoft.SilverlightMediaFramework.Plugins.Primitives.DeliveryMethods.AdaptiveStreaming; 

     //Add PlaylistItem to the Media playlist 
     Microsoft.SilverlightMediaFramework.Core.SMFPlayer SMFPlayer = new Microsoft.SilverlightMediaFramework.Core.SMFPlayer(); 

     SMFPlayer.Playlist.Add(item); 

     SMFPlayer.Play(); 


    } 
} 

Visual Studio 2015編譯器不會與MainPage.xaml.cs抱怨,但它不起作用。 Silverlight播放器播放的靜態URI很好,但不包含在InitParam中傳遞的URI。

+0

希望這不是一個愚蠢的問題。你測試的靜態和傳入的initparam值是一樣的嗎? – Nkosi

+0

與靜態和在initparam傳遞相同的URI。由於某些原因,我的代碼在MainPage.xaml.cs中斷,因爲uriString被設置爲OK。只需將MediaSource MainPage.xaml綁定到uriString即可。 – Bondi

+0

它會給出錯誤信息嗎? – Nkosi

回答

0

你說,設置URL手動像這樣的作品...

<Media:PlaylistItem DeliveryMethod="AdaptiveStreaming" MediaSource="http://playready.directtaps.net/smoothstreaming/TTLSS720VC1/To_The_Limit_720.ism/Manifest" /> 
在這種情況下

,那麼你需要更新視圖,這樣就可以使控制的名字從後面的代碼(IDE)進行訪問。

<Media:PlaylistItem x:Name="playListItem" DeliveryMethod="AdaptiveStreaming"/> 

,然後在後面的代碼,參考控制

public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 

     App currentApp = (App)Application.Current; 

     string uriString = currentApp.PageData["mediaurl"]; 

     MessageBox.Show(uriString); 

     //reference item by name 
     Microsoft.SilverlightMediaFramework.Core.Media.PlaylistItem item = this.playListItem; 

     item.MediaSource = new Uri(uriString, UriKind.Absolute); 
     //...other code 
    } 
} 

另一個例子來自我給你做了這樣的鏈接。

MainPage.xaml中

<Grid x:Name="LayoutRoot" Background="White" 
    xmlns:smf="http://schemas.microsoft.com/smf/2010/xaml/player"> 
    <smf:SMFPlayer HorizontalAlignment="Stretch" Margin="0" 
     x:Name="sMFPlayer" VerticalAlignment="Stretch" /> 
</Grid> 

MainPage.xaml.cs中

using Microsoft.SilverlightMediaFramework.Core.Media; 
using Microsoft.SilverlightMediaFramework.Plugins.Primitives; 
//... 
public partial class MainPage : UserControl 
{ 
    public MainPage() 
    { 
     InitializeComponent(); 

     App currentApp = (App)Application.Current; 

     string uriString = currentApp.PageData["mediaurl"]; 

     var item = new PlaylistItem(); 
     item.MediaSource = new Uri(uriString, UriKind.Absolute); 
     item.DeliveryMethod = DeliveryMethods.AdaptiveStreaming; 

     //Add PlaylistItem to the Media playlist 
     sMFPlayer.Playlist.Add(item); 
     sMFPlayer.Play(); 
    } 
} 
+0

@Nikoski我可能會將此移至一個新線程。我嘗試了兩種方法,現在只能播放音頻而非視頻,因爲URI可以播放靜態分配給XAML的流暢的流。最初的問題已經得到解答,關於如何將動態順暢的流URI傳遞給Silverlight播放器並感謝您的建議。爲什麼我無法在Silverlight 5中看到來自多個流暢流媒體源的視頻,也沒有播放器控件正在運行,但是聽到音頻並看到Fiddler中的視頻和音頻數據包令人困惑。 – Bondi

+0

好爽。對不起,它沒有回答你的問題。如果它對您有任何用處,請不要忘記註冊。希望你能儘快找到解決你整體問題的辦法。 – Nkosi

+0

Upvoted和新線程FYI @ http://stackoverflow.com/questions/36767344/no-smooth-streaming-video-only-audio-in-code-behind-with-silverlight-5 – Bondi