format identation
This commit is contained in:
parent
20f8fa2937
commit
621bfe333c
@ -10,18 +10,18 @@ import UIKit
|
|||||||
|
|
||||||
|
|
||||||
enum RCTLogLevel: String {
|
enum RCTLogLevel: String {
|
||||||
case trace
|
case trace
|
||||||
case info
|
case info
|
||||||
case warning
|
case warning
|
||||||
case error
|
case error
|
||||||
}
|
}
|
||||||
|
|
||||||
enum RCTLogSource {
|
enum RCTLogSource {
|
||||||
case native
|
case native
|
||||||
}
|
}
|
||||||
|
|
||||||
func RCTDefaultLogFunction(_ level: RCTLogLevel, _ source: RCTLogSource, _ file: String, _ line: NSNumber, _ message: String) {
|
func RCTDefaultLogFunction(_ level: RCTLogLevel, _ source: RCTLogSource, _ file: String, _ line: NSNumber, _ message: String) {
|
||||||
print(level.rawValue, "-", message)
|
print(level.rawValue, "-", message)
|
||||||
}
|
}
|
||||||
|
|
||||||
typealias RCTDirectEventBlock = (Any?) -> Void
|
typealias RCTDirectEventBlock = (Any?) -> Void
|
||||||
@ -30,53 +30,53 @@ typealias RCTPromiseRejectBlock = (String, String, NSError?) -> Void
|
|||||||
typealias RCTResponseSenderBlock = (Any) -> Void
|
typealias RCTResponseSenderBlock = (Any) -> Void
|
||||||
|
|
||||||
func NSNull() -> [String: String] {
|
func NSNull() -> [String: String] {
|
||||||
return [:]
|
return [:]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func makeReactError(_ cameraError: CameraError, cause: NSError?) -> [String: Any] {
|
func makeReactError(_ cameraError: CameraError, cause: NSError?) -> [String: Any] {
|
||||||
var causeDictionary: [String: Any]?
|
var causeDictionary: [String: Any]?
|
||||||
if let cause = cause {
|
if let cause = cause {
|
||||||
causeDictionary = [
|
causeDictionary = [
|
||||||
"cause": "\(cause.domain): \(cause.code) \(cause.description)",
|
"cause": "\(cause.domain): \(cause.code) \(cause.description)",
|
||||||
"userInfo": cause.userInfo
|
"userInfo": cause.userInfo
|
||||||
]
|
|
||||||
}
|
|
||||||
return [
|
|
||||||
"error": "\(cameraError.code): \(cameraError.message)",
|
|
||||||
"extra": [
|
|
||||||
"code": cameraError.code,
|
|
||||||
"message": cameraError.message,
|
|
||||||
"cause": causeDictionary ?? NSNull(),
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
"error": "\(cameraError.code): \(cameraError.message)",
|
||||||
|
"extra": [
|
||||||
|
"code": cameraError.code,
|
||||||
|
"message": cameraError.message,
|
||||||
|
"cause": causeDictionary ?? NSNull(),
|
||||||
|
]
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeReactError(_ cameraError: CameraError) -> [String: Any] {
|
func makeReactError(_ cameraError: CameraError) -> [String: Any] {
|
||||||
return makeReactError(cameraError, cause: nil)
|
return makeReactError(cameraError, cause: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class RCTFPSGraph: UIView {
|
class RCTFPSGraph: UIView {
|
||||||
convenience init(frame: CGRect, color: UIColor) {
|
convenience init(frame: CGRect, color: UIColor) {
|
||||||
self.init(frame: frame)
|
self.init(frame: frame)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func onTick(_ tick: CFTimeInterval) {
|
||||||
|
|
||||||
func onTick(_ tick: CFTimeInterval) {
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func RCTTempFilePath(_ ext: String, _ error: ErrorPointer) -> String? {
|
func RCTTempFilePath(_ ext: String, _ error: ErrorPointer) -> String? {
|
||||||
let directory = NSTemporaryDirectory().appending("ReactNative")
|
let directory = NSTemporaryDirectory().appending("ReactNative")
|
||||||
let fm = FileManager.default
|
let fm = FileManager.default
|
||||||
if fm.fileExists(atPath: directory) {
|
if fm.fileExists(atPath: directory) {
|
||||||
try! fm.removeItem(atPath: directory)
|
try! fm.removeItem(atPath: directory)
|
||||||
}
|
}
|
||||||
if !fm.fileExists(atPath: directory) {
|
if !fm.fileExists(atPath: directory) {
|
||||||
try! fm.createDirectory(atPath: directory, withIntermediateDirectories: true)
|
try! fm.createDirectory(atPath: directory, withIntermediateDirectories: true)
|
||||||
}
|
}
|
||||||
return directory
|
return directory
|
||||||
.appending("/").appending(UUID().uuidString)
|
.appending("/").appending(UUID().uuidString)
|
||||||
.appending(".").appending(ext)
|
.appending(".").appending(ext)
|
||||||
}
|
}
|
||||||
|
@ -10,102 +10,102 @@ import UIKit
|
|||||||
import AVFoundation
|
import AVFoundation
|
||||||
|
|
||||||
class ViewController: UIViewController {
|
class ViewController: UIViewController {
|
||||||
|
|
||||||
|
@IBOutlet weak var recordButton: UIButton!
|
||||||
|
|
||||||
|
let cameraView = CameraView()
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
@IBOutlet weak var recordButton: UIButton!
|
cameraView.translatesAutoresizingMaskIntoConstraints = false;
|
||||||
|
view.insertSubview(cameraView, at: 0)
|
||||||
|
NSLayoutConstraint.activate([
|
||||||
|
cameraView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||||
|
cameraView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||||
|
cameraView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||||
|
cameraView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||||
|
])
|
||||||
|
|
||||||
let cameraView = CameraView()
|
recordButton.isHidden = true
|
||||||
|
cameraView.onInitialized = { _ in
|
||||||
override func viewDidLoad() {
|
DispatchQueue.main.async {
|
||||||
super.viewDidLoad()
|
self.recordButton.isHidden = false
|
||||||
|
}
|
||||||
cameraView.translatesAutoresizingMaskIntoConstraints = false;
|
}
|
||||||
view.insertSubview(cameraView, at: 0)
|
cameraView.onInitReady = { json in
|
||||||
NSLayoutConstraint.activate([
|
print("onInitReady:", json ?? "nil")
|
||||||
cameraView.topAnchor.constraint(equalTo: view.topAnchor),
|
}
|
||||||
cameraView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
cameraView.onVideoChunkReady = { json in
|
||||||
cameraView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
print("onVideoChunkReady:", json ?? "nil")
|
||||||
cameraView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
|
||||||
])
|
|
||||||
|
|
||||||
recordButton.isHidden = true
|
|
||||||
cameraView.onInitialized = { _ in
|
|
||||||
DispatchQueue.main.async {
|
|
||||||
self.recordButton.isHidden = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cameraView.onInitReady = { json in
|
|
||||||
print("onInitReady:", json ?? "nil")
|
|
||||||
}
|
|
||||||
cameraView.onVideoChunkReady = { json in
|
|
||||||
print("onVideoChunkReady:", json ?? "nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
Task { @MainActor in
|
|
||||||
await requestAuthorizations()
|
|
||||||
|
|
||||||
cameraView.photo = true
|
|
||||||
cameraView.video = true
|
|
||||||
cameraView.audio = false
|
|
||||||
cameraView.isActive = true
|
|
||||||
cameraView.cameraId = getCameraDeviceId() as NSString?
|
|
||||||
cameraView.didSetProps([])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func isAuthorized(for mediaType: AVMediaType) async -> Bool {
|
Task { @MainActor in
|
||||||
let status = AVCaptureDevice.authorizationStatus(for: mediaType)
|
await requestAuthorizations()
|
||||||
var isAuthorized = status == .authorized
|
|
||||||
if status == .notDetermined {
|
cameraView.photo = true
|
||||||
isAuthorized = await AVCaptureDevice.requestAccess(for: mediaType)
|
cameraView.video = true
|
||||||
}
|
cameraView.audio = false
|
||||||
return isAuthorized
|
cameraView.isActive = true
|
||||||
|
cameraView.cameraId = getCameraDeviceId() as NSString?
|
||||||
|
cameraView.didSetProps([])
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func requestAuthorizations() async {
|
func isAuthorized(for mediaType: AVMediaType) async -> Bool {
|
||||||
guard await isAuthorized(for: .video) else { return }
|
let status = AVCaptureDevice.authorizationStatus(for: mediaType)
|
||||||
guard await isAuthorized(for: .audio) else { return }
|
var isAuthorized = status == .authorized
|
||||||
// Set up the capture session.
|
if status == .notDetermined {
|
||||||
|
isAuthorized = await AVCaptureDevice.requestAccess(for: mediaType)
|
||||||
}
|
}
|
||||||
|
return isAuthorized
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func requestAuthorizations() async {
|
||||||
|
guard await isAuthorized(for: .video) else { return }
|
||||||
|
guard await isAuthorized(for: .audio) else { return }
|
||||||
|
// Set up the capture session.
|
||||||
|
}
|
||||||
|
|
||||||
|
private func getCameraDeviceId() -> String? {
|
||||||
|
let deviceTypes: [AVCaptureDevice.DeviceType] = [
|
||||||
|
.builtInWideAngleCamera
|
||||||
|
]
|
||||||
|
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: deviceTypes, mediaType: .video, position: .back)
|
||||||
|
|
||||||
private func getCameraDeviceId() -> String? {
|
let device = discoverySession.devices.first
|
||||||
let deviceTypes: [AVCaptureDevice.DeviceType] = [
|
|
||||||
.builtInWideAngleCamera
|
|
||||||
]
|
|
||||||
let discoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: deviceTypes, mediaType: .video, position: .back)
|
|
||||||
|
|
||||||
let device = discoverySession.devices.first
|
|
||||||
|
|
||||||
return device?.uniqueID
|
|
||||||
}
|
|
||||||
|
|
||||||
@IBAction
|
return device?.uniqueID
|
||||||
func toggleRecord(_ button: UIButton) {
|
}
|
||||||
if button.title(for: .normal) == "Stop" {
|
|
||||||
|
@IBAction
|
||||||
cameraView.stopRecording(promise: Promise(
|
func toggleRecord(_ button: UIButton) {
|
||||||
resolver: { result in
|
if button.title(for: .normal) == "Stop" {
|
||||||
print("result")
|
|
||||||
}, rejecter: { code, message, cause in
|
cameraView.stopRecording(promise: Promise(
|
||||||
print("error")
|
resolver: { result in
|
||||||
}))
|
print("result")
|
||||||
|
}, rejecter: { code, message, cause in
|
||||||
button.setTitle("Record", for: .normal)
|
print("error")
|
||||||
button.configuration = .filled()
|
}))
|
||||||
|
|
||||||
} else {
|
button.setTitle("Record", for: .normal)
|
||||||
cameraView.startRecording(
|
button.configuration = .filled()
|
||||||
options: [
|
|
||||||
"fileType": "mp4",
|
} else {
|
||||||
"videoCodec": "h265",
|
cameraView.startRecording(
|
||||||
]) { callback in
|
options: [
|
||||||
print("callback", callback)
|
"fileType": "mp4",
|
||||||
}
|
"videoCodec": "h265",
|
||||||
|
]) { callback in
|
||||||
button.setTitle("Stop", for: .normal)
|
print("callback", callback)
|
||||||
button.configuration = .bordered()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
button.setTitle("Stop", for: .normal)
|
||||||
|
button.configuration = .bordered()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user