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

Мы успешно настроили субтитры / субтитры в 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)
    }

}

1 Ответ

0 голосов
/ 26 марта 2020

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

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

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

AVUrlAsset и WebVTTs

...