相关疑难解决方法(0)

AVPlayerItem失败,AVStatusFailed,错误代码"无法解码"

我遇到了一个奇怪的问题,我希望有人可以提供帮助.

在我的iOS应用程序中,我MutableComposition通过组合用户照片库中的视频和应用程序包中的音频文件来创建带有自定义音轨的视频.然后,我使用一个AVPlayerAVPlayerItem使用我制作的自定义视频播放器将视频播放回用户.

每次创建新的合成时,资产,播放器和合成都会被清除,释放,并且它基本上从干净的初始状态开始.

一切正常,直到完成4个成功的视频创建后,每次创建播放器的其他尝试都会失败并出现错误Cannot Decode.如果我正在重新创建的视频相同,与视频的大小/长度无关,或者音频文件与第五次尝试完全失败,就像发条一样无关紧要.一旦失败,它将永远失败!

这很奇怪,因为它只是对同一个视频进行了四次解码而没有任何问题,所以突然间它失败了?所以,如果有人有线索,请告诉我.

iphone avfoundation ios avplayer

32
推荐指数
3
解决办法
2万
查看次数

无缝循环AVPlayer

之前已经讨论过如何循环AVPlayer播放视频项目,但没有"解决方案"足够无缝以提供无延迟的视频循环.

我正在开发一个tvOS应用程序,它的一个视图背景中有一个高质量的10秒"风景"剪辑,只需重新启动它的AVPlayer"标准"方式(订阅NSNotification捕获它)太疯狂了注意并减损用户体验.

似乎实现真正无缝循环的唯一方法是在较低级别(在OpenGL中)手动管理帧...

尽管我已尽最大努力阅读此内容,并且作为操纵视频流水线的新手,我还没有达到一个易于理解的解决方案.

我知道存在外部库可以更容易地执行此行为; 最值得注意的是GPUImage.但是,我正在开发的应用程序是针对tvOS的,因此很难使用相当多的第三方iOS库,包括GPUImage.我遇到的另一个库是AVAnimator,它为轻量级动画视频提供了强大的功能,但不能用于.H264中编码的源素材的密集,高质量视频剪辑.

到目前为止,我最接近的是Apple自己的AVCustomEdit源代码,但这主要涉及静态生成"过渡",虽然无缝,但过于复杂,我无法辨别如何使其执行简单的循环功能.

如果任何人都可以在AVPlayer较低级别操作,即使用图像处理/缓冲区(或者不依赖于外部库的iOS开发),我会非常有兴趣知道如何开始.

video opengl-es avfoundation ios tvos

6
推荐指数
2
解决办法
8204
查看次数

如何正确使用 AVPlayer 使其在播放视频前不显示白屏?

每次,当我尝试使用 播放兆字节视频时AVPlayer,它首先会显示一秒钟的白屏,然后开始播放视频。

如果视频已经缓存,为什么会发生这种情况?有没有办法阻止这种情况发生,以便它直接进入视频而不显示白屏?

我尝试使用AVPlayer'sisReady检查视频的状态AVPlayer并仅在视频准备就绪时播放视频,但它仍然显示白屏。

另外,每次当我尝试获取即将播放的视频的视频持续时间时,AVPlayer我最初都会得到 0.0 秒,所以我也无法向视频添加计时器,因为我无法获取视频持续时间,因为它持续显示白屏一秒钟。

video objective-c avfoundation ios snapchat

5
推荐指数
1
解决办法
5010
查看次数

从一个视频切换到另一个视频时出现白色闪烁 iOS 13 及更高版本 swift

我正在使用 AVQueuePlayer 循环播放所有选定的视频或通过滑动手势更改视频。

但是当我实现流程时,当用户滑动将视频从一个视频更改为另一个视频时,会出现黑框。因此,为了克服这个问题,我使用了 UIImageView。

我所做的是,当用户滑动下一个视频时,我处理当前时间的视频并拍摄相同的图像并初始化为 imageview 直到下一个视频在队列中可用。下面是用于实现此解决方案的代码

var player : AVQueuePlayer?
var playerItem: [AVPlayerItem] = []

    let tempCurrentIndex = currentIndex
    let tempPlayerItems = self.playerItem

    guard let currentAssest = self.player?.currentItem?.asset else {return}

    let playerCurrentTime = CMTimeGetSeconds(player!.currentTime())
    let newTime = playerCurrentTime + 0.0
    self.player?.pause()

    self.imgvwFlick.image = UIImage()

    self.imgvwFlick.image = self.getFrame(asset: currentAssest, time: newTime)

    self.player?.removeAllItems()
    for i in tempCurrentIndex + 1..<tempPlayerItems.count {
        tempPlayerItems[i].seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero, completionHandler: nil)
        self.player?.insert(tempPlayerItems[i], after: nil)
    }

    self.player?.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero)
    self.currentIndex = …
Run Code Online (Sandbox Code Playgroud)

video ios avplayer swift avplayeritem

5
推荐指数
0
解决办法
521
查看次数

iOS - 创建多个延时实时相机预览视图

我已经进行了大量研究,但由于多种原因尚未找到可行的解决方案,我将在下面概述。


问题

在我的 iOS 应用程序中,我需要三个视图来无限期地显示设备相机的延迟实时预览。

例如,视图1将显示相机视图,延迟5秒,视图2将显示相同的相机视图,延迟20秒,视图3将显示相同的相机视图,延迟30秒。

这将用于记录您自己执行某种活动,例如锻炼练习,然后在几秒钟后观察自己,以完善您的特定练习形式。

尝试过的解决方案

我尝试并研究了几种不同的解决方案,但都有问题。

1. 使用AVFoundationAVCaptureMovieFileOutput

  • 使用AVCaptureSessionAVCaptureMovieFileOutput将短片录制到设备存储中。需要短剪辑,因为您无法播放 URL 中的视频,并同时写入同一 URL。
  • 有 3AVPlayerAVPlayerLayer实例,全部按所需的时间延迟播放录制的短片。
  • 问题:
    1. 使用 切换剪辑时AVPlayer.replaceCurrentItem(_:),剪辑之间存在非常明显的延迟。这需要一个平稳的过渡。
    2. 虽然很旧,但这里的评论建议AVPlayer由于设备限制不要创建多个实例。我还没有找到证实或否认这一说法的信息。E:根据 Jake G 的评论 -AVPlayer对于 iPhone 5 及更新版本来说 10 次就可以了。

2. 使用AVFoundationAVCaptureVideoDataOutput

  • 使用AVCaptureSessionAVCaptureVideoDataOutput来通过委托方法流式传输和处理摄像机输入的每一帧didOutputSampleBuffer
  • 在 OpenGL 视图上绘制每个帧(例如GLKViewWithBounds)。AVPlayer这解决了来自 的多个实例的问题Solution 1.
  • 问题:存储每个帧以便稍后显示需要大量内存(这在 iOS 设备上不可行)或磁盘空间。如果我想以每秒 30 …

camera video-capture video-processing avfoundation ios

4
推荐指数
1
解决办法
1403
查看次数