|
@@ -18,15 +18,14 @@ class PublishNewVideoPhotoView: BaseView {
|
|
|
|
|
|
/// 录制的时长
|
|
|
var recorderDuration: CGFloat = 0.0
|
|
|
-
|
|
|
/// 录制最大时长
|
|
|
let maxDuration : CGFloat = 60.0
|
|
|
-
|
|
|
/// 录制最小时长
|
|
|
let minDuration : CGFloat = 3.0
|
|
|
-
|
|
|
/// 滤镜选中的selected
|
|
|
var selectedIndex : Int = 0
|
|
|
+ /// 是否完成录制
|
|
|
+ var isFinishRecorder : Bool = false
|
|
|
|
|
|
/// 添加View
|
|
|
override func setupViews() {
|
|
@@ -94,8 +93,6 @@ class PublishNewVideoPhotoView: BaseView {
|
|
|
}else { //开始拍摄
|
|
|
self?.startTakeVideo()
|
|
|
}
|
|
|
- //切换按钮状态
|
|
|
- self?.publishNewVideoPhotoSetView.recordButton.isSelected = !(self?.publishNewVideoPhotoSetView.recordButton.isSelected)!
|
|
|
}
|
|
|
// 拍照
|
|
|
if PublishNewViewModel.shared.publishNewRecorderType == .photo {
|
|
@@ -112,8 +109,15 @@ class PublishNewVideoPhotoView: BaseView {
|
|
|
}).disposed(by: disposeBag)
|
|
|
// 完成录制
|
|
|
publishNewVideoPhotoSetView.finishButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
- /// 回删视频
|
|
|
- self?.finishTakeVideo()
|
|
|
+ //完成录制的view
|
|
|
+ self?.finishRecorderView()
|
|
|
+ if self?.recorder?.isRecording ?? true {
|
|
|
+ // 完成录制需要先掉用停止录制在走delegate
|
|
|
+ self?.stopTakeVideo()
|
|
|
+ }else {
|
|
|
+ self?.finishTakeVideo()
|
|
|
+ }
|
|
|
+
|
|
|
}).disposed(by: disposeBag)
|
|
|
// 左滑 滤镜 加 1
|
|
|
publishNewVideoPhotoSetView.leftSwipeClosure = {
|
|
@@ -144,20 +148,36 @@ class PublishNewVideoPhotoView: BaseView {
|
|
|
self?.showFilterNameLabel(aliyunEffectFilter: aliyunEffectFilter)
|
|
|
}
|
|
|
|
|
|
-
|
|
|
// 关闭音乐按钮
|
|
|
musicView.closeButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
- AliPlayerManager.shared.audioPlayer.stop()
|
|
|
+ PublishNewMusicView.publishNewMusicSelectedIndexPath = nil
|
|
|
self?.musicViewisHidden(isHidden: true)
|
|
|
}).disposed(by: disposeBag)
|
|
|
|
|
|
// 不使用音乐按钮
|
|
|
musicView.noUseMusicButton.rx.tap.subscribe(onNext: { [weak self] (data) in
|
|
|
- self?.recorder?.apply(AliyunEffectMusic())
|
|
|
- AliPlayerManager.shared.audioPlayer.stop()
|
|
|
+ PublishNewMusicView.publishNewMusicSelectedIndexPath = nil
|
|
|
+ PublishNewMusicView.publishNewMusicUseIndexPath = nil
|
|
|
+ let effectMusic : AliyunEffectMusic? = nil
|
|
|
+ self?.recorder?.apply(effectMusic)
|
|
|
self?.musicViewisHidden(isHidden: true)
|
|
|
}).disposed(by: disposeBag)
|
|
|
|
|
|
+ // 使用音乐
|
|
|
+ musicView.userMusicClosure = {
|
|
|
+ [weak self] in
|
|
|
+ if PublishNewMusicView.publishNewMusicUseURL?.path == nil {
|
|
|
+ PublishNewMusicView.publishNewMusicUseIndexPath = nil
|
|
|
+ self?.musicViewisHidden(isHidden: true)
|
|
|
+ SwiftProgressHUD.shared().showText("使用音乐错误,请您重新选择!!!")
|
|
|
+ }else {
|
|
|
+ PublishNewMusicView.publishNewMusicSelectedIndexPath = nil
|
|
|
+ self?.recorder?.apply(AliyunEffectMusic(file: PublishNewMusicView.publishNewMusicUseURL?.path))
|
|
|
+ self?.musicViewisHidden(isHidden: true)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
// 左滑 滤镜 加 1
|
|
|
recorderPreview.leftSwipeClosure = {
|
|
@@ -187,12 +207,8 @@ class PublishNewVideoPhotoView: BaseView {
|
|
|
|
|
|
/// SDK录制类
|
|
|
lazy var recorder: AliyunIRecorder? = {
|
|
|
-// let recorder : AliyunIRecorder? = AliyunIRecorder()
|
|
|
-// recorder?.reStartPreview(withVideoSize: CGSize(width: 720, height: 1280))
|
|
|
-// recorder?.preview = recorderPreview
|
|
|
-// recorder?.delegate = self
|
|
|
- let recorder = AliyunIRecorder.init(delegate: self, videoSize: CGSize(width: 720, height: 1280))
|
|
|
|
|
|
+ let recorder = AliyunIRecorder.init(delegate: self, videoSize: CGSize(width: 720, height: 1280))
|
|
|
// 预览View
|
|
|
recorder?.preview = recorderPreview
|
|
|
//创建文件夹路径
|
|
@@ -230,14 +246,10 @@ class PublishNewVideoPhotoView: BaseView {
|
|
|
recorder?.frontCaptureSessionPreset = AVCaptureSession.Preset.hd1280x720.rawValue
|
|
|
// 后置摄像头采集分辨率 默认:AVCaptureSessionPreset1280x720
|
|
|
recorder?.backCaptureSessionPreset = AVCaptureSession.Preset.hd1280x720.rawValue
|
|
|
- // 设置视频最大时长 默认8
|
|
|
- recorder?.clipManager.maxDuration = maxDuration
|
|
|
- // 设置视频最小时长 默认8
|
|
|
- recorder?.clipManager.minDuration = minDuration
|
|
|
// 设置摄像头角度
|
|
|
recorder?.cameraRotate = 0
|
|
|
// 设置编码方式 0软编 1硬编
|
|
|
- recorder?.encodeMode = 1
|
|
|
+ recorder?.encodeMode = 0
|
|
|
// 设置关键帧间隔
|
|
|
recorder?.gop = 5
|
|
|
// 设置关键帧间隔
|
|
@@ -250,13 +262,16 @@ class PublishNewVideoPhotoView: BaseView {
|
|
|
recorder?.bitrate = 2000000
|
|
|
// 设置采集视频格式
|
|
|
recorder?.outputType = .type420f
|
|
|
-
|
|
|
+ // 设置视频最大时长 默认8
|
|
|
+ recorder?.clipManager.maxDuration = maxDuration
|
|
|
+ // 设置视频最小时长 默认8
|
|
|
+ recorder?.clipManager.minDuration = minDuration
|
|
|
return recorder!
|
|
|
}()
|
|
|
|
|
|
/// 摄像头
|
|
|
lazy var recorderPreview : PublishNewRecorderPreview = {
|
|
|
- let recorderPreview = PublishNewRecorderPreview(frame: bounds)
|
|
|
+ let recorderPreview = PublishNewRecorderPreview(frame: kScreenBounds)
|
|
|
return recorderPreview
|
|
|
}()
|
|
|
/// 所有按钮View
|
|
@@ -286,9 +301,9 @@ extension PublishNewVideoPhotoView {
|
|
|
/// 开始拍视频
|
|
|
func startTakeVideo() {
|
|
|
|
|
|
+ self.recorder?.startRecording()
|
|
|
DispatchQueue.main.async {
|
|
|
[weak self] in
|
|
|
- self?.recorder?.startRecording()
|
|
|
// 回删按钮隐藏
|
|
|
self?.deleteAlpha(alpha: 0)
|
|
|
// 分段view隐藏
|
|
@@ -296,14 +311,12 @@ extension PublishNewVideoPhotoView {
|
|
|
// 开始录制隐藏View
|
|
|
self?.startTakeVideoHiddenView()
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/// 暂停拍视频
|
|
|
func stopTakeVideo() {
|
|
|
- DispatchQueue.main.async {
|
|
|
- [weak self] in
|
|
|
- self?.recorder?.stopRecording()
|
|
|
- }
|
|
|
+ self.recorder?.stopRecording()
|
|
|
}
|
|
|
|
|
|
/// 开始录制隐藏View
|
|
@@ -314,6 +327,8 @@ extension PublishNewVideoPhotoView {
|
|
|
publishNewVideoPhotoSetView.filterButton.isHidden = true
|
|
|
publishNewVideoPhotoSetView.beautyButton.isHidden = true
|
|
|
publishNewVideoPhotoSetView.musicButton.isHidden = true
|
|
|
+ //切换按钮状态
|
|
|
+ publishNewVideoPhotoSetView.recordButton.isSelected = !publishNewVideoPhotoSetView.recordButton.isSelected
|
|
|
|
|
|
}
|
|
|
|
|
@@ -324,14 +339,13 @@ extension PublishNewVideoPhotoView {
|
|
|
publishNewVideoPhotoSetView.filterButton.isHidden = false
|
|
|
publishNewVideoPhotoSetView.beautyButton.isHidden = false
|
|
|
publishNewVideoPhotoSetView.musicButton.isHidden = false
|
|
|
+ //切换按钮状态
|
|
|
+ publishNewVideoPhotoSetView.recordButton.isSelected = !publishNewVideoPhotoSetView.recordButton.isSelected
|
|
|
}
|
|
|
|
|
|
/// 完成拍视频
|
|
|
func finishTakeVideo() {
|
|
|
- DispatchQueue.main.async {
|
|
|
- [weak self] in
|
|
|
- self?.recorder?.finishRecording()
|
|
|
- }
|
|
|
+ self.recorder?.finishRecording()
|
|
|
}
|
|
|
|
|
|
/// 拍照
|
|
@@ -353,9 +367,9 @@ extension PublishNewVideoPhotoView {
|
|
|
AlertSheetView.alert(title: "是否删除上一片段?") { [weak self] (popupView, index, title) in
|
|
|
let partCount = self?.recorder?.clipManager?.partCount
|
|
|
// 删除最后一个视频片段
|
|
|
- self?.recorder?.clipManager.deletePart()
|
|
|
+ self?.recorder?.clipManager?.deletePart()
|
|
|
// 视频时长
|
|
|
- self?.recorderDuration = (self?.recorder?.clipManager.duration)!
|
|
|
+ self?.recorderDuration = (self?.recorder?.clipManager?.duration)!
|
|
|
// 完成按钮是否显示
|
|
|
self?.finishAlpha()
|
|
|
// 时间按钮是否显示
|
|
@@ -574,6 +588,8 @@ extension PublishNewVideoPhotoView {
|
|
|
///
|
|
|
/// - Parameter isHidden: 是否隐藏
|
|
|
func musicViewisHidden(isHidden:Bool) {
|
|
|
+ AliPlayerManager.shared.audioPlayer.stop()
|
|
|
+ recorder?.startPreview()
|
|
|
var offsetY : CGFloat = kScreenHeight
|
|
|
if isHidden {
|
|
|
offsetY = kScreenHeight
|
|
@@ -584,25 +600,43 @@ extension PublishNewVideoPhotoView {
|
|
|
}
|
|
|
// 移除点击手势
|
|
|
recorderPreview.removetap()
|
|
|
+ musicView.listContainerView.reloadData()
|
|
|
}else {
|
|
|
offsetY = kSafeStatusBarHeight
|
|
|
segmentedViewAlpha(alpha:0)
|
|
|
// 添加点击手势
|
|
|
recorderPreview.addTap()
|
|
|
}
|
|
|
- UIView.animate(withDuration: 0.5) {
|
|
|
+ UIView.animate(withDuration: 0.5, animations: {
|
|
|
[weak self] in
|
|
|
self?.musicView.frame = CGRect(x: 0, y: offsetY, width: kScreenWidth, height: kScreenHeight -
|
|
|
- kSafeStatusBarHeight)
|
|
|
+ kSafeStatusBarHeight)
|
|
|
if isHidden {
|
|
|
- self?.musicView.alpha = 0
|
|
|
- self?.publishNewVideoPhotoSetView.alpha = 1
|
|
|
+ self?.musicView.alpha = 0
|
|
|
+ self?.publishNewVideoPhotoSetView.alpha = 1
|
|
|
}else {
|
|
|
- self?.musicView.alpha = 1
|
|
|
- self?.publishNewVideoPhotoSetView.alpha = 0
|
|
|
+ self?.musicView.alpha = 1
|
|
|
+ self?.publishNewVideoPhotoSetView.alpha = 0
|
|
|
}
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ /// 结束录制回调/停止录制回调
|
|
|
+ func stopRecorderShowHidden() {
|
|
|
+ // 回删按钮透明度
|
|
|
+ deleteAlpha(alpha:1)
|
|
|
+ // 停止录制显示View
|
|
|
+ DispatchQueue.main.async {
|
|
|
+ [weak self] in
|
|
|
+ self?.stopTakeVideoVideoHiddenView()
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /// 完成录制的View
|
|
|
+ func finishRecorderView() {
|
|
|
+ SwiftProgressHUD.shared().showWait("视频正在合成中...")
|
|
|
+ isFinishRecorder = true
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// MARK: - 代理
|
|
@@ -722,10 +756,12 @@ extension PublishNewVideoPhotoView : AliyunIRecorderDelegate {
|
|
|
停止录制回调
|
|
|
*/
|
|
|
func recorderDidStopRecording() {
|
|
|
- // 回删按钮透明度
|
|
|
- deleteAlpha(alpha:1)
|
|
|
- // 停止录制显示View
|
|
|
- stopTakeVideoVideoHiddenView()
|
|
|
+ //是否完成录制
|
|
|
+ if isFinishRecorder { //完成 显示view也要完成视频合成
|
|
|
+ finishTakeVideo()
|
|
|
+ }else{ //没有完成只改变view显示
|
|
|
+ stopRecorderShowHidden()
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
@@ -733,14 +769,25 @@ extension PublishNewVideoPhotoView : AliyunIRecorderDelegate {
|
|
|
当录至最大时长时回调
|
|
|
*/
|
|
|
func recorderDidStopWithMaxDuration() {
|
|
|
-
|
|
|
+ finishRecorderView()
|
|
|
+ finishTakeVideo()
|
|
|
}
|
|
|
-
|
|
|
|
|
|
/**
|
|
|
结束录制回调
|
|
|
*/
|
|
|
func recorderDidFinishRecording() {
|
|
|
+ SwiftProgressHUD.shared().hide()
|
|
|
+ if isFinishRecorder { //完成 显示view也要完成视频合成
|
|
|
+ stopRecorderShowHidden()
|
|
|
+ }
|
|
|
+ isFinishRecorder = false
|
|
|
+ DispatchQueue.main.async {
|
|
|
+ [weak self] in
|
|
|
+ self?.publishNewVideoPhotoSetView.recordButton.isSelected = false
|
|
|
+ let vc = PublishEditNewViewController()
|
|
|
+ UIViewController.topMost?.navigationController?.pushViewController(vc, animated: true)
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|