Azure AMS: как получить Sidecar WebVTT для отображения титров / субтитров в собственном плеере iOS?

Мы успешно настроили субтитры / подписи в проигрывателе мультимедиа Azure, который воспроизводит мультимедиа на веб-стороне.

Но как нам настроить то же самое для воспроизведения мультимедиа, управляемого AMS, в iOS для Native AVPlayer? Мы знаем, что титры / субтитры можно воспроизводить в родном проигрывателе iOS с помощью файла Sidecar WebVTT, но является ли файл "transcript.vtt" сгенерированным AMS файлом Sidecar WebVTT?

Если нет, то как нам создать сопроводительный файл WebVTT?

Мы реализовали код, показанный ниже, с доступом к медиа-файлу по ссылке AMS и локально загруженному файлу transcript.vtt, но это не удается.

[ИЗМЕНИТЬ: 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()

}

func setSubtitleTrack(subtitle: String){print (subtitle) print (seconds)

    //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)
    }

}

1 ответ

Я подозреваю, что проблема не в потоке AMS. Чтобы дважды проверить, вы можете попробовать использовать другой поток HLS(например, попробуйте HLS, предоставленный Apple). У Apple есть особые требования для воспроизведения VTT в AVPlayer. Я включил ссылку на документ Apple, в которой есть много примеров потоковой передачи, и другие ссылки, которые могут быть полезны:

https://developer.apple.com/streaming/examples/

Как добавить внешний файл субтитров.vtt в AVPlayerViewController в tvOS

AVUrlAsset и WebVTTs

Другие вопросы по тегам