- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ReplayKit 来录制我的应用程序,然后为用户提供共享或删除录制内容的选项。删除工作正常,但我无法让共享部分正常工作。我尝试将 RPPreviewViewControllerMode 与 .shared 一起使用,但 XCode 无法识别它。我也试过 UIActivityViewController,它会弹出共享菜单 - 但是,如果我尝试访问录音,它就不起作用。最后,我尝试了 previewControllerDelegate,它允许用户编辑和保存视频,但不能共享它。
我已经在下面发布了我的代码。请指教,谢谢!
import UIKit
import ReplayKit
class ViewController: UIViewController, RPPreviewViewControllerDelegate {
@IBOutlet weak var statusLabel: UILabel!
@IBOutlet weak var imagePicker: UISegmentedControl!
@IBOutlet weak var selectedImageView: UIImageView!
@IBOutlet weak var micToggle: UISwitch!
@IBOutlet weak var recordButton: UIButton!
var recorder = RPScreenRecorder.shared()
private var isRecording = false
@IBAction func imagePicked(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
selectedImageView.image = UIImage(named: "skate")
case 1:
selectedImageView.image = UIImage(named: "food")
case 2:
selectedImageView.image = UIImage(named: "cat")
case 3:
selectedImageView.image = UIImage(named: "nature")
default:
selectedImageView.image = UIImage(named: "skate")
}
}
@IBAction func recordButtonPressed(_ sender: Any) {
if !isRecording {
startRecording()
} else {
stopRecording()
}
}
func startRecording() {
guard recorder.isAvailable else {
print("Recording not available at this time")
return
}
if micToggle.isOn {
recorder.isMicrophoneEnabled = true
} else {
recorder.isMicrophoneEnabled = false
}
recorder.startRecording { (error) in
guard error == nil else {
print("There was an error startng the recording.")
return
}
//Call DispatchQueue to update UI in the main thread rather than background
DispatchQueue.main.async {
self.micToggle.isEnabled = false
self.recordButton.setTitleColor(#colorLiteral(red: 0.521568656, green: 0.1098039225, blue: 0.05098039284, alpha: 1), for: .normal)
self.recordButton.setTitle("Stop", for: .normal)
self.statusLabel.textColor = #colorLiteral(red: 0.521568656, green: 0.1098039225, blue: 0.05098039284, alpha: 1)
self.statusLabel.text = "Recording..."
self.isRecording = true
print("Started Recording")
}
}
}
func stopRecording() {
recorder.stopRecording { (preview, error) in
guard preview != nil else {
print("Preview controller not available")
return
}
let alert = UIAlertController(title: "Recording finished", message: "Would you like to share or delete your recording?", preferredStyle: .alert
)
let deleteAction = UIAlertAction(title: "Delete", style: .destructive, handler: { (action) in
self.recorder.discardRecording {
print("Recording discarded successfully.")
}
})
//First try:
let recordedVideo = "Video goes here!" //I don't know how to modify this to get the video content.
let activityViewController : UIActivityViewController = UIActivityViewController(
activityItems: [recordedVideo], applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)
//Second try:
//This allows me to edit and save the video, but not share it.
let shareAction = UIAlertAction(title: "Share", style: .default, handler: { (action) in
preview?.previewControllerDelegate = self
self.present(preview!, animated: true, completion: nil)
})
// //Third try: not working!
// var mode: RPPreviewViewControllerMode
// let shareAction = UIAlertAction(title: "Share", style: .default, handler: { (action) in
// preview?.mode = .share // The error is: 'mode' has been explicitly marked unavailable here (ReplayKit.RPPreviewViewController)
// preview?.previewControllerDelegate = self
// self.present(preview!, animated: true, completion: nil)
// })
alert.addAction(deleteAction)
alert.addAction(shareAction)
self.present(alert, animated: true, completion: nil)
self.isRecording = false
self.viewReset()
}
}
func viewReset() {
micToggle.isEnabled = true
statusLabel.text = "Ready to Record"
statusLabel.textColor = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)
recordButton.setTitle("Record", for: .normal)
recordButton.setTitleColor(#colorLiteral(red: 0.2994912565, green: 0.7500386834, blue: 0.3387371898, alpha: 1), for: .normal)
}
func previewControllerDidFinish(_ previewController: RPPreviewViewController) {
dismiss(animated: true, completion: nil)
}
最佳答案
也许是因为.automatic
模态演示,因为在 iOS 13 中,当您弹出 Controller 时,它不会覆盖全屏。所以,试试 .fullScreen
, 它帮助到我:
func stopRecording() {
recorder.stopRecording { (preview, error) in
guard preview != nil else {
print("Preview controller not available")
return
}
let alert = UIAlertController(title: "Recording finished", message: "Would you like to share or delete your recording?", preferredStyle: .alert
)
let deleteAction = UIAlertAction(title: "Delete", style: .destructive, handler: { (action) in
self.recorder.discardRecording {
print("Recording discarded successfully.")
}
})
let shareAction = UIAlertAction(title: "Share", style: .default, handler: { (action) in
// Try .fullScreen
preview?.modalPresentationStyle = .fullScreen
preview?.previewControllerDelegate = self
self.present(preview!, animated: true, completion: nil)
})
alert.addAction(deleteAction)
alert.addAction(shareAction)
self.present(alert, animated: true, completion: nil)
self.isRecording = false
self.viewReset()
}
}
关于ios - 你如何使用 ReplayKit 实现共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59449447/
func startRecording() { let recorder = RPScreenRecorder.shared() recorder.startRecording(wit
最近在做一个项目,需要录制系统屏幕、App音频以及麦克风音频。 我尝试了以下解决方案。 借助 Replay 套件及其函数 startRecording 调用函数之前 recorder.isMicrop
我想知道有没有办法强制 replaykit 以方形模式只记录屏幕的一部分?当前的API似乎记录了整个屏幕! 最佳答案 ReplayKit 记录屏幕上的所有内容,免除系统提示和对话框。 但是,您可以在主
我正在开发一款具有屏幕捕获功能的应用。 ReplayKit 非常简单,而且效果很好,但是当我测试它多次录制时,它突然无法录制。 当它失败时,它只会在预览 View 中显示一个空白的黑色视频。没有崩溃,
我正在使用 replaykit 广播扩展通过 twilio 共享 iOS 设备屏幕。问题是我无法从对方接收音频。这可能吗?或者广播者只是单向的? 最佳答案 此处为 Twilio 开发人员布道师。 当前
另一个 ReplayKit 问题: 停止录制后显示预览 View Controller 时,ReplayKit 似乎在标题中使用了目标名称,并以当前日期作为副标题。我们想更改此标题,因为项目名称在那里
我遇到了一个问题,在我直播我的屏幕后,我尝试录制屏幕,但它不起作用。当我录制屏幕然后尝试直播屏幕时,也会发生同样的事情。顺便说一句,我不想一起做。这是在完成一个之后,我尝试使用另一个。如果您需要查
对于 iOS 9 中 Apple 的新 ReplayKit 框架,您必须获得访问麦克风和录制屏幕的权限。 当我在每次启动时在 xcode 中运行我的测试应用程序时,它似乎在我已经在上一个 sessio
我正在尝试使用 ReplayKit 来录制我的应用程序,然后为用户提供共享或删除录制内容的选项。删除工作正常,但我无法让共享部分正常工作。我尝试将 RPPreviewViewControllerMod
我正在使用 Twilio 可编程视频在音频聊天中连接两个用户。我想为用户提供在 Audio Session 期间录制屏幕的选项,因此我使用 Replaykit。一切正常,除了 Twilio 启动后录音
我遇到了一个小问题。 我用replaykit练习广播上传扩展, 我想在发生异常时显示错误代码。 但我对此无能为力。 你能教我一个方法吗? 我讨厌 (null) 并想替换其他词。 最佳答案 使用fini
我使用 MPMusicPlayerController 在我的应用程序中播放音频,我使用 RPScreenRecorder 录制屏幕。我遇到的问题是它只记录屏幕而不记录应用程序中的音频。我遇到的另一个
我可以构建一个使用 replaykit 的共享屏幕功能的应用程序吗?此功能类似于 Mobcrush 应用程序。这意味着我可以使用自己的服务器来连接流数据,而不是使用像 Mocbrush、Youtube
我正在尝试使用 ReplayKit 拍摄 ARKIt 应用程序的视频。我有一个录音按钮,当按下时变红并开始录音,然后再次按下变白并停止录音。 但是 stopRecording 方法在第一次没有起作用。
如何将使用 Replaykit 录制的视频作为文件访问并将另一个视频合并到其中? 最佳答案 使用 iOS 11,您可以直接访问视频。参见 https://developer.apple.com/vid
场景 1: 使用音频/视频编写器输入启动 AVAssetWriter。 使用 RPScreenRecorder 在没有麦克风的情况下开始录音并处理样本缓冲区。 文件在第一次尝试时可以很好地写入照片。
我正在使用 ReplayKit 但我的问题是我需要获取视频(或临时视频),而不必通过 RPPreviewViewController 我正在使用以下内容,但必须使用 RPPreviewViewCont
我正在尝试创建一个 iPhone 应用程序,它不仅可以记录应用程序的屏幕,而且如果置于后台,它会记录屏幕上的所有内容,包括其他应用程序。这就是从“控制中心”进行录音的方式。不同之处在于我想在没有用户干
这是启动和停止函数。 @IBAction func startRecordingAction(sender: AnyObject) { activityView.hidden
我使用 replaykit 录制屏幕。如何更改此警报的语言。或者我可以制作自己的自定义警报 View 吗? 最佳答案 您添加 InfoPlist.strings 文件来本地化 Info.plist 的
我是一名优秀的程序员,十分优秀!