【问题标题】:m3u8 file AVAssetImageGenerator errorm3u8 文件 AVAssetImageGenerator 错误
【发布时间】:2015-11-13 17:44:13
【问题描述】:

我正在使用 AVPlayer 播放 .m3u8 文件。 使用 AVAssetImageGenerator 使用以下代码从中提取图像:

AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:mp.contentURL options:nil];
AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];
generate1.appliesPreferredTrackTransform = YES;
NSError *err = NULL;
CMTime time = CMTimeMake(1, 2);
CGImageRef oneRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err];
img = [[UIImage alloc] initWithCGImage:oneRef];

它总是给我错误:

Error Domain=AVFoundationErrorDomain Code=-11800“操作无法完成” UserInfo=0x7fb4e30cbfa0 {NSUnderlyingError=0x7fb4e0e28530“操作无法完成。(OSStatus错误-12782。)”,NSLocalizedFailureReason=发生未知错误(-12782), NSLocalizedDescription=操作无法完成}

它适用于 mp4、mov 和所有主要的视频扩展 URL,但不适用于 m3u8。有什么想法吗??

【问题讨论】:

  • mp 不为空?你能分享资产吗?
  • 还有一点你的代码......
  • 已添加代码@Daij-Djan
  • @objectivecdeveloper 这个运气好吗?现在我遇到了同样的要求。

标签: ios avfoundation avplayer avassetimagegenerator


【解决方案1】:

您的问题是意料之中的。 .m3u8 文件不是实际的资产文件,而是更类似于播放列表。它们用于 HTTP Live Streaming,并根据可用带宽为“Segments”提供位置。

这是 .m3u8 文件的示例 (Apple's sample .m3u8 file)

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000
gear1/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=311111
gear2/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=484444
gear3/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=737777
gear4/prog_index.m3u8

很遗憾,您无法创建 AVAsset 或 AVURLAsset 来表示 HTTP 直播流中的媒体。参考:Apple's reference example of Asset Loading/playing

【讨论】:

  • 同意,但如果我需要截图怎么办?你知道其他方法吗?
【解决方案2】:

您将无法使用 AVAssetImageGenerator 获取实时流的静止图像。相反,您可以使用

AVPlayerItemVideoOutput

使用 AVPlayerItemVideoOutput,您可以使用以下方法为给定的 .m3u8 流获取适合在指定时间显示的图像:- (CVPixelBufferRef)copyPixelBufferForItemTime:(CMTime)itemTime itemTimeForDisplay:(CMTime *)outItemTimeForDisplay 然后,您可以将返回的 CVPixelBufferRef 转换为图像(或其他)以进行显示.

【讨论】:

  • 这总是返回 nil。您还需要做些什么才能使其正常工作吗?
【解决方案3】:

我们的发现是,如果您播放具有“仅 I-Frame 播放列表”的 HLS 流,例如流“https://tungsten.aaplimg.com/VOD/bipbop_adv_example_v2/master.m3u8”(仅具有 I-frame 播放列表),AVAssetImageGenerator 可以一一生成请求的图像.

但是请注意“它只在iOS8.X和iOS9.X上可以”,但在iOS10.X上失败了。

我已向 Apple Bug Reporter 提交了一份错误报告。

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 1970-01-01
    • 2018-09-16
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2023-02-03
    相关资源
    最近更新 更多