- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个项目,用户可以在其中拍摄视频,然后为他们添加滤镜或更改亮度和对比度等基本设置。为此,我使用 BBMetalImage ,它基本上返回 MTKView 中的视频(在项目中命名为 BBMetalView
)。
一切都很好——我可以播放视频、添加过滤器和所需的效果,但没有音频。我 asked the author关于这个,谁推荐使用 AVPlayer
(或 AVAudioPlayer
)为此。所以我做了。但是,视频和音频不同步。可能首先是因为不同的比特率,并且库的作者还提到帧率可能会因为过滤过程而有所不同(这消耗的时间是可变的):
The render view FPS is not exactly the same to the actual rate. Because the video source output frame is processed by filters and the filter process time is variable.
AVVideoProfileLevelH264HighAutoLevel
如
AVVideoProfileLevelKey
.我的音频配置,使用
NextLevelSessionExporter ,具有以下设置:
AVEncoderBitRateKey: 128000
,
AVNumberOfChannelsKey: 2
,
AVSampleRateKey: 44100
.
self.metalView = BBMetalView(frame: CGRect(x: 0, y: self.view.center.y - ((UIScreen.main.bounds.width * 1.25) / 2), width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.width * 1.25))
self.view.addSubview(self.metalView)
self.videoSource = BBMetalVideoSource(url: outputURL)
self.videoSource.playWithVideoRate = true
self.videoSource.audioConsumer = self.metalAudio
self.videoSource.add(consumer: self.metalView)
self.videoSource.add(consumer: self.videoWriter)
self.audioItem = AVPlayerItem(url: outputURL)
self.audioPlayer = AVPlayer(playerItem: self.audioItem)
self.playerLayer = AVPlayerLayer(player: self.audioPlayer)
self.videoPreview.layer.addSublayer(self.playerLayer!)
self.playerLayer?.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
self.playerLayer?.backgroundColor = UIColor.black.cgColor
self.startVideo()
startVideo()
像这样:
audioPlayer.seek(to: .zero)
audioPlayer.play()
videoSource.start(progress: { (frameTime) in
print(frameTime)
}) { [weak self] (finish) in
guard let self = self else { return }
self.startVideo()
}
MTKView
和我的
AVPlayer
?这对我有很大帮助,我敢肯定
Silence-GitHub
还将将此功能实现到库中以帮助许多其他用户。欢迎任何有关如何解决此问题的想法!
最佳答案
我按如下方式自定义了 BBMetalVideoSource 然后它起作用了:
private func processAsset(progress:, completion:)
, 我把这段代码替换成 if useVideoRate { //... }
经过:if useVideoRate {
if let playerTime = delegate.getAudioPlayerCurrentTime() {
let diff = CMTimeGetSeconds(sampleFrameTime) - playerTime
if diff > 0.0 {
sleepTime = diff
if sleepTime > 1.0 {
sleepTime = 0.0
}
usleep(UInt32(1000000 * sleepTime))
} else {
sleepTime = 0
}
}
}
关于ios - 如何同步 AVPlayer 和 MTKView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58317954/
我在由窗口 Controller 管理的窗口中有一个 MTKView。当我第一次实例化窗口 Controller 和窗口时,MTKView 调用我的委托(delegate)的两个调用,并以首选速率调用
我想在 Mac 应用程序上使用 MTKView。初始化 MTKView 后,它显示红色而不是预期的清晰颜色我的笔记本电脑是 macOS Catalina 10.15.2 的 MacBook Pro,它
我有一个 Metal 片段着色器,它返回一些带有 alpha channel 的透明颜色,我想在 MTKView 下显示一个 UIView,但我得到的背景结果只有黑色和“错误噪声”。 MTLRende
我有一个简单的 macOS 应用程序,它有一个 MTKView——它只是窗口内的一个 MTKView。片段着色器总是这样做: return float4(1, 0, 0, 0.01) 这是带有 1%
我知道在 SceneKit 中,您可以在 SKView 的一侧启用横幅查看实时帧速率和其他有用的调试信息。但是 MTKView 呢? ?我似乎没有找到这样的属性来启用,或者我如何查询当前的帧速率。 (
我正在使用 MTKView 来绘制 Metal 内容。它的配置如下: mtkView = MTKView(frame: self.view.frame, device: device)
我已经成功地创建了一个应用程序来接收实时的 h264 编码视频流,然后使用 Video Toolbox 和 AVSampleBufferDisplayLayer 解码并显示视频。这按预期工作,但我希望
我得到了什么 我正在关注 Apple 示例代码 AVCamPhotoFilter 在 MTKView 上显示相机画面。 我想做什么 除了上面的MTKView,我还需要显示第二个MTKView。但是,第
我是 Metal 的新手,但正在努力遵循 Apple 的 AVCamFilter示例项目。该项目演示了如何使用 MTKView 作为 AVCaptureSession 的预览。 我一直未能弄清楚如何让
我正在尝试实现一个 Metal 支持的绘图应用程序,其中通过沿路径重复冲压纹理正方形在 MTKView 上绘制笔触。我遇到的问题是,虽然每个画笔图章都正确显示了纹理的不透明度,但重叠的方 block
我正在尝试使用 MTKView 进行多重采样。我有一个带有委托(delegate)的 MTKView。我将 View 的 sampleCount 属性设置为 4。我创建了一个将 rasterSampl
众所周知,更新 AppKit 中的用户界面或 UIKit需要在主线程上进行。在展示 drawable 时,Metal 是否有相同的要求? ? 在一个层托管 NSView我一直在玩,我注意到我可以调用[
我有一个项目,用户可以在其中拍摄视频,然后为他们添加滤镜或更改亮度和对比度等基本设置。为此,我使用 BBMetalImage ,它基本上返回 MTKView 中的视频(在项目中命名为 BBMetalV
我正在尝试实现一个 Metal 支持的绘图应用程序,其中通过沿着路径重复冲压纹理方 block 来在 MTKView 上绘制笔触。我在绘制笔触时在顶点级别改变图章的颜色/透明度,这样我就可以模拟墨水效
我正在将 CIImage 渲染到 MTKView 并且图像小于可绘制对象。 let centered = image.transformed(by: CGAffineTransform(transla
我在我的 UIKit 应用程序中使用 MTKViews 来选择 UI 元素。我有一个中央 Metal Controller ,它做的事情有点像这样: public class MetalView: M
这里我有一个 MTKView 并在摄像头源上实时运行一个简单的 CIFilter。这很好用。 问题 在旧设备的自拍相机上,例如 iPhone 5、iPad Air,提要绘制在较小的区域。 更新:发现发
这可能更像是一个通用的图形编程问题,但目前这是在 macOS 上使用 Apple 的 Metal 框架的上下文中。 在 NSView mouseDown 中,只需调用以下命令即可轻松获取鼠标按下事件发
从 MTKView 捕获帧的最有效方法是什么?如果可能的话,我想实时保存帧中的 .mov 文件。是否可以渲染成 AVPlayer 帧或其他东西? 目前正在使用此代码绘制(基于@warrenm Perf
如果我将窗口大小调整为小于 Metal View ,我可以看到滚动条一秒钟,但我无法单击它们,它们也保持可见。你知道我该如何改变这种行为吗?我希望只要窗口小于 Metal View ,滚动条就可见且可
我是一名优秀的程序员,十分优秀!