gpt4 book ai didi

ios - AVAssetResourceLoader 支持的 AVURLAsset 播放仅通过 AirPlay 失败

转载 作者:可可西里 更新时间:2023-11-01 05:52:12 27 4
gpt4 key购买 nike

出于与我的问题无关的原因,我必须使用自定义 AVAssetResourceLoader 实现 AVPlayer 播放 AVURLAssets。总的来说,我的实现效果很好,但是当尝试通过 AirPlay(不是镜像)进行外部播放时:

 self.player.allowsExternalPlayback = YES;
self.player.usesExternalPlaybackWhileExternalScreenIsActive = YES;

播放失败并在 AppleTV 上显示错误消息,并通过 AVPlayerItemFailedToPlayToEndTimeNotification 发布错误消息。

我能够通过简单的 AVAssetResourceLoader 实现重现相同的问题,该实现简单地分发本地媒体文件(包含在 App Bundle 中)的请求数据。这是我的实现:

- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest; {

AVAssetResourceLoadingDataRequest *dataRequest = loadingRequest.dataRequest;
AVAssetResourceLoadingContentInformationRequest *contentRequest = loadingRequest.contentInformationRequest;

NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"localfile" withExtension:@"mov"];

if (contentRequest)
{
NSString *extension = [fileURL pathExtension];
NSString *contentTypeString = (NSString*)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,(CFStringRef)extension,NULL);

contentRequest.contentType = contentTypeString;
contentRequest.contentLength = [[[NSFileManager defaultManager] attributesOfItemAtPath:[fileURL path] error:nil] fileSize];
contentRequest.byteRangeAccessSupported = YES;
}

if (dataRequest)
{

NSInteger length = [dataRequest requestedLength];
if (length>1024*1024*20)
{
// limiting to 20MB here because iOS sometimes requests the whole file which would not fit in memory
length = 1024*1024*20;
}

NSFileHandle *fh = [NSFileHandle fileHandleForReadingFromURL:fileURL error:nil];
[fh seekToFileOffset:[dataRequest requestedOffset]];
NSData *fileData = [fh readDataOfLength:length];
[dataRequest respondWithData:fileData];
[fh closeFile];
}

[loadingRequest finishLoading];

return YES;}

此代码可直接在设备上正常播放。如果启用 AirPlay,资源加载器将被调用约 4-5 次内容和数据请求,请求项目的前 8kb。然后回调停止,最终我在 Apple TV 上收到一条错误消息和一些 AVPlayerItemFailedToPlayToEndTimeNotifications。第一个通知包含“不支持媒体”错误。

(通过将相同的媒体添加到 AVPlayer 作为基于普通文件的项目播放相同的媒体也可以通过 AirPlay 正常播放)。

任何输入将不胜感激,谢谢!

最佳答案

我现在已经收到 Apple(通过 TSI)对这个问题的回复。使用自定义资源加载器时不支持视频 AirPlay。

关于ios - AVAssetResourceLoader 支持的 AVURLAsset 播放仅通过 AirPlay 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30752659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com