2014-08-27 3 views
1

Мне нужно переключить звуковую дорожку в полученном потоке видео в формате m3u8, как я могу это сделать? Возможно? Как их обнаружить? (Я получить поток СВУ, 10seconds сегменты .ts, формат MPEG-2, транспортный поток)Как переключить звуковую дорожку в потоке видео m3u8?

+0

Вы хотите только воспроизвести звук из видеофайла m8u3? – tnylee

+0

Нет, аудио и видео вместе, но также могут переключаться между аудиозаписями) – Nubaslon

+0

Ваша ссылка m3u8 должна содержать как аудио, так и видео. то просто используйте медиаплеер, чтобы играть с этой ссылкой – tnylee

ответ

0

На основании этого вопроса:

Alternate audio tracks with HTTP Live Streaming

мне удалось получить звуковые дорожки из потока HLS закодированы Fairplay (я извлекаю треки после декодирования содержимого). Поток имеет два разных аудио, английский и испанский, поэтому я использую словарь для хранения каждого звука, извлеченного из потока HLS, и облегчения переключения между ними.

Каждое аудио представлено объектом AVMediaSelectionOption, и это объект, который вы должны передать объекту AVPlayerItem (в методе выбора) для переключения звука.

let mediaSelectionGroup = self.player!.currentItem!.asset.mediaSelectionGroup(forMediaCharacteristic: AVMediaCharacteristicAudible)! 
     print("ASSET AUDIO TRACKS: \(mediaSelectionGroup)") 

self.mediaSelectionOptions = Dictionary<String, AVMediaSelectionOption>() 

    for mediaSelectionOption in self.mediaSelectionGroup!.options { 
     if let locale = mediaSelectionOption.locale, let languageCode = locale.languageCode { 
      if languageCode == "en" { 
       self.mediaSelectionOptions!["Inglés"] = mediaSelectionOption 
      } else if languageCode == "es" { 
       self.mediaSelectionOptions!["Español"] = mediaSelectionOption 
      } 
     } 
    } 

// Set Spanish audio 
self.player!.currentItem!.select(
       self.audioManager!.mediaSelectionOptions!["Español"], 
       in: mediaSelectionGroup 
      ) 

// Set English audio 
self.player!.currentItem!.select(
       self.audioManager!.mediaSelectionOptions!["Inglés"], 
       in: mediaSelectionGroup 
      ) 

Надеюсь, это поможет!