gpt4 book ai didi

avfoundation - 是否可以在没有文件扩展名的情况下使 AVURLAsset 工作?

转载 作者:行者123 更新时间:2023-12-03 21:48:25 34 4
gpt4 key购买 nike

我正在尝试为视频文件创建缩略图:

- (UIImage*) thumbnailForVideoAtURL: (NSURL*) videoURL
{
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset];
CGImageRef imageHandle = [generator copyCGImageAtTime:kCMTimeZero actualTime:NULL error:NULL];
if (imageHandle) {
UIImage *frameImage = [UIImage imageWithCGImage:imageHandle];
CFRelease(imageHandle);
return frameImage;
} else {
return nil;
}
}

问题是视频文件存储在 content-addressable store并且没有扩展名。这似乎抛出 AVURLAsset关闭,因为 Assets 被创建,但在读取帧图像时,我收到以下错误:
Error Domain=AVFoundationErrorDomain Code=-11828 "Cannot Open" UserInfo=0x167170 {NSLocalizedFailureReason=This media format is not supported., NSUnderlyingError=0x163a00 "The operation couldn’t be completed. (OSStatus error -12847.)", NSLocalizedDescription=Cannot Open}

这是在某处记录或提到的吗?我不敢相信我真的被迫通过文件名传递文件格式信息。 options AVURLAsset 的参数初始化程序看起来是提供文件类型的好地方,但根据文档,似乎没有任何支持。

PS。我已经测试了代码,具有正确扩展名的相同文件可以很好地生成缩略图。

最佳答案

let mimeType = "video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\""
let asset = AVURLAsset(url: videoURL!, options:["AVURLAssetOutOfBandMIMETypeKey": mimeType])
let playerItem = AVPlayerItem(asset: asset)
avPlayer = AVPlayer(playerItem: playerItem)
self.avPlayerViewConroller?.player = avPlayer
playerItem.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions(), context: nil)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?)
{
if(avPlayer?.currentItem?.status == AVPlayerItemStatus.readyToPlay)
{
avPlayer?.play()
}
}

关于avfoundation - 是否可以在没有文件扩展名的情况下使 AVURLAsset 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9290972/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com