在iOS中使用AVPlayer可以了解当前的.ts文件或编码器的当前时间戳吗?

时间:2012-10-23 21:29:30

标签: ios avplayer http-live-streaming timecodes

由于我们无法从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文件的名称。

谢谢!

3 个答案:

答案 0 :(得分:1)

你必须:

  1. 使用您实现的类子类NSURLProtocol(请参阅Apple上的NSURLProtocol类参考以了解它是如何工作的)。你有一个NSURLProtocol方法,你可以在其中看到截获的请求
  2. (BOOL)canInitWithRequest:(NSURLRequest *)请求。

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

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

      < / LI>
    2. 启动播放器,通常会看到所有请求都登录到调试控制台。

    3. 希望有所帮助

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

- &GT; NSURLProtocol.registerClass(MyURLProtocol)

这使您有机会看到所有请求转移到您的应用中,从而查看播放器加载片段的时间:

2015-06-04 10:57:13.172 MyApp [924:310b]收到了网址请求: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]获得了网址请求:http://livestream.net/channel/channel.isml/events(1433260048)/channel-audio_1=128000-video=1600000-143341543.ts