4

AVPlayer からクローズド キャプション データまたはサブタイトル データを取得できないため、タイムコードや少なくとも現在アクティブな .ts ファイルの知識など、他のトリガー方法を検討しています。ドキュメントには何も見つかりませんでした。プレーヤーからの CMTime は、m3u8 ファイルに埋め込まれているタイムコードを教えてくれません。

NSLog(@"%f", CMTimeGetSeconds([mPlayer currentTime] ) );

私が探しているものではありません。

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:562
#EXT-X-PROGRAM-DATE-TIME:2020-10-23T14:18:59+08:00
#EXTINF:10,
http://aedsgios1-i.akamaihd.net/hls/live/204775/test1-p/mobile600/Seg_102320_124459_1/mobile600_102320_124459_562.ts
#EXT-X-PROGRAM-DATE-TIME:2020-10-23T14:19:09+08:00
#EXTINF:10,

EXT-X-PROGRAM-DATE-TIME は、私が知りたいこと、または少なくともアクティブな .ts ファイルの名前です。

ありがとう!

4

3 に答える 3

1

あなたはただしなければなりません:

  1. 実装するクラスで NSURLProtocol をサブクラス化します (どのように機能するかについては、Apple の NSURLProtocol Class Reference を参照してください)。インターセプトされたリクエストを確認できる NSURLProtocol に付属のメソッドがあります

(BOOL)canInitWithRequest:(NSURLRequest *)リクエスト。

NSURLProtocol API の別のメソッドである startLoading メソッドを起動して処理するのではなく、ログに記録したいだけなので、リクエストをログに記録して NO を返すだけです。

  1. これが完了したら、次の命令を追加して、NSURLProtocol を didFinishLaunching メソッドに AppDelegate.m / .swift (何でも...) に登録する必要があります: NSURLProtocol.registerClass(MySubclassProtocol)

  2. プレーヤーを起動すると、通常、すべてのリクエストがデバッグ コンソールに記録されます。

それが役に立てば幸い

于 2015-08-07T16:33:26.133 に答える
0

この件について少し更新。AVPlayer がロードしている現在の .ts に関する詳細情報を取得するためのちょっとしたトリックは、NSURLProtocol オブジェクトである AppDelegate の didFinishLaunching メソッドに登録することです。

-> NSURLProtocol.registerClass(MyURLProtocol)

これにより、すべてのリクエストがアプリに送信されるのを確認でき、その結果、プレーヤーによってセグメントが読み込まれるタイミングを確認できます。

2015-06-04 10:57:13.172 MyApp[924:310b] URL の要求を取得: http://livestream.net/channel/channel.isml/events(1433260048)/channel-audio_1=128000-video=1600000. m3u8 2015-06-04 10:57:13.182 MyApp[924:6a07] URL の要求を取得: http://livestream.net/channel/channel.isml/events(1433260048)/channel-audio_1=128000-video=1600000 -143341543.ts

于 2015-06-04T10:04:14.117 に答える
0

NSLog(@"%@", [[mPlayer currentItem] currentDate ]);

于 2012-10-30T18:05:08.547 に答える