Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 平滑流媒体播放器-多音频曲目-H.264平滑流_.net_Silverlight_Silverlight 4.0_Smooth Streaming_Smooth Streaming Player - Fatal编程技术网

.net 平滑流媒体播放器-多音频曲目-H.264平滑流

.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属性

我正在尝试开发基于SmoothStreamingMediaElement的silverlight播放器。 参考: SSME:SmoothStreamingMediaElement Grid.Row=“2”x:Name=“medSmooth”AutoPlay=“True”MinWidth=“320”MinHeight=“240”

现在,源平滑流使用H.264视频编解码器和AAC作为音频编解码器进行编码。 我在下面的URL中发现,audiostreamindex和audiostreamcount属性仅适用于WMV类型,这扼杀了我仅存的希望。

有谁能帮助我检测视频中当前播放的语言,然后我想设置一个事件处理程序或“用户改变语言的动作”“,一旦触发该事件,我想将当前播放的音频曲目更改为所选曲目。

我建议使用,它确实简化了视频应用程序的开发。您可以在此处下载其源代码:

但是,您可以在没有框架的情况下做一些事情

  • 如何在视频中检测当前播放的语言
代码如下:

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如果我基本上希望创建这样的东西-,