问题标签 [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 投票
1 回答
557 浏览

ios - iOS Swift VideoToolBox 解压帧 EXC_BAD_ADDRESS 错误

我试图通过互联网将CMSampleBuffer转换为 Data 并创建一个副本。

我已经通过 VTCompressionSession 使用 h264 压缩了相机捕获的 CMSampleBuffer。

现在我构造了 CMSampleBuffer,创建了 VTDecompressionSession,但是在VTDecompressionSessionDecodeFrame()时出现内存错误,我不知道如何修复。

我在 Internet 上看到了很多 h264 示例,但它们都使用的是传统的 Objective-C 语言。

我正在使用 Xcode 11.3 Swift 5.1 并已部署到运行 iOS 12.1 的 iOS 设备。

0 投票
0 回答
64 浏览

ios - 分析显示在 AVSampleBufferDisplayLayer 中的帧颜色。图像缓冲区为零

我想分析显示的颜色,AVSampleBufferDisplayLayer其中从我无法控制的数据源获取帧。

我已经创建了自己的此类的子类并重写func enqueue(_ sampleBuffer: CMSampleBuffer)以获取示例缓冲区。我的计划是从中创建 CIImage,然后应用CIAreaAverage过滤器。

不幸的是,当我打电话时CMSampleBufferGetImageBuffer(sampleBuffer),我得到了null。据我了解,这意味着我应该dataBuffer改用。但是我怎样才能把它转换成 CIImage 呢?

0 投票
1 回答
247 浏览

ios - 使用 VTDecompressionSessionDecodeFrame 解码帧失败并出现 12909 错误

我正在尝试解码CMSampleBuffer,以便分析他们的像素数据。12909我打电话时不断出错VTDecompressionSessionDecodeFrame。这对我来说都是全新的——有什么想法可能是问题所在吗?

这是我的代码:

0 投票
1 回答
80 浏览

video-toolbox - 视频工具箱。像素传输,何时释放源缓冲区?

一个简单的直接问题,传输图像后何时释放源像素缓冲区以避免崩溃:

0 投票
0 回答
309 浏览

macos - VideoToolbox 硬件编码器帧延迟

用例:

我正在尝试使用 VideoToolbox 硬件编码器实时编码视频流以进行视频流。

问题:

VTCompressionOutputCallback 仅在 2 帧或更多帧被传递到编码器后才被调用。最后发送的帧存储在编码器缓冲区中,只有在下一帧进入后才会发出。这种行为会导致解码器端出现 1 帧延迟,因此没有实时流。我检查了各种编码器属性:kVTCompressionPropertyKey_RealTime、kVTCompressionPropertyKey_MaxFrameDelayCount、kVTCompressionPropertyKey_MoreFramesAfterEnd,但似乎都没有解决问题。我也知道 CompleteFrames 函数,但在每帧强制编码器仅发出关键帧之后调用它。

问题:

是否有可能将内部编码器帧缓冲区大小减小到 0 并将编码器设置为以 1 进 1 出方式运行?

我的默认编码器设置:

谢谢

0 投票
1 回答
961 浏览

ios - 使用 VideoToolbox API (kVTVideoDecoderBadDataErr) 解码 H264 流

我的目标是使用 nvenc 对我的 Windows 机器的主帧缓冲区进行编码,并使用 VideoToolbox API 将其内容流式传输到我的 iPad

我用来编码 h264 流的代码基本上是https://github.com/NVIDIA/video-sdk-samples/tree/master/nvEncDXGIOutputDuplicationSample的复制/粘贴,唯一的变化是我没有写入文件,而是发送数据

对于解码,我使用https://github.com/zerdzhong/SwfitH264Demo/blob/master/SwiftH264/ViewController.swift#L71

当我将所有内容写入文件时,编码工作完美,我可以毫无问题地使用 h264->mp4 在线转换器,问题是解码器在函数 decompressionSessionDecodeFrameCallback 中给我错误 kVTVideoDecoderBadDataErr

所以对于我尝试过的:

  • 首先使用 h264 分析器,我发现帧顺序是:7/8/5/5/5/5/1 ...
  • 我发现 nvenc 确实只在一个数据包中编码帧 7/8/5/5/5/5
  • 我确实尝试使用序列(0x00 0x00 0x00 0x01)将此数据包分成多个,它分别给了我7/8/5帧
  • 如您所见,我只得到了一个 5 帧,大约 100KB,H264 分析器说有四个 5 帧(大概是 40KB、20KB、30KB、10KB)
  • 使用十六进制文件查看器,我看到分隔这 5 个帧的序列是 (0x00 0x00 0x01),尝试也将它们分开,但解压缩时出现完全相同的 VideoToolbox 错误

这是我用来分离和发送帧的代码:协议只是 PACKET_SIZE->PACKET_DATA 快速代码能够读取 NALU 类型,所以我相信这不是问题

可能与纹理格式有关,VideoToolbox 提到了 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange,NVENC 代码提到了 YUV420 和 NV12,我不确定两者是否相同

这是我的格式说明:

0 投票
0 回答
330 浏览

ios - VTDecompressionOutputCallback 返回 kVTVideoDecoderBadDataErr = -12909

我有桌面服务器,它是编码帧。我的 iOS 客户端正在连接到此客户端并使用NWConnection以下方式接收数据:

NWListener 使用 .udp 参数有时会导致奇怪的日志

实际问题:

没有错误的设备(视频正常):iPhone 11 Pro iOS 13.5.1、iPhone Xs Max iOS 13.5.1
带有 -12909 的设备(未显示):iPhone 11 iOS 13.5.1、iPhone 7+ iOS 12.4.1

我的问题是:

什么可能导致OSStatus - kVTVideoDecoderBadDataErr -12909。这是否意味着我丢失了很多数据,或者某些视频字节被重新排序或其他什么?

完整代码示例: https ://github.com/ChoadPet/H.264-Decoding


我通过此回调接收❌ Failed状态,-12909 OSStatus并且imageBuffer == nil没有显示任何框架:

展示部分:

谢谢你。

0 投票
0 回答
126 浏览

ios - IOS VideoToolbox插入pic_timing sei消息?

我在使用 AWS Medialive 时遇到问题。我无法将 NALU: pic_timing SEI 消息(ISO/IEC 14496-10-2005 的 D.1.2)插入数据并发送到 RTMP 链接。

我难住了。我找不到答案 AWS 或 Apple 文档。

谢谢你的帮助。

0 投票
2 回答
318 浏览

ios - AddressSanitizer:heap-use-after-free 仅在发布存档上

我创建了我的班级的一个例子:https ://github.com/ChoadPet/H.264-Decoding

当我使用配置构建我的应用程序时,DEBUG一切正常,但是当我归档RELEASE它时,它在这条线上崩溃:

Address Sanitizer启用后,我收到此错误 :Thread 9: Use of deallocated memory

没有:Thread 12: EXC_BAD_ACCESS (code=1, address=0x107dd0020)


我确实知道有一些内存被释放并通过VTDecompressionSessionDecodeFrame方法访问,但我找不到任何十六进制地址,我不明白这如何与DEBUG构建完美配合。
在此方法之前,sessionsampleBuffer已成功创建(初始化)。

是否有一些我可以更改的项目设置DEBUG configuration可能导致崩溃?或者有人可以指出我的代码问题?

谢谢!

0 投票
0 回答
105 浏览

ios - 如何将 H.264 压缩应用于 CMSampleBuffer

我一直在尝试将 H.264 编码应用于 Swift 中的CMSampleBuffer使用VideoToolBox,我对 Swift 很陌生,如果压缩将其CMSampleBuffer转换为 aCVPixelBuffer也很好,我不知道该怎么做,因为我需要将其转换NSData为结尾。所有帮助将不胜感激!