问题标签 [video-toolbox]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
194 浏览

ios - EXC_BAD_ACCESS 发生在 H264 编码 CMSampleBuffer 上

试图将 a 转换CMSampleBufferH264编码数据

上述方法被连续调用。好像扔了EXC_BAD_ACCESS

我尝试使用NSZombie对象,但仍然无法弄清楚是什么原因造成的。

我尝试创建一个副本CMSampleBufferRef并传递它以确保它不会被释放。还是EXC_BAD_ACCESS被扔了。

谁能帮我弄清楚发生了什么?

PS -CMSampleBuffer创建自CVPixelBuffer

0 投票
4 回答
998 浏览

swift - 如何从 UnsafeMutablePointer 获取 CVPixelBuffer 句柄在斯威夫特?

我得到了一个解码的AVFrame,其格式显示为 160/ Videotoolbox_vld。在搜索了一些文章(此处)并查看了FFmpeg源代码(此处此处)后,CVBuffer句柄应位于AVFrame.data[3]. 但CVBuffer我得到的似乎无效,任何CVPixelBufferGetXXX()函数都返回 0 或 nil。

如果我使用av_hwframe_transfer_data()ffmpeg 的example/hw_decode.c所做的那样,则可以将样本从 HW 下载到 SW 缓冲区。它AVFrame.format会的nv12。通过 转换sws_scale为后bgra,样本可以以正确的内容显示在视图中。

我认为 VideoToolbox 解码帧是可以的。我转换的方式AVFrame.data[3]可能CVBuffer是错误的。刚刚学会了快速访问 c 指针,但我不确定如何正确读取指针中的资源句柄(CVBuffer)。

以下是我尝试从 AVFrame 中提取 CVBuffer 的方法

0 投票
1 回答
378 浏览

ios - iOS 13.1.3 VTDecompressionSessionDecodeFrame 无法正确解码

这是我解码流数据的代码。它在 iPhone 6s 上运行良好,但是当代码在 iPhoneX 或 iphone11 上运行时,“outputPixelBuffer”返回 nil。任何人都可以帮忙吗?

0 投票
1 回答
1077 浏览

ios - 如何在 iOS 上将编码的 CMSampleBuffer 样本保存到 mp4 文件

我正在使用 VideoToolbox 框架从 AVCaptureSession 检索数据并将其编码为 h264 和 acc。

我正处于这样的地步:

  1. 使用委托方法获取数据func captureOutput(_ captureOutput: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)
  2. 将视频转换CMSampleBuffer为h264 并将其编码CVImageBuffer为 h264,使用VTCompressionSession它传递编码的帧VTCompressionOutputCallback
  3. 将音频编码CMSampleBuffer为 acc 并将其作为UnsafeMutableAudioBufferListPointer.

我现在被阻止了,我想将这些流正确转换为字节Data以通过FileHandle. 我该怎么办?

我需要在实际文件最终确定之前访问编码流,因此我不能使用(我认为)AVAssetWriter将未编码的流保存到 mp4 文件,因为据我所知,我需要将未编码的样本传递AVAssetWriter给它才能正常工作. 还是我弄错了?

0 投票
2 回答
465 浏览

swift - 如何将包含 AAC 数据的 AudioBufferList 转换为 CMSampleBuffer

我正在使用将通过以下方式捕获的AudioConverter未压缩转换为:CMSampleBufferAVCaptureSessionAudioBufferList

我的输出 asbd 设置如下:

我想转换AudioBufferListCMSampleBuffer包含压缩数据,以便我可以将其写入 mp4 文件使用AVAssetWriter(我已经想出如何用视频来做到这一点),但到目前为止很少。我试过咨询这个答案,但在那种情况下有 PCM 数据,它似乎在这里不可用。

我可以访问AudioBufferList以及原始样本的presentationTimeStamp。我尝试了以下方法,但我不太确定如何计算 numSamples 以及这种方法是否有意义:

最后我确实设法创建了一个CMSampleBuffer,但是当我尝试完成写作时,我收到以下错误:

0 投票
1 回答
247 浏览

ios - AVSampleBufferDisplayLayer 播放太快

所以我整理了一个示例项目https://github.com/liuxuan30/TestH264.git,它使用 VideoToolBox 有一个 H264 示例解码器来显示从相机捕获的流文件。

使用VideoToolBox的H264解码器是从网上复制的,不是我写的,当我尝试播放我的h264流文件时,它播放速度太快,与ffmpeg或ffplay相比,两者都以正常速度播放。

我想问,如何解决这种行为?谢谢。

0 投票
0 回答
315 浏览

ios - 编写编码的音频 CMSampleBuffer 不起作用

我正在使用 AudioConverter 将通过 AVCaptureSession 捕获的未压缩 CMSampleBuffer 转换为 AudioBufferList:

然后,我使用如下数据包描述构造一个包含压缩数据的 CMSampleBuffer:

当我尝试使用 AVAssetWriter 保存缓冲区时,出现以下错误:-[AVAssetWriterInput appendSampleBuffer:] Cannot append sample buffer: First input buffer must have an appropriate kCMSampleBufferAttachmentKey_TrimDurationAtStart since the codec has encoder delay'

我决定准备前三个缓冲区,因为每个缓冲区的长度都是一致的:

现在我不再收到错误,并且在附加样本时也没有收到任何错误,但音频不会在录制中播放,并且还会弄乱整个视频文件(似乎计时信息已损坏)。

这里有什么我想念的吗?我应该如何正确附加音频 CMSampleBuffer?

0 投票
1 回答
1290 浏览

ffmpeg - 在启用了 videotoolbox 的 mac 上构建的 ffmpeg 变得不可移植

如果我以这种方式配置 ffmpeg:

它适用于我的目的(允许在 Mac 的 videotoolbox - Apple QSV 工具包上使用 aac 音频对 h264 视频进行编码),但如果我将它发送到除了它所构建的计算机之外的任何其他计算机,它会失败,如下所示:

如果我以这种方式重建它:

因此,除了删除 videotoolbox 之外的所有其他内容,它可以在任何其他计算机上成功运行,所以显然 ffmpeg 需要携带它没有的东西,以便 videotoolbox 工作......

我实际上正在使用 ffmpeg 的静态库构建一个 C++ 应用程序,但是解释我所做的将会是一个很长的故事,如果我在不同的机器上运行它产生的错误消息是完全相同的,所以我最好在 ffmpeg 控制台的例子中说明它实用程序本身。

我需要做哪些配置开关才能使 ffmpeg 构建可移植?

0 投票
0 回答
474 浏览

ios - 如何在 iOS 上使用 Video ToolBox 解码受 DRM 保护的内容(FairPlay、WideVine 等)?

我在 iOS 上有一个自定义播放器,它可以使用视频工具箱提供的 HEVC 解码器解码 HEVC 流,获取解码帧的句柄,将其传递给 Metal 并使用 Metal 渲染帧。我想对 DRM 加密内容做同样的事情。我了解 AVPlayer 直接支持 FairPlay,您可以使用它播放 DRM 加密内容(示例)。我如何使用 Video ToolBox 做到这一点?我在VTDecompressionSession 中看不到任何用于设置 DRM 会话/密钥的 API 。谢谢。

0 投票
1 回答
484 浏览

ios - 解压错误:Error Domain=NSOSStatusErrorDomain Code=-12909

我在下面使用H264算法是我指的是使用VideoToolbox 框架解压缩视频的链接

https://stackoverflow.com/a/29525001/1679255

并非所有视频都停留在特定位置。

以下是我在解压缩帧期间收到的错误日志。

  • Xocde 版本为 11.2.1
  • 开发目标是 10.0

如果您需要更多信息,请随时问我。

我的 VideoDecoder 类代码如下:

提前致谢