我使用‘ReplayKit’获取视频流。回调是持续调用,但rpSampleType返回其他内容。我只想要视频缓冲区。
这是我的代码
RPScreenRecorder.shared().startCapture(handler: { (cmSampleBuffer, rpSampleType, error) in
if CMSampleBufferDataIsReady(cmSampleBuffer){
switch rpSampleType {
case RPSampleBufferType.video:
// create the CVPixelBuffer
let pixelBuffer = CMSampleBufferGetImageBuffer(cmSampleBuffer)!
let rtcpixelBuffer = RTCCVPixelBuffer(pixelBuffer: pixelBuffer)
default:
print("sample has no matching type")
}
}
}) { (error) in
print(error?.localizedDescription)
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据你的描述,你正在使用ReplayKit来捕获屏幕视频流,并且希望仅处理视频数据。在你的代码中,你已经正确地检查了rpSampleType
以确定当前样本是否为视频类型(RPSampleBufferType.video
),并且当接收到视频样本时,你成功地从CMSampleBuffer
中提取了CVPixelBuffer
。
如果你遇到的问题是回调函数还在为非视频类型的样本调用(即除了视频以外的其他类型,如音频或混合类型),而你只想处理视频缓冲区,那么你可以通过在default
case中直接返回或通过更具体的条件检查来忽略非视频样本,从而优化你的逻辑。但请注意,基于你的代码片段,实际上你已经在default
分支中打印了一条消息并忽略了非视频样本。
为了进一步确保只处理视频缓冲区,你的代码逻辑已经是正确的。如果还有其他问题导致期望之外的行为,可能需要检查以下几个方面:
确认ReplayKit配置:确保你在开始捕获之前没有设置任何可能导致接收非视频样本的配置选项。
错误处理:检查error
闭包中的错误信息,看是否有任何错误提示表明为何会接收到非预期的样本类型。
系统兼容性与版本:确认你的代码在目标iOS版本上表现如预期。不同iOS版本之间可能存在行为差异。
资源管理:虽然不影响视频样本的获取,但确保妥善管理CVPixelBuffer
和RTCCVPixelBuffer
的生命周期,避免内存泄漏。
日志记录:增加更多日志记录,特别是关于rpSampleType
的详细输出,以便于调试时了解样本类型变化的具体情况。
如果你的目标是完全排除非视频样本的处理,当前代码逻辑应该已经足够。如果有其他具体错误信息或不期望的行为,请提供更详细的描述,以便进行更深入的分析。