私はAVFoundationがこれらすべてのタグにアクセスできるとは思わないと思います。しかし、ストリームをデバッグする必要があるときは、すべてのトラフィックを傍受するためにカスタムNSURLProtocolを使用します。私はAVPlayerは(「操作は完了できません」など)の良好なエラーメッセージを与えるものではありませんので、時にはそれがNSURLProtocolの良いチュートリアルはここで見つけることができ、生のプレイリストとHTTPレスポンスを確認するために
より良いことだと思う:https://www.raywenderlich.com/59982/nsurlprotocol-tutorial
まずURLローディングシステムは、あなたが[NSURLProtocol registerClass:/* your class */]
を呼び出すことによって、HLS要求を処理し、カスタムURLProtocolで-(void)startLoading
0123を上書きその後
+(BOOL)canInitWithRequest:
+(BOOL)canInitWithRequest:(NSURLRequest *)request {
BOOL handled = [[NSURLProtocol propertyForKey:@"handled" inRequest:request] boolValue];
return [request.URL.pathExtension isEqualToString:@"m3u8"] && !handled;
}
を上書きすることができます知っています
-(void)startLoading {
newRequest = [self.request mutableCopy];
[NSURLProtocol setProperty:@YES forKey:@"handled" inRequest:newRequest];
NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:newRequest
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
/* Inspect response body(playlist) and error */
NSString *responseBody = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
/* Return data and control to AVPlayer*/
[self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];
[self.client URLProtocol:self didLoadData:data];
[self.client URLProtocolDidFinishLoading:self];
}];
[task resume];
}
この情報はどのようにして正確に取得できましたか?あなたはそれを記録しましたか? http://stackoverflow.com/questions/13039577/using-avplayer-in-ios-can-you-know-the-current-ts-file-or-the-current-timestamp? – Larme
いいえ、私はそれを記録するためにチャールズを使用しています。 – RayChen
申し訳ありませんが、詳細を指定できますか?@AshishKakkad – RayChen