我想使用 AVFoundation 在osx上显示视频。我想在运行时从原始数据初始化电影。根据此文档:https://developer.apple.com/library/mac/#technotes/tn2300/_index.html AVAsset
相当于 QTKit QTMovie
。 QTMovie
具有从数据加载视频的功能movieWithData:error:
,而我在AVAsset
中找不到类似的内容。那么,是否有可能在 AVFoundation 中做同样的事情?
谢谢
答案 0 :(得分:2)
NSString *tempFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tmp.mp3"];
NSFileManager *manager = [NSFileManager defaultManager];
[manager createFileAtPath:tempFilePath contents:mp3Data attributes:nil];
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:tempFilePath] options:nil];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[manager removeItemAtPath:tempFilePath error:nil];
});
答案 1 :(得分:1)
我担心从原始数据初始化AVAsset
实例的唯一可能性是将数据保存为文件。 AVAsset
及其子类仅在其构造函数中使用URL。
答案 2 :(得分:0)
可以通过AVAsset
实现从NSData
创建AVAssetResourceLoaderDelegate
。
具体实现:
func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool
它必须:
loadingRequest.contentInformationRequest.contentType = AVFileType.mycontenttype.rawValue