Web 側でメディアを再生する Azure Media Player で字幕/キャプションを正常に構成しました。
しかし、ネイティブ AVPlayer の iOS で AMS によって管理されるメディアを再生するために、同じように構成するにはどうすればよいでしょうか? Sidecar WebVTT ファイルを使用してネイティブ iOS プレーヤーでキャプション/字幕を再生できることはわかっていますが、AMS によって生成された「transcript.vtt」ファイルは Sidecar WebVTT ファイルですか?
そうでない場合、サイドカー WebVTT ファイルをどのように生成しますか?
AMS リンクからアクセスされるメディア ファイルと、ローカルにダウンロードされたtranscript.vtt ファイルを使用して、以下のコードを実装しましたが、失敗します。
[編集: 20200413]
ただし、ローカル メディア ファイルとローカル トランスクリプト.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)
}
}