问题标签 [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.
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 设备。
ios - 分析显示在 AVSampleBufferDisplayLayer 中的帧颜色。图像缓冲区为零
我想分析显示的颜色,AVSampleBufferDisplayLayer
其中从我无法控制的数据源获取帧。
我已经创建了自己的此类的子类并重写func enqueue(_ sampleBuffer: CMSampleBuffer)
以获取示例缓冲区。我的计划是从中创建 CIImage,然后应用CIAreaAverage
过滤器。
不幸的是,当我打电话时CMSampleBufferGetImageBuffer(sampleBuffer)
,我得到了null
。据我了解,这意味着我应该dataBuffer
改用。但是我怎样才能把它转换成 CIImage 呢?
ios - 使用 VTDecompressionSessionDecodeFrame 解码帧失败并出现 12909 错误
我正在尝试解码CMSampleBuffer
,以便分析他们的像素数据。12909
我打电话时不断出错VTDecompressionSessionDecodeFrame
。这对我来说都是全新的——有什么想法可能是问题所在吗?
这是我的代码:
video-toolbox - 视频工具箱。像素传输,何时释放源缓冲区?
一个简单的直接问题,传输图像后何时释放源像素缓冲区以避免崩溃:
macos - VideoToolbox 硬件编码器帧延迟
用例:
我正在尝试使用 VideoToolbox 硬件编码器实时编码视频流以进行视频流。
问题:
VTCompressionOutputCallback 仅在 2 帧或更多帧被传递到编码器后才被调用。最后发送的帧存储在编码器缓冲区中,只有在下一帧进入后才会发出。这种行为会导致解码器端出现 1 帧延迟,因此没有实时流。我检查了各种编码器属性:kVTCompressionPropertyKey_RealTime、kVTCompressionPropertyKey_MaxFrameDelayCount、kVTCompressionPropertyKey_MoreFramesAfterEnd,但似乎都没有解决问题。我也知道 CompleteFrames 函数,但在每帧强制编码器仅发出关键帧之后调用它。
问题:
是否有可能将内部编码器帧缓冲区大小减小到 0 并将编码器设置为以 1 进 1 出方式运行?
我的默认编码器设置:
谢谢
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,我不确定两者是否相同
这是我的格式说明:
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
没有显示任何框架:
展示部分:
谢谢你。
ios - IOS VideoToolbox插入pic_timing sei消息?
我在使用 AWS Medialive 时遇到问题。我无法将 NALU: pic_timing SEI 消息(ISO/IEC 14496-10-2005 的 D.1.2)插入数据并发送到 RTMP 链接。
我难住了。我找不到答案 AWS 或 Apple 文档。
谢谢你的帮助。
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
构建完美配合。
在此方法之前,session
并sampleBuffer
已成功创建(初始化)。
是否有一些我可以更改的项目设置DEBUG configuration
可能导致崩溃?或者有人可以指出我的代码问题?
谢谢!
ios - 如何将 H.264 压缩应用于 CMSampleBuffer
我一直在尝试将 H.264 编码应用于 Swift 中的CMSampleBuffer
使用VideoToolBox
,我对 Swift 很陌生,如果压缩将其CMSampleBuffer
转换为 aCVPixelBuffer
也很好,我不知道该怎么做,因为我需要将其转换NSData
为结尾。所有帮助将不胜感激!