mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-06 03:33:41 +02:00
Various fixes
This commit is contained in:
parent
337ae154c9
commit
59c65198de
11 changed files with 128 additions and 63 deletions
|
|
@ -555,7 +555,7 @@ private final class CameraContext {
|
|||
}
|
||||
}
|
||||
|
||||
public func startRecording() -> Signal<CameraRecordingData, NoError> {
|
||||
public func startRecording() -> Signal<CameraRecordingData, CameraRecordingError> {
|
||||
guard let mainDeviceContext = self.mainDeviceContext else {
|
||||
return .complete()
|
||||
}
|
||||
|
|
@ -829,7 +829,7 @@ public final class Camera {
|
|||
}
|
||||
}
|
||||
|
||||
public func startRecording() -> Signal<CameraRecordingData, NoError> {
|
||||
public func startRecording() -> Signal<CameraRecordingData, CameraRecordingError> {
|
||||
return Signal { subscriber in
|
||||
let disposable = MetaDisposable()
|
||||
self.queue.async {
|
||||
|
|
@ -1082,3 +1082,7 @@ public struct CameraRecordingData {
|
|||
public let duration: Double
|
||||
public let filePath: String
|
||||
}
|
||||
|
||||
public enum CameraRecordingError {
|
||||
case audioInitializationError
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,6 +83,8 @@ final class CameraOutput: NSObject {
|
|||
let colorSpace: CGColorSpace
|
||||
let isVideoMessage: Bool
|
||||
|
||||
var hasAudio: Bool = false
|
||||
|
||||
let photoOutput = AVCapturePhotoOutput()
|
||||
let videoOutput = AVCaptureVideoDataOutput()
|
||||
let audioOutput = AVCaptureAudioDataOutput()
|
||||
|
|
@ -141,9 +143,15 @@ final class CameraOutput: NSObject {
|
|||
} else {
|
||||
Logger.shared.log("Camera", "Can't add video output")
|
||||
}
|
||||
if audio, session.session.canAddOutput(self.audioOutput) {
|
||||
session.session.addOutput(self.audioOutput)
|
||||
self.audioOutput.setSampleBufferDelegate(self, queue: self.audioQueue)
|
||||
if audio {
|
||||
if session.session.canAddOutput(self.audioOutput) {
|
||||
self.hasAudio = true
|
||||
session.session.addOutput(self.audioOutput)
|
||||
self.audioOutput.setSampleBufferDelegate(self, queue: self.audioQueue)
|
||||
} else {
|
||||
Logger.shared.log("Camera", "Can't add audio output")
|
||||
print("error")
|
||||
}
|
||||
}
|
||||
if photo, session.session.canAddOutput(self.photoOutput) {
|
||||
if session.hasMultiCam {
|
||||
|
|
@ -302,7 +310,7 @@ final class CameraOutput: NSObject {
|
|||
|
||||
private var currentMode: RecorderMode = .default
|
||||
private var recordingCompletionPipe = ValuePipe<VideoCaptureResult>()
|
||||
func startRecording(mode: RecorderMode, position: Camera.Position? = nil, orientation: AVCaptureVideoOrientation, additionalOutput: CameraOutput? = nil) -> Signal<CameraRecordingData, NoError> {
|
||||
func startRecording(mode: RecorderMode, position: Camera.Position? = nil, orientation: AVCaptureVideoOrientation, additionalOutput: CameraOutput? = nil) -> Signal<CameraRecordingData, CameraRecordingError> {
|
||||
guard self.videoRecorder == nil else {
|
||||
return .complete()
|
||||
}
|
||||
|
|
@ -345,6 +353,10 @@ final class CameraOutput: NSObject {
|
|||
}
|
||||
|
||||
let audioSettings = self.audioOutput.recommendedAudioSettingsForAssetWriter(writingTo: .mp4) ?? [:]
|
||||
if self.hasAudio && audioSettings.isEmpty {
|
||||
Logger.shared.log("Camera", "Audio settings are empty on recording start")
|
||||
return .fail(.audioInitializationError)
|
||||
}
|
||||
|
||||
let outputFileName = NSUUID().uuidString
|
||||
let outputFilePath = NSTemporaryDirectory() + outputFileName + ".mp4"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue