1

Я пытаюсь создать игрока silverlight на основе SmoothStreamingMediaElement. Для Ref: SSME: SmoothStreamingMediaElement Grid.Row = "2" х: Name = "medSmooth" Автозапуск = "True", MinWidth = "320" MinHeight = "240"»Smooth Streaming Player - Multi Audio Track - H.264 SmoothStreams

Теперь Source Гладкие Потоки кодируются с использованием H.264 видео кодек и AAC аудиокодека. я нашел на ниже URL, что audiostreamindex и audiostreamcount свойства только для типа WMV и убил мою единственную левую надежду. http://msdn.microsoft.com/en-us/library/microsoft.web.media.smoothstreaming.smoothstreamingmediaelement_properties(v=vs.90).aspx

Может ли тело мне помочь, как я может обнаружить текущий воспроизводимый язык в видео, а затем я хочу поместить обработчик событий или «Действия пользователя по изменению языка», как только это событие будет запущено, я хочу изменить воспроизводимую в данный момент звуковую дорожку на sel .

+0

BTW Мне удалось разобрать и найти доступный список языковых дорожек, доступных в исходном файле манифеста. – Tarun

+0

Если S.Type = Windows.Media.MediaStreamType.Audio Then 'languages.Add (count.ToString, S. Атрибуты ("Name")) «listLanguages.Add (S.Attributes ("Name") Language = Новый язык() Language.LanguageId = кол- Language.LanguageName = S.Attributes ("Name"). ToString listLanguages.Add (Язык) count = count + 1 End If – Tarun

+0

В основном я надеялся создать что-то вроде этого. http://player.smooth.vertigo.com/, Попробуйте с исходным видео как http: // ecn .chann el9.msdn.com/o9/content/smf/smoothcontent/elephantsdream/Elephants_Dream_1024-h264-st-aac.ism/manifest – Tarun

ответ

3

Я предлагаю использовать Silverlight Media Framework, это действительно упрощает разработку видео приложений. Вы можете скачать его исходный код здесь: http://smf.codeplex.com/downloads/get/386528.

Однако, вы можете сделать некоторые вещи без рамок

  • Как я могу обнаружить в настоящее время играет язык в видео

Вот код:

var currentSegment = mediaElement.ManifestInfo.Segments[mediaElement.CurrentSegmentIndex.Value]; 
var currentAudioStream = currentSegment.SelectedStreams.Where(i => i.Type == MediaStreamType.Audio).FirstOrDefault() 
  • I хотите изменить текущую звуковую дорожку на выбранную.

Что-то вроде этого:

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); 
} 
+0

Thanx много вихрей, это работает – Tarun

+0

Прохладный! Этот метод работает для меня, вопреки решению с установкой свойства AudioStreamIndex, описанным здесь (http://www.w3.org/WAI/GL/WCAG20-TECHS/SL1.html). Btw, 'AudioStreamCount' всегда возвращает' 1' для меня, даже если есть несколько аудиопотоков. –

2

Если вы используете SMF, здесь является самым простым решением:

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; 
} 

Этот метод должен быть вызван после MediaOpened событий был уволен.

ПРИМЕЧАНИЕ: CultureInfo.ThreeLetterISOLanguageName() метод не существует в Silverlight. Вы можете найти его примерную версию в this answer.