ビデオのストリーミングに m3u8 ビデオ形式を使用していますが、同じ字幕を表示する必要があります。
Apple ドキュメントを検索したところ、 のclosedCaptionDisplayEnabled
プロパティを使用してこれを実現できることがわかりましたAVPlayer
。
字幕の形式を知りたいのですが?.srt 形式で対応できますか?
また、を使用して同じことを達成できMPMoviePlayerController
ますか?
どんな助けでも大歓迎です。
ビデオのストリーミングに m3u8 ビデオ形式を使用していますが、同じ字幕を表示する必要があります。
Apple ドキュメントを検索したところ、 のclosedCaptionDisplayEnabled
プロパティを使用してこれを実現できることがわかりましたAVPlayer
。
字幕の形式を知りたいのですが?.srt 形式で対応できますか?
また、を使用して同じことを達成できMPMoviePlayerController
ますか?
どんな助けでも大歓迎です。
これは@JohannesFahrenkrug answerの Swift バージョンです。これが誰かに役立つことを願っています:
let localVideoAsset = Bundle.main.url(forResource: "L1C1P1C3", withExtension: "mp4")
//Create AVMutableComposition
let videoPlusSubtitles = AVMutableComposition()
//Adds video track
let videoTrack = videoPlusSubtitles.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
try? videoTrack?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, localVideoAsset.duration),
of: localVideoAsset.tracks(withMediaType: .video)[0],
at: kCMTimeZero)
//Adds subtitle track
let subtitleAsset = AVURLAsset(url: Bundle.main.url(forResource: "L1C1P1C3", withExtension: ".mp4.vtt")!)
let subtitleTrack = videoPlusSubtitles.addMutableTrack(withMediaType: .text, preferredTrackID: kCMPersistentTrackID_Invalid)
try? subtitleTrack?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, localVideoAsset.duration),
of: subtitleAsset.tracks(withMediaType: .text)[0],
at: kCMTimeZero)
AVPlayer と MPMoviePlayerController の両方で字幕を表示できます。
違いは、AVPlayer では、closedCaptionDisplayEnabled プロパティを使用して字幕を表示するかどうかを制御することです。
MPMoviePlayerController では、ユーザーが設定アプリのスイッチを使用して字幕を表示するかどうかを制御します。アプリでこれをプログラムで制御することはできません。
WWDC 2013 iOS アプリは、字幕に WebVTT ファイルを使用します (これを発見した Nicholas Riley の功績によるものです)。何らかの理由で、各セッションには約 50 (正確な数は異なります) があります。
WebVTT が AVFoundation または MPMoviePlayer レベルでサポートされているかどうか、またはアプリが字幕ファイル自体をダウンロードして解析するかどうかはわかりません。
「webvtt m3u8」をすばやく検索すると、この HTTP Live Streaming Draftへの参照が見つかりました。これは、m3u8 プレイリスト内の WebVTT ファイルを参照するだけで、これを機能させることができる可能性があることを示唆しています。ただし、WWDC セッションの m3u8 URL を自明に推測できなかったため、例はありません。