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 的 QTMovie
。 QTMovie
具有 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)的主要内容,如果未能解决你的问题,请参考以下文章
Pandas:如何测试 top-n-dataframe 是不是真的来自原始数据框