5

私はビデオをストリーミングするためにm3u8ビデオフォーマットを使用しています。今は同じ字幕を表示する必要があります。AVPlayer/MPMoviePlayerControllerの字幕

Apple Documentationで検索したところ、closedCaptionDisplayEnabledというプロパティーをAVPlayerに設定すると、これを実現できます。

私は何が字幕のフォーマットであるべきかを知りたいですか? .srt形式はありますか?

また、MPMoviePlayerControllerを使用して同じことを達成できますか?

何か助けていただければ幸いです。

+0

http://stackoverflow.com/questions/11312118/show-subtitles-with-an-avfoundation-avplayer-on-os-xとhttp://stackoverflow.com/questions/5662635/showを参照してください。 -subtitles-in-a-mpmovieplayerviewcontroller-by-default – Till

+0

Appleのドキュメントは、この点についての正確な言葉遣いに苦しんでいます。 'closedCaptionDisplayEnabled'" [i]は、プレーヤーがクローズドキャプションを使用しているかどうかを示します。 "字幕については何も言わない。私のテスト(OS X上)では、そのプロパティは字幕に何の影響も与えません。それは*のみ*クローズドキャプションで動作します。 (EyeTVを使って字幕付きのテレビを録画し、それをiPhoneとMPEG-2の多重化形式にエクスポートし、HandBrakeで後者を変換することで、これを自分でテストすることができます)EyeTVからiPhoneへのエクスポートにはCCトラック、HandBrakeリップ字幕トラックがあります。) –

答えて

2

AVPlayerとMPMoviePlayerControllerの両方で字幕を表示できます。

違いは、AVPlayerでは、closedCaptionDisplayEnabledプロパティを使用して字幕を表示するかどうかを制御するように見えます。

MPMoviePlayerControllerでは、設定アプリでスイッチを使用して字幕を表示するかどうかを制御します。あなたは、アプリのこれのプログラム的なコントロールを取得します。

+2

'closedCaptionDisplayEnabled'は、字幕ではなく字幕を切り替えます。それらは2つの異なるものであり、そのプロパティは字幕に影響しません。 (注意すべき点は、iOSではなくOS Xでのみ試したことです) –

0

WWDC 2013 iOSアプリケーションは、WebVTTファイルを字幕(credit to Nicholas Riley for discovering this)に使用します。何らかの理由で、セッションごとに約50(正確な数は異なる)があります。

WebVTTがAVFoundationまたはMPMoviePlayerレベルでサポートされているかどうか、またはアプリケーションが字幕ファイル自体をダウンロードして解析するかどうかはわかりません。

「webvttのM3U8」のためのクイック検索を使用すると、単にあなたM3U8プレイリストにWebVTTファイルを参照することによって、この作品を作ることができることを示唆している、this HTTP Live Streaming Draftへの参照を上げ。しかし、WWDCセッションのm3u8 URLを自明に推測することができなかったので、私はあなたのための例を持っていません。

10

m3u8ストリーミング記述のWebVTTファイルを参照することは正式にサポートされているようです。 「事後に」追加することは正式にはサポートされていないようです(this statement by an Apple engineer (bottom of the page)参照)。

しかし、それはあなたがそれを動作させることができないというわけではありません;-)。 this great presentationsample project (ZIP)の助けを借りて、Chris Adamson、this post on the Apple Developer Forumsthis Ray Wenderlich tutorial by Abdul Azeemによって、私はそれを動作させることができました。これは、Abdul AzeemのサンプルコードとChrisのサンプルプロジェクトの修正版です。

AVMediaTypeSubtitleの代わりにAVMediaTypeTextをどのように使用する必要があるか注意してください。これはiOSのバグのようです。

// 1 - Load video asset 
AVAsset *videoAsset = [AVURLAsset assetWithURL:[[NSBundle mainBundle] URLForResource:@"video" withExtension:@"mp4"]]; 

// 2 - Create AVMutableComposition object. This object will hold your AVMutableCompositionTrack instances. 
AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init]; 

// 3 - Video track 
AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo 
                    preferredTrackID:kCMPersistentTrackID_Invalid]; 
[videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) 
        ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
        atTime:kCMTimeZero error:nil]; 

// 4 - Subtitle track 
AVURLAsset *subtitleAsset = [AVURLAsset assetWithURL:[[NSBundle mainBundle] URLForResource:@"subtitles" withExtension:@"vtt"]]; 

AVMutableCompositionTrack *subtitleTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeText 
                     preferredTrackID:kCMPersistentTrackID_Invalid]; 

[subtitleTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) 
         ofTrack:[[subtitleAsset tracksWithMediaType:AVMediaTypeText] objectAtIndex:0] 
         atTime:kCMTimeZero error:nil]; 

// 5 - Set up player 
AVPlayer *player = [AVPlayer playerWithPlayerItem: [AVPlayerItem playerItemWithAsset:mixComposition]]; 
+0

素晴らしい投稿をいただきありがとうございます。メタデータをどのように設定することができるかをご説明ください。 (NSCopying&NSObjectProtocol)として titleMetadataItem.locale = NSLocale.current titleMetadataItem.key = AVMetadataCommonKeyTitle titleMetadataItem = AVMutableMetadataItem()しましょうか? titleMetadataItem.keySpace = AVMetadataKeySpaceCommon titleMetadataItem.value = self.assetObject.title as(NSCopying&NSObjectProtocol)? –

+0

@Johannes Fahrenkrug:このソリューションはリモートm3u8プレイリストからの実際のHLSストリームで動作しますか?私は運がないスイフトでそれをやろうとしています。私の投稿を確認してください:http://stackoverflow.com/questions/43161124/how-to-add-external-webvtt-subtitles-into-http-live-stream-on-ios-clientありがとう! –

+0

@MartinKoles私はそれがうまくいくと思います。見つけ出す最良の方法は、試してみることです:)多分あなたの結果をここに掲載することができます! –

関連する問題