【发布时间】:2017-01-03 11:33:50
【问题描述】:
我为我的 ios 应用创建了一个共享扩展。当我单击照片应用程序中的共享选项时,会显示我的共享扩展名,然后单击它并显示我的控制器。一切都很好。我正在使用 youtube api 将视频上传到 youtube。我正在使用这种方法来创建参数
GTLUploadParameters *uploadParameters = [GTLUploadParameters uploadParametersWithData:fileData MIMEType:@"video/*"];
现在,如果视频很小,则可以使用此代码轻松将其转换为 NSData
NSData *fileData = [NSData dataWithContentsOfURL:[NSURL URLWithString:videoURL]];
一切正常,视频已上传。
但是如果视频很大,那么它只会崩溃并退出共享扩展(我设置了断点并发现了这个问题。如果我删除了 fileData 转换,那么它不会崩溃。)。所以我所做的不是将其转换为 NSData 我使用了这个 youtube api 方法
GTLUploadParameters *uploadParameters = [GTLUploadParameters uploadParametersWithFileURL:[NSURL URLWithString:videoURL] MIMEType:@"video/*"];
现在应用程序没有崩溃,但出现网络错误。错误是
错误域=NSURLErrorDomain Code=-995 "(null)"
小搜索发现是因为NSURLSession,被告知要使用这样的东西
sessionConfiguration.sharedContainerIdentifier = @“com.me.myapp.containerIdentifier”;
我正在使用 youtube api。我不确定在哪里使用它,或者是否有任何其他方式可以在大型视频文件的共享扩展中使用 youtube api。
注意:我在我的应用程序中使用了 youtube api,它与 NSData 一起工作正常。
希望问题很清楚。我现在坚持了一天。请帮忙。
提前致谢。
编辑 1:
我用过这段代码
NSData *fileData = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:videoURL] options:0 error:&error];
文件数据为零。我得到的错误是
错误域=NSCocoaErrorDomain 代码=260 "文件“IMG_2187.MOV” 无法打开,因为没有这样的文件。” UserInfo={NSFilePath=/file:/var/mobile/Media/DCIM/102APPLE/IMG_2187.MOV,
【问题讨论】:
-
NSURLErrorBackgroundSessionRequiresSharedContainer(这就是-995错误)让我怀疑后台服务不喜欢引用容器外部的内容。也许尝试将其复制到您的文档或临时文件夹,然后使用uploadParametersWithFileURL从那里使用 fileURL 上传。 -
FWIW,看起来这就是 Sergey 在他的回答中要去的地方......
标签: ios objective-c ios9 nsurlsession youtube-data-api