From b006b1e74457e2709ab51882f3c444f81af8a769 Mon Sep 17 00:00:00 2001 From: Rui Rodrigues Date: Tue, 16 Jul 2024 10:46:24 +0100 Subject: [PATCH] add duration to onVideoChunkReady data --- package/ios/CameraView.swift | 10 +++++++--- package/ios/Core/ChunkedRecorder.swift | 13 +++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/package/ios/CameraView.swift b/package/ios/CameraView.swift index a154cfe..cdb664d 100644 --- a/package/ios/CameraView.swift +++ b/package/ios/CameraView.swift @@ -351,11 +351,15 @@ public final class CameraView: UIView, CameraSessionDelegate { onInitReady([ "filepath": chunk.url.path, ]) - case .data(index: let index): - onVideoChunkReady([ + case let .data(index: index, duration: duration): + var data: [String: Any] = [ "filepath": chunk.url.path, "index": index, - ]) + ] + if let duration { + data["duration"] = duration.seconds + } + onVideoChunkReady(data) } } diff --git a/package/ios/Core/ChunkedRecorder.swift b/package/ios/Core/ChunkedRecorder.swift index 6f27e7d..675711b 100644 --- a/package/ios/Core/ChunkedRecorder.swift +++ b/package/ios/Core/ChunkedRecorder.swift @@ -14,7 +14,7 @@ class ChunkedRecorder: NSObject { enum ChunkType { case initialization - case data(index: UInt64) + case data(index: UInt64, duration: CMTime?) } struct Chunk { @@ -48,7 +48,7 @@ extension ChunkedRecorder: AVAssetWriterDelegate { case .initialization: saveInitSegment(segmentData) case .separable: - saveSegment(segmentData) + saveSegment(segmentData, report: segmentReport) @unknown default: fatalError("Unknown AVAssetSegmentType!") } @@ -60,11 +60,16 @@ extension ChunkedRecorder: AVAssetWriterDelegate { onChunkReady(url: url, type: .initialization) } - private func saveSegment(_ data: Data) { + private func saveSegment(_ data: Data, report: AVAssetSegmentReport?) { let name = "\(chunkIndex).mp4" let url = outputURL.appendingPathComponent(name) save(data: data, url: url) - onChunkReady(url: url, type: .data(index: chunkIndex)) + let duration = report? + .trackReports + .filter { $0.mediaType == .video } + .first? + .duration + onChunkReady(url: url, type: .data(index: chunkIndex, duration: duration)) chunkIndex += 1 }