问题标签 [replaykit]

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 投票
2 回答
645 浏览

ios - ReplayKit stopRecording 第一次没有进入

我正在尝试使用 ReplayKit 视频捕获 ARKIt 应用程序。我有一个录制按钮,按下时变为红色并开始录制,然后再次按下变为白色并停止录制。

但是 stopRecording 方法从来没有第一次起作用。

如果 recorder.isAvailable { recorder.delegate = self

第一次按下时,我可以看到录制开始了。然后当我再次按下时,我可以看到进入了recorder.isRecording,但是recorder.stopRecording中的块不起作用。我必须再次按下才能开始录制,然后在进入 recorder.stopRecording 块之前再次停止。

任何想法?帮助表示赞赏。

0 投票
2 回答
2174 浏览

ios - Replaykit 资产写入器状态随机失败

用例

我正在使用 iOS 11 Replaykit 框架尝试从屏幕录制帧,以及来自应用程序和麦克风的音频。

问题

随机地,当我调用我的 .append(sampleBuffer)AVAssetWriterStatus.failed时,得到AssetWriter.Error显示

Error Domain=AVFoundationErrorDomain Code=-11823 "Cannot Save" UserInfo={NSLocalizedRecoverySuggestion=Try saving again., NSLocalizedDescription=Cannot Save, NSUnderlyingError=0x1c044c360 {Error Domain=NSOSStatusErrorDomain Code=-12412 "(null)"}}

附带问题:我在应用程序录制时播放重复声音以尝试验证音频是否已录制,但当我开始录制时声音停止,即使我的视频和外部音频麦克风正在工作。

如果您需要更多信息,我也可以将其他代码上传到 GitHub。

想法

由于有时记录会保存(我可以导出到照片应用程序并重播视频),所以我认为这一定是异步问题,我正在乱序加载内容。如果你看到任何东西,请告诉我!

我想我将尝试的一个方法是保存到我自己的 /Documents 文件夹中,而不是直接保存到 /Documents 以防出现奇怪的权限错误。虽然我相信这会导致一致的错误,而不是有时会出错。

我的代码

0 投票
2 回答
2099 浏览

ios - iOS 11 Objective-C - 使用 AVAssetWriterInputPixelBufferAdaptor 处理来自 ReplayKit 的图像缓冲区

我正在尝试使用ReplayKit录制我的应用程序的屏幕,在录制视频时裁剪掉其中的某些部分。不太顺利。

ReplayKit 将捕获整个屏幕,因此我决定从 ReplayKit 接收每一帧(如CMSampleBuffervia ),将其裁剪并通过AVAssetWriterInputPixelBufferAdaptorstartCaptureWithHandler将其提供给视频编写器。但是我在裁剪之前硬拷贝图像缓冲区时遇到了麻烦。

这是我记录整个屏幕的工作代码:

其中来自 ReplayKit 的每个样本缓冲区将直接馈送到写入器(在captureSampleBuffer方法中),因此记录整个屏幕。

然后,我使用 AVAssetWriterInputPixelBufferAdaptor 用相同的逻辑替换了该部分,它工作得很好:

适配器设置为:

所以管道正在工作。

然后,我在主内存中创建了图像缓冲区的硬拷贝并将其提供给适配器:

这不起作用 - 保存的视频看起来像右手边的屏幕截图:

破碎的

似乎每行的字节数和颜色格式错误。我已经研究并尝试了以下内容,但无济于事:

  • 每行字节的硬编码4 * width->“错误访问”。
  • 使用intanddouble而不是char-> 一些奇怪的调试器终止异常。
  • 使用其他图像格式 -> “不支持”或访问错误。

此外,releaseCallback它永远不会被调用——ram 将在 10 秒的录制时间内用完。

从这个输出看,潜在的原因是什么?

0 投票
3 回答
4593 浏览

ios - 使用 ReplayKit 流式传输时从 CMSampleBuffer 保存视频

我正在将我的应用程序的内容流式传输到我的 RTMP 服务器并使用 RPBroadcastSampleHandler。

其中一种方法是

captureOutput 方法是

由于这个示例缓冲区包含音频/视频数据,我想我可以在流式传输时使用 AVKit 将其保存在本地。所以我正在做的是在流的开头创建一个资产编写器:

然后在流的末尾保存并完成写入:

我遇到的问题是finishWriting 完成代码永远无法达到。写入器处于“写入”状态,因此视频文件不保存。

如果我删除“finishWriting”行并让完成代码继续运行,则会保存一个文件,但没有正确完成,当我尝试查看它时它无法播放,因为它可能缺少元数据。

有没有其他方法可以做到这一点?我不想真正开始使用 AVKit 捕获来保存记录,因为它占用了太多的 CPU 并且 RPBroadcastSampleHandler 的 CMSampleBuffer 已经有视频数据,但也许使用 AVKit 在这里是一个错误的举动?

我应该改变什么?如何保存该 CMSampleBuffer 中的视频?

0 投票
0 回答
149 浏览

ios - ReplayKit 有时不调用 stopRecording 完成处理程序

我正在使用 iPad WiFi 2017 iOS 11.0.3。它只是有时会发生,并且仅在第一次打开应用程序时发生。重现它的步骤:

  1. 打开应用程序
  2. 开始新的录音
  3. 停下来
  4. 如果调用了处理程序,那么它就起作用了。然后,要尝试再次重现该问题,只需将应用程序滑动关闭,然后返回步骤 1。

有什么办法可以解决吗?

0 投票
2 回答
1131 浏览

ios - 我可以使用 ReplayKit 来录制麦克风和系统音频吗?

网上没有太多关于此的文档,因为这是一项奇怪的任务。我正在尝试使用 ReplayKit 同时录制我的屏幕、内置麦克风和系统音频。

这是我现在录制屏幕的方式:

运行时,系统会提示用户使用麦克风或不使用麦克风进行录制。我可以两者都做吗?有解决方法吗?如果我选择麦克风,当我的应用程序播放声音时,麦克风会被禁用。

如果有人可以提出不涉及 replaykit 的可能解决方案,那也将不胜感激!

谢谢

0 投票
2 回答
1953 浏览

ios - ReplayKit 保存视频失败首先尝试使用麦克风

场景一:

  1. 使用音频/视频写入器输入启动 AVAssetWriter。
  2. 使用 RPScreenRecorder 在没有麦克风的情况下开始录制并处理样本缓冲区。
  3. 文件在第一次尝试时可以很好地写入照片。

场景二:

  1. 使用音频/视频写入器输入启动 AVAssetWriter。
  2. 使用 RPScreenRecorder 在启用麦克风的情况下开始录制并处理样本缓冲区。
  3. 文件写入在第一次尝试时无法写出。

    UserInfo={NSLocalizedRecoverySuggestion=再次尝试保存。,NSLocalizedDescription=无法保存,NSUnderlyingError=0x1c464f3c0 {Error Domain=NSOSStatusErrorDomain Code=-12412 "(null)"}} 2017-10-26 23:25:16.896673-0400 [2135:771655 ] 状态失败!:3 错误域=AVFoundationErrorDomain 代码=-11823“无法保存”

第二次尝试工作正常。

我究竟做错了什么?

0 投票
1 回答
1040 浏览

ios - ReplayKit 在不去 RPPreviewViewController 的情况下获取视频

我正在使用 ReplayKit 但我的问题是我需要获取视频(或临时视频),而无需通过 RPPreviewViewController 我正在使用以下内容,但必须使用 RPPreviewViewController,还有其他方法吗?

0 投票
1 回答
1583 浏览

ios - 从 ReplayKit 中提取视图而不在 iOS 目标 c 中显示视图控制器

我正在使用 ReplayKit 进行屏幕录制,我需要保留视频而不是在 viewController 中呈现它,我尝试了以下方法:

但它似乎不起作用,任何建议将不胜感激。

0 投票
1 回答
420 浏览

ios - Replaykit 和 Twilio

我正在使用 Twilio 可编程视频在音频聊天中连接两个用户。我想让用户选择在音频会话期间录制他们的屏幕,所以我正在使用 Replaykit。一切正常,除了录音中的音频在 Twilio 启动后立即中断。

Twilio 使用的音频类型和 Replaykit 音频捕获之间是否存在冲突?

我之前在 Twilio 处于活动状态时尝试添加声音时遇到过类似的情况,一旦播放另一种声音,它就会导致 Twilio 音频中断。

编辑:我尝试了不同的方法,所以我只有最新的更改,但这是我用于 ReplayKit 的代码。这只是标准的开始、停止和预览录制。

我也尝试过使用控制面板中的新录制功能。我可以从其他应用程序捕获音频,但是当 Twilio 在我的应用程序上启动时,录音中的音频会变为静音并在 Twilio 停止时恢复。这就是让我觉得 Twilio 和 Replaykit 之间存在一些冲突的原因,但也许有一种我不知道的方法来捕捉它。

我也尝试过 .startCapture 而不是 .startRecording,但我认为我没有正确使用它,而且我找不到太多关于它的文档。