.net 平滑流媒体播放器-多音频曲目-H.264平滑流
我正在尝试开发基于SmoothStreamingMediaElement的silverlight播放器。 参考: SSME:SmoothStreamingMediaElement Grid.Row=“2”x:Name=“medSmooth”AutoPlay=“True”MinWidth=“320”MinHeight=“240” 现在,源平滑流使用H.264视频编解码器和AAC作为音频编解码器进行编码。 我在下面的URL中发现,audiostreamindex和audiostreamcount属性仅适用于WMV类型,这扼杀了我仅存的希望。 有谁能帮助我检测视频中当前播放的语言,然后我想设置一个事件处理程序或“用户改变语言的动作”“,一旦触发该事件,我想将当前播放的音频曲目更改为所选曲目。我建议使用,它确实简化了视频应用程序的开发。您可以在此处下载其源代码: 但是,您可以在没有框架的情况下做一些事情.net 平滑流媒体播放器-多音频曲目-H.264平滑流,.net,silverlight,silverlight-4.0,smooth-streaming,smooth-streaming-player,.net,Silverlight,Silverlight 4.0,Smooth Streaming,Smooth Streaming Player,我正在尝试开发基于SmoothStreamingMediaElement的silverlight播放器。 参考: SSME:SmoothStreamingMediaElement Grid.Row=“2”x:Name=“medSmooth”AutoPlay=“True”MinWidth=“320”MinHeight=“240” 现在,源平滑流使用H.264视频编解码器和AAC作为音频编解码器进行编码。 我在下面的URL中发现,audiostreamindex和audiostreamcount属性
- 如何在视频中检测当前播放的语言
var currentSegment = mediaElement.ManifestInfo.Segments[mediaElement.CurrentSegmentIndex.Value];
var currentAudioStream = currentSegment.SelectedStreams.Where(i => i.Type == MediaStreamType.Audio).FirstOrDefault()
- 我想将当前播放的音频曲目更改为所选曲目
foreach (var segment in mediaElement.ManifestInfo.Segments)
{
var newStreams = new List<StreamInfo>();
// use current video streams
var selectedVideoStreams = segment.SelectedStreams.Where(i => i.Type != MediaStreamType.Audio).ToList();
newStreams.AddRange(selectedVideoStreams);
// add a new audio stream
newStreams.Add(newAudioStream);
// replace old streams by new ones
segment.SelectStreamsAsync(newStreams);
}
foreach(mediaElement.ManifestInfo.Segments中的var段)
{
var newStreams=新列表();
//使用当前视频流
var selectedVideoStreams=segment.SelectedStreams.Where(i=>i.Type!=MediaStreamType.Audio).ToList();
newStreams.AddRange(selectedVideoStreams);
//添加新的音频流
newStreams.Add(newAudioStream);
//用新的溪流代替旧的溪流
段。选择StreamsAsSync(新闻流);
}
我建议使用,它确实简化了视频应用程序的开发。您可以在此处下载其源代码:
但是,您可以在没有框架的情况下做一些事情
- 如何在视频中检测当前播放的语言
var currentSegment = mediaElement.ManifestInfo.Segments[mediaElement.CurrentSegmentIndex.Value];
var currentAudioStream = currentSegment.SelectedStreams.Where(i => i.Type == MediaStreamType.Audio).FirstOrDefault()
- 我想将当前播放的音频曲目更改为所选曲目
foreach (var segment in mediaElement.ManifestInfo.Segments)
{
var newStreams = new List<StreamInfo>();
// use current video streams
var selectedVideoStreams = segment.SelectedStreams.Where(i => i.Type != MediaStreamType.Audio).ToList();
newStreams.AddRange(selectedVideoStreams);
// add a new audio stream
newStreams.Add(newAudioStream);
// replace old streams by new ones
segment.SelectStreamsAsync(newStreams);
}
foreach(mediaElement.ManifestInfo.Segments中的var段)
{
var newStreams=新列表();
//使用当前视频流
var selectedVideoStreams=segment.SelectedStreams.Where(i=>i.Type!=MediaStreamType.Audio).ToList();
newStreams.AddRange(selectedVideoStreams);
//添加新的音频流
newStreams.Add(newAudioStream);
//用新的溪流代替旧的溪流
段。选择StreamsAsSync(新闻流);
}
如果您正在使用,以下是最简单的解决方案:
private CustomPlayer SetAudioStreamLanguage(string languageCode)
{
const string languageAttributeKey = "Language";
if (AvailableAudioStreams.Count() < 2) return this;
var languageCode = new CultureInfo(languageCode).ThreeLetterISOLanguageName();
if (languageCode == null)
{
throw new Exception(string.Format("Audio stream language code {0} cannot be converted to three-letter ISO language code.", languageCode));
}
StreamMetadata newAudioStream =
AvailableAudioStreams.FirstOrDefault(
s =>
s.Attributes.ContainsKey(languageAttributeKey) &&
s.Attributes[languageAttributeKey].Equals(languageCode, StringComparison.InvariantCultureIgnoreCase));
if (newAudioStream == null) return this;
SelectedAudioStream = newAudioStream;
return this;
}
private CustomPlayer设置音频流语言(字符串语言代码)
{
常量字符串语言attributekey=“语言”;
if(AvailableAudioStreams.Count()<2)返回此值;
var languageCode=新的CultureInfo(languageCode).ThreeLetterIsLanguageName();
if(languageCode==null)
{
抛出新异常(string.Format(“音频流语言代码{0}无法转换为三个字母的ISO语言代码。”,languageCode));
}
流元数据newAudioStream=
AvailableAudioStreams.FirstOrDefault(
s=>
s、 Attributes.ContainsKey(languageAttributeKey)&&
s、 属性[languageAttributeKey].Equals(languageCode,StringComparison.InvariantCultureIgnoreCase));
如果(newAudioStream==null)返回此值;
SelectedAudioStream=新建音频流;
归还这个;
}
应在触发事件后调用此方法
注意:CultureInfo.ThreeLetterIsLanguageName()
方法在Silverlight中不存在。您可以在中找到它的示例实现。如果您正在使用,以下是最简单的解决方案:
private CustomPlayer SetAudioStreamLanguage(string languageCode)
{
const string languageAttributeKey = "Language";
if (AvailableAudioStreams.Count() < 2) return this;
var languageCode = new CultureInfo(languageCode).ThreeLetterISOLanguageName();
if (languageCode == null)
{
throw new Exception(string.Format("Audio stream language code {0} cannot be converted to three-letter ISO language code.", languageCode));
}
StreamMetadata newAudioStream =
AvailableAudioStreams.FirstOrDefault(
s =>
s.Attributes.ContainsKey(languageAttributeKey) &&
s.Attributes[languageAttributeKey].Equals(languageCode, StringComparison.InvariantCultureIgnoreCase));
if (newAudioStream == null) return this;
SelectedAudioStream = newAudioStream;
return this;
}
private CustomPlayer设置音频流语言(字符串语言代码)
{
常量字符串语言attributekey=“语言”;
if(AvailableAudioStreams.Count()<2)返回此值;
var languageCode=新的CultureInfo(languageCode).ThreeLetterIsLanguageName();
if(languageCode==null)
{
抛出新异常(string.Format(“音频流语言代码{0}无法转换为三个字母的ISO语言代码。”,languageCode));
}
流元数据newAudioStream=
AvailableAudioStreams.FirstOrDefault(
s=>
s、 Attributes.ContainsKey(languageAttributeKey)&&
s、 属性[languageAttributeKey].Equals(languageCode,StringComparison.InvariantCultureIgnoreCase));
如果(newAudioStream==null)返回此值;
SelectedAudioStream=新建音频流;
归还这个;
}
应在触发事件后调用此方法
注意:
CultureInfo.ThreeLetterIsLanguageName()
方法在Silverlight中不存在。您可以在中找到它的示例实现。顺便说一句,如果s.Type=Windows.Media.MediaStreamType.Audio,那么我能够解析并找到源清单文件中可用的语言曲目列表,然后是“languages.Add(count.ToString,s.Attributes(“Name”)”listLanguages.Add(s.Attributes(“Name”)Language=New Language()Language.LanguageId=count Language.LanguageName=S.Attributes(“名称”).ToString listLanguages.Add(语言)count=count+1 End如果我基本上希望创建这样的东西-,请尝试源视频,顺便说一句,如果S.Type=Windows.Media.streamtype.Audio然后是'languages.Add',我可以解析并找到源清单文件中可用的语言曲目列表(count.ToString,S.Attributes(“Name”))的listLanguages.Add(S.Attributes(“Name”)Language=New Language()Language.LanguageId=count Language.LanguageName=S.Attributes(“Name”)。ToString listLanguages.Add(Language)count=count+1 End如果我基本上希望创建这样的东西-,