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

Posted

技术标签:

【中文标题】Cocoa:来自原始数据的 AVAsset(即 NSData)【英文标题】:Cocoa: AVAsset from raw data (i.e. NSData) 【发布时间】:2012-09-30 07:38:04 【问题描述】:

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

谢谢

【问题讨论】:

【参考方案1】:
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];
        );

【讨论】:

这没有回答问题,它只是展示了如何将NSData 写入一个临时文件并从中初始化一个AVAsset【参考方案2】:

恐怕从原始数据初始化AVAsset 实例的唯一可能性是将之前的数据保存为文件。 AVAsset 及其子类仅在其构造函数中使用 URL。

【讨论】:

【参考方案3】:

可以通过AVAssetResourceLoaderDelegate 实现从NSData 创建AVAsset

具体实现:

func resourceLoader(_ resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool

必须:

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

【讨论】:

怎么做?我怎样才能找到你的示例代码?谢谢。

以上是关于Cocoa:来自原始数据的 AVAsset(即 NSData)的主要内容,如果未能解决你的问题,请参考以下文章

迪家︱COCOA来自热带雨林的呼唤

Pandas:如何测试 top-n-dataframe 是不是真的来自原始数据框

去COCOA家乡走一趟

UIActivity 和 AVAsset 数据类型使用

Swift 3 将数据转换为 AVAsset 或 PHAsset

从原始数据创建 AVPlayer 或以不同格式将视频保存到 PFFile