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

由于我们无法将隐藏式字幕数据或字幕数据从AVPlayer中取出,因此我们正在查看其他触发方法,例如时间码或至less是当前活动的.ts文件的知识。 我在文档中找不到任何东西,播放器的CMTime不会给我embeddedm3u8文件的时间码。

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就是我所知道的,或者至less是活动的.ts文件的名称。

谢谢!

你只需要:

  1. 子类NSURLProtocol与您实现的类(请参阅Apple上的NSURLProtocol类参考,以了解它是如何工作的)。 你有一个NSURLProtocol的方法,你可以看到拦截的请求

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

只要在它内部注册请求,并返回NO,因为你只是想logging它,而不是通过启动NSLLProtocol API的另一种方法startLoading方法来处理它。

  1. 一旦完成,你必须注册你的NSURLProtocol到didFinishLaunching方法到你的AppDelegate.m / .swift(无论…),通过添加这个指令:NSURLProtocol.registerClass(MySubclassProtocol)

  2. 启动你的播放器,你通常应该看到login到你的debugging控制台的所有请求。

希望能帮助到你

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

这个问题稍作更新。 一个小技巧来获取有关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

Interesting Posts