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 类参考以了解它是如何工作的)。您有一个 NSURLProtocol 附带的方法,您可以在其中看到截获的请求

(BOOL)canInitWithRequest:(NSURLRequest *) 请求。

只需在其中记录您的请求并返回 NO,因为您只想记录它而不是通过启动 startLoading 方法(来自 NSURLProtocol API 的另一种方法)来处理它。

  1. 完成此操作后,您必须通过添加以下指令将您的 NSURLProtocol 注册到 didFinishLaunching 方法到您的 AppDelegate.m / .swift (无论如何......): NSURLProtocol.registerClass(MySubclassProtocol)

  2. 启动您的播放器,您应该会看到所有请求通常都已登录到您的调试控制台。

希望能帮助到你

于 2015-08-07T16:33:26.133 回答
0

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

于 2012-10-30T18:05:08.547 回答
0

关于这个主题的轻微更新。获取有关 AVPlayer 正在加载的当前 .ts 的更多信息的一个小技巧是在 AppDelegate 的 didFinishLaunching 方法中注册,这是一个 NSURLProtocol 对象

-> 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 回答