Cocoa:来自原始数据的AVAsset(即NSData)

时间:2012-09-30 07:38:05

标签: cocoa avfoundation qtkit

我想使用 AVFoundation 在osx上显示视频。我想在运行时从原始数据初始化电影。根据此文档:https://developer.apple.com/library/mac/#technotes/tn2300/_index.html AVAsset相当于 QTKit QTMovieQTMovie具有从数据加载视频的功能movieWithData:error:,而我在AVAsset中找不到类似的内容。那么,是否有可能在 AVFoundation 中做同样的事情?

谢谢

3 个答案:

答案 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

它必须:

  1. 正确填写loadingRequest.contentInformationRequest。提示,使用loadingRequest.contentInformationRequest.contentType = AVFileType.mycontenttype.rawValue
  2. 正确响应数据