Skip to content

Commit 458dd5e

Browse files
author
Felipe Rodriguez Esturo
committed
working for ios
1 parent fb63090 commit 458dd5e

File tree

6 files changed

+36
-2
lines changed

6 files changed

+36
-2
lines changed

example/src/CameraPage.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ export function CameraPage({ navigation }: Props): React.ReactElement {
205205
ref={camera}
206206
onInitialized={onInitialized}
207207
onError={onError}
208+
onBytesWrittenVideo={(bytes) => console.log(`Bytes written: ${bytes / 1024 / 1024} MB!`)}
208209
onStarted={() => console.log('Camera started!')}
209210
onStopped={() => console.log('Camera stopped!')}
210211
onPreviewStarted={() => console.log('Preview started!')}

package/ios/Core/CameraSession+Video.swift

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ extension CameraSession {
1818
*/
1919
func startRecording(options: RecordVideoOptions,
2020
onVideoRecorded: @escaping (_ video: Video) -> Void,
21-
onError: @escaping (_ error: CameraError) -> Void) {
21+
onError: @escaping (_ error: CameraError) -> Void,
22+
onBytesWritten: @escaping (_ bytes: Double) -> Void) {
2223
// Run on Camera Queue
2324
CameraQueues.cameraQueue.async {
2425
let start = DispatchTime.now()
@@ -48,6 +49,8 @@ extension CameraSession {
4849
}
4950

5051
self.recordingSession = nil
52+
self.recordingSizeTimer?.cancel()
53+
self.recordingSizeTimer = nil
5154

5255
if self.didCancelRecording {
5356
VisionLogger.log(level: .info, message: "RecordingSession finished because the recording was canceled.")
@@ -128,6 +131,26 @@ extension CameraSession {
128131
self.didCancelRecording = false
129132
self.recordingSession = recordingSession
130133

134+
let timer = DispatchSource.makeTimerSource(queue: CameraQueues.cameraQueue)
135+
timer.schedule(deadline: .now(), repeating: 0.4)
136+
137+
timer.setEventHandler {
138+
guard let session = self.recordingSession else {
139+
timer.cancel()
140+
return
141+
}
142+
143+
let path = session.url.path
144+
if let size = try? FileManager.default.attributesOfItem(atPath: path)[.size] as? NSNumber {
145+
let bytes = size.doubleValue
146+
147+
DispatchQueue.main.async {
148+
onBytesWritten(bytes)
149+
}
150+
}
151+
}
152+
self.recordingSizeTimer = timer
153+
self.recordingSizeTimer?.resume()
131154
let end = DispatchTime.now()
132155
VisionLogger.log(level: .info, message: "RecordingSesssion started in \(Double(end.uptimeNanoseconds - start.uptimeNanoseconds) / 1_000_000)ms!")
133156
} catch let error as CameraError {

package/ios/Core/CameraSession.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ final class CameraSession: NSObject, AVCaptureVideoDataOutputSampleBufferDelegat
3131
// State
3232
var metadataProvider = MetadataProvider()
3333
var recordingSession: RecordingSession?
34+
var recordingSizeTimer: DispatchSourceTimer?
3435
var didCancelRecording = false
3536
var orientationManager = OrientationManager()
3637

package/ios/React/CameraView+RecordVideo.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ extension CameraView: AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAud
2828
},
2929
onError: { error in
3030
callback.reject(error: error)
31-
}
31+
},
32+
onBytesWritten: self.onBytesWrittenVideo
3233
)
3334
} catch {
3435
// Some error occured while initializing VideoSettings

package/ios/React/CameraView.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public final class CameraView: UIView, CameraSessionDelegate, PreviewViewDelegat
8080
@objc var onOutputOrientationChangedEvent: RCTDirectEventBlock?
8181
@objc var onViewReadyEvent: RCTDirectEventBlock?
8282
@objc var onAverageFpsChangedEvent: RCTDirectEventBlock?
83+
@objc var onBytesWrittenVideoEvent: RCTDirectEventBlock?
8384
@objc var onCodeScannedEvent: RCTDirectEventBlock?
8485

8586
// zoom
@@ -392,4 +393,10 @@ public final class CameraView: UIView, CameraSessionDelegate, PreviewViewDelegat
392393
"averageFps": averageFps,
393394
])
394395
}
396+
397+
func onBytesWrittenVideo(bytes: Double) {
398+
onBytesWrittenVideoEvent?([
399+
"bytesWritten": bytes,
400+
])
401+
}
395402
}

package/ios/React/CameraViewManager.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ @interface RCT_EXTERN_REMAP_MODULE (CameraView, CameraViewManager, RCTViewManage
6868
RCT_REMAP_VIEW_PROPERTY(onPreviewOrientationChanged, onPreviewOrientationChangedEvent, RCTDirectEventBlock);
6969
RCT_REMAP_VIEW_PROPERTY(onViewReady, onViewReadyEvent, RCTDirectEventBlock);
7070
RCT_REMAP_VIEW_PROPERTY(onAverageFpsChanged, onAverageFpsChangedEvent, RCTDirectEventBlock);
71+
RCT_REMAP_VIEW_PROPERTY(onBytesWrittenVideo, onBytesWrittenVideoEvent, RCTDirectEventBlock);
7172
// Code Scanner
7273
RCT_EXPORT_VIEW_PROPERTY(codeScannerOptions, NSDictionary);
7374
RCT_REMAP_VIEW_PROPERTY(onCodeScanned, onCodeScannedEvent, RCTDirectEventBlock);

0 commit comments

Comments
 (0)