Мы успешно настроили субтитры / субтитры в Azure Media Player, который воспроизводит мультимедиа в Интернете.
Но как мы можем настроить его для воспроизведения мультимедиа, управляемого AMS, в iOS для Родной AVPlayer? Мы знаем, что титры / субтитры можно воспроизводить в собственном iOS проигрывателе с файлом Sidecar WebVTT, но является ли файл «transcript.vtt», созданный AMS, файлом Sidecar WebVTT?
Если нет, то как мы можем это сделать? сгенерировать файл бокового файла WebVTT?
Мы реализовали код, приведенный ниже, с доступом к файлу мультимедиа по ссылке AMS и локально загруженным файлом transcript.vtt, но он завершился неудачей.
[EDITED: 20200413 ]
Однако, когда у нас есть локальный файл мультимедиа и локальный файл transcript.vtt, или когда мы напрямую обращаемся к файлу мультимедиа в учетной записи хранения мультимедиа (https://mediastorageaccount.blob.core.windows.net/container/file.mp4), он работает нормально. Но когда мы получаем доступ к зашифрованному файлу по ссылке, сгенерированной AMS Transform (https://mediaservice-inct.streaming.media.azure.net/788888-6666-4444-aaaa-823422j218/file.ism/manifest (format = m3u8-cmaf) ), это не удается.
Что здесь не так?
func playVideo()
{let strUrl = "https://mediaservice-inct.streaming.media.azure.net/79510-6eb-340-a90-824218/German-FAST_Lesson-2-Dialog.ism/manifest (format = m3u8-cmaf) "
localVideoAsset = AVURLAsset(url: URL(string: strUrl)!)
//We have to add tracks in AVMutableComposition same like bellow
//First we have to add video track on AVMutableComposition
let videoTrack = videoPlusSubtitles.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
do{
guard localVideoAsset!.tracks.count > 0 else{
// error msg
return
}
try? videoTrack?.insertTimeRange(CMTimeRangeMake(start: CMTime.zero, duration: localVideoAsset!.duration),
of:localVideoAsset!.tracks(withMediaType: .video)[0],
at: seconds)
}
//After that we have to add subtitle track in AVMutableComposition
if isEnglishSubtitle {
setSubtitleTrack(subtitle: "transcript")
}else{
setSubtitleTrack(subtitle: "transcript_tr")
}
//After set the video track and subtitle track we have to set in the player same like bellow
player = AVPlayer(playerItem: AVPlayerItem(asset: videoPlusSubtitles))
playerLayer.removeFromSuperlayer()
playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.videoView.bounds
playerLayer.videoGravity = .resizeAspect
self.videoView.layer.addSublayer(playerLayer)
player.play()
}
fun c setSubtitleTrack ( subtitle: String) {print (субтитры) print (секунды)
//Here we have to check if any pre track available. If available then we have to remove it same like bellow
if subtitleTrack != nil{
videoPlusSubtitles.removeTrack(subtitleTrack!)
}
//We have to get subtitle file from path same like bellow
let subtitleAsset = AVURLAsset(url: Bundle.main.url(forResource: subtitle, withExtension: ".vtt")!)
// And we have to add new track from here
subtitleTrack = videoPlusSubtitles.addMutableTrack(withMediaType: .text, preferredTrackID: kCMPersistentTrackID_Invalid)
do{
guard subtitleAsset.tracks.count > 0 else{
//error msg
return
}
try? subtitleTrack?.insertTimeRange(CMTimeRangeMake(start: CMTime.zero, duration: localVideoAsset!.duration),
of:subtitleAsset.tracks(withMediaType: .text)[0],
at: seconds)
}
}