78.1.1+

Camera Initialization

To initialize the camera, import the TruvideoSdkCamera module into the controller first. Next, customize the camera settings by utilizing TruvideoSdkCameraConfiguration with appropriate parameters to tailor it to your specific requirements.

Once the configuration is complete, proceed to display the camera view for capturing photos and clips.

import TruvideoSdkCamera

 /**
     Initiates the camera functionality with specified parameters and presents the camera view.
     - Parameters:
        - viewController: The UIViewController or SwiftUIView where the camera view will be presented.
        - completion: A closure to handle the camera result upon completion.
            - cameraResult: The result of the camera operation.
     */
    func cameraInitiate(viewController: UIViewController, _ completion: @escaping (_ cameraResult: TruvideoSdkCameraResult) -> Void) {
        DispatchQueue.main.async {
            // Retrieving information about the device's camera functionality.
            let cameraInfo: TruvideoSdkCameraInformation = TruvideoSdkCamera.camera.getTruvideoSdkCameraInformation()
            
            // Configuring the camera with various parameters based on specific requirements.
            // - Parameter outputPath: Specifies the path for storing the captured data upon completion.
            // Additional parameters can be adjusted to customize camera behavior as needed.
            let configuration = TruvideoSdkCameraConfiguration(
                lensFacing: .back,
                flashMode: .off,
                orientation: nil,
                outputPath: "",
                frontResolutions: [],
                frontResolution: nil,
                backResolutions: [],
                backResolution: nil,
                mode: .videoAndPicture()
                imageFormat: .jpeg

            )
            
            DispatchQueue.main.async {
                viewController.presentTruvideoSdkCameraView(
                    preset: configuration,
                    onComplete: { cameraResult in
                        // Handling completion of camera
                    }
                )
            }
        }
    }

Note The Camera module can run into errors if used by itself because it depends on a shared component. The Video module also uses this same component, and to avoid conflicts, TruVideo manages it within the Video module. This means:

  • If you use only the Camera module → errors may occur.

  • If you use the Camera and Video modules together → everything works smoothly, since the shared component is managed centrally.

Augmented Reality (AR) [BETA]

Introducing the beta version of Augmented Reality (AR) functionality within the TruvideoSDK! This feature brings the power of augmented reality directly into your app, offering users an immersive and interactive experience like never before. To activate this feature, simply call the presentTruvideoSdkAugmentedRealityCameraView method from any UIViewController instance in your app.

Once invoked, users will be transported into the AR camera view, where they can capture stunning AR content, whether it's captivating images or engaging videos.

Upon completion of the AR session, a callback function is triggered, passing along a TruvideoSdkCameraResult. This allows seamless integration of the captured AR content back into your app, enabling further processing or integration with existing features.

import TruvideoSdkCamera

func initiateARCamera(viewController: UIViewController, _ completion: @escaping (_ cameraResult: TruvideoSdkCameraResult) -> Void) {
        DispatchQueue.main.async {
            // Retrieving information about the device's camera functionality.
            let cameraInfo: TruvideoSdkCameraInformation = TruvideoSdkCamera.camera.getTruvideoSdkCameraInformation()
            print("Camera Info:", cameraInfo)
            let configuration = TruvideoSdkARCameraConfiguration(flashMode: .on,mode: .videoAndPicture(mediaCount: 50),orientation: .portrait)
            DispatchQueue.main.async {
                
                self.subscribeToEventsPublisher()
                
                viewController.presentTruvideoSdkARCameraView(preset: configuration, onComplete: { result in
                    self.handle(result: result, viewController: viewController)
                    completion(result)
                })
                
               
            }
        }
    }

Scanner Camera Initialization

To initialize the camera, import the TruvideoSdkCamera module into the controller first. Next, customize the camera settings by utilizing TruvideoSdkCameraConfiguration with appropriate parameters to tailor it to your specific requirements.

Once the configuration is complete, proceed to display the camera view for scanning QR codes .

func initiateScannerCamera(viewController: UIViewController, _ completion: @escaping (_ cameraResult: TruvideoSdkCameraScannerCode) -> Void) {
        DispatchQueue.main.async {
            // Retrieving information about the device's camera functionality.
            let cameraInfo: TruvideoSdkCameraInformation = TruvideoSdkCamera.camera.getTruvideoSdkCameraInformation()
            print("Camera Info:", cameraInfo)
           
            let configuration = TruvideoSdkScannerCameraConfiguration(flashMode: .off,orientation: .portrait,codeFormats: [.code39,.codeQR], autoClose: false,validator: .none)
            
            DispatchQueue.main.async {
                
                self.subscribeToEventsPublisher()
                viewController.presentTruvideoSdkScannerCameraView(preset: configuration, onComplete: { result in
                    if let result = result as? TruvideoSdkCameraScannerCode{
                        completion(result)
                    }
                })
            }
        }

Entities

Preset

TruvideoSdkCameraConfiguration is a public class that encapsulates the configuration parameters for the TruvideoSDK camera. It includes settings such as the lens facing direction (front or back), flash mode, video orientation, output path for saved content, preferred video codec, and camera mode. This structure allows developers to customize camera behavior and output format to suit specific application requirements

public struct TruvideoSdkCameraConfiguration : Decodable {
    public let lensFacing: TruvideoSdkCamera.TruvideoSdkCameraLensFacing
    public let flashMode: TruvideoSdkCamera.TruvideoSdkCameraFlashMode
    public let orientation: TruvideoSdkCamera.TruvideoSdkCameraOrientation?
    public let outputPath: String
    public let videoCodec: TruvideoSdkCamera.TruvideoSdkCameraVideoCodec
    public let mode: TruvideoSdkCamera.TruvideoSdkCameraMode
    public let isHighResolutionPhotoEnabled: Bool = false
    public let isNewLayoutEnabled: Bool = false
    public let imageFormat: TruvideoSdkCameraImageFormat = .jpeg
    public let pauseVideoWhenMovingToBackground: Bool = false
    public let resolutionsManager: TruvideoSdkCameraResolutionManager
    public let shouldIgnorePhysicalOrientationUpdates: Bool
}

Camera information

TruvideoSdkCameraInformation defines a structure holding information about available camera devices within the TruvideoSDK. It contains references to both front and back cameras, providing details such as device ID, lens facing direction, supported resolutions, flash availability, tap-to-focus capability, and sensor orientation. Developers can utilize this data to dynamically configure camera options and tailor the user experience accordingly.

public struct TruvideoSdkCameraInformation {
    public let frontCamera: TruvideoSdkCamera.TruvideoSdkCameraDevice?
    public let backCamera: TruvideoSdkCamera.TruvideoSdkCameraDevice?
}

public struct TruvideoSdkCameraDevice {
    public let id: String
    public let lensFacing: TruvideoSdkCamera.TruvideoSdkCameraLensFacing
    public let resolutions: [TruvideoSdkCamera.TruvideoSdkCameraResolution]
    public let withFlash: Bool
    public let isTapToFocusEnabled: Bool
    public let sensorOrientation: Int
}

Camera Resolution

TruvideoSdkCameraResolution is a class representing a specific resolution supported by a camera device. It includes attributes for width and height, allowing developers to ascertain available resolution options when configuring camera settings within their applications.

public class TruvideoSdkCameraResolution {
    public let width: Int32
    public let height: Int32
}

Lens Facing

TruvideoSdkCameraLensFacing enum represents the two possible directions of a camera lens: back or front.

public enum TruvideoSdkCameraLensFacing {
    case back
    case front
}

Flash Mode

TruvideoSdkCameraFlashMode enum defines two flash modes: off and on, offering developers control over flash functionality during media capture.

public enum TruvideoSdkCameraFlashMode {
    case off
    case on
}

Orientation

TruvideoSdkCameraOrientation enum offers four orientation choices: portrait, landscapeLeft, landscapeRight, and portraitReverse, enabling developers to define camera orientation preferences for media capture.

public enum TruvideoSdkCameraOrientation {
    case portrait
    case landscapeLeft
    case landscapeRight
    case portraitReverse
}

Camera Mode

TruvideoSdkCameraMediaMode includes function modes enabling developers to specify whether the camera should capture both video and pictures, only video, or only pictures, respectively.

  1. videoAndPicture configures capture of videos and pictures with optional parameters: videoCount (maximum videos, nil for no limit), pictureCount (maximum pictures, nil for no limit), and videoDuration (maximum video duration in seconds, nil for no limit). Returns the instance of TruvideoSdkCameraMediaMode.

  2. singleVideo configures capture of one video with an optional duration limit (nil for no limit). Returns a TruvideoSdkCameraMediaMode instance.

  3. singlePicture configures capture of one picture. Returns a TruvideoSdkCameraMediaMode instance.

  4. singleVideoOrPicture configures capture of either one video or one picture with an optional video duration limit (nil for no limit). Returns a TruvideoSdkCameraMediaMode instance.

  5. video configures capture of multiple videos with optional limits on video count and duration (nil for no limit). Returns a TruvideoSdkCameraMediaMode instance.

  6. picture configures capture of multiple pictures with an optional limit on picture count (nil for no limit). Returns a TruvideoSdkCameraMediaMode instance.

  7. videoAndPicture configures capture of videos and pictures with parameters: mediaCount (strict maximum combined videos and pictures) and videoDuration (maximum video duration in seconds, nil for no limit). Returns a TruvideoSdkCameraMediaMode instance.

public struct TruvideoSdkCameraMediaMode {
    /// Creates a configuration for capturing both videos and pictures with optional limits on the number of videos, pictures, and video duration.
    /// - Parameters:
    ///   - videoCount: The maximum number of videos allowed (optional). If `nil`, no limit is enforced.
    ///   - pictureCount: The maximum number of pictures allowed (optional). If `nil`, no limit is enforced.
    ///   - videoDuration: The maximum duration (in seconds) for each video (optional). If `nil`, no duration limit is applied.
    /// - Returns: A `TruvideoSdkCameraMediaMode` instance configured for both video and picture capture.
    public static func videoAndPicture(videoCount: Int? = nil, pictureCount: Int? = nil, videoDuration: Int? = nil) -> TruvideoSdkCameraMediaMode {
        // Implementation
    }
    
    /// Creates a configuration for capturing a single video with an optional duration limit.
    /// - Parameter videoDuration: The maximum duration (in seconds) for the video (optional). If `nil`, no duration limit is applied.
    /// - Returns: A `TruvideoSdkCameraMediaMode` instance configured for a single video.
    public static func singleVideo(videoDuration: Int? = nil) -> TruvideoSdkCameraMediaMode {
        // Implementation
    }
    
    /// Creates a configuration for capturing a single picture.
    /// - Returns: A `TruvideoSdkCameraMediaMode` instance configured for a single picture.
    public static func singlePicture() -> TruvideoSdkCameraMediaMode {
        // Implementation
    }
    
    /// Creates a configuration allowing capture of either a single video or a single picture, with an optional video duration limit.
    /// - Parameter videoDuration: The maximum duration (in seconds) for the video (optional). If `nil`, no duration limit is applied.
    /// - Returns: A `TruvideoSdkCameraMediaMode` instance configured for either a single video or picture.
    public static func singleVideoOrPicture(videoDuration: Int? = nil) -> TruvideoSdkCameraMediaMode {
        // Implementation
    }
    
    /// Creates a configuration for capturing multiple videos with optional limits on the number of videos and video duration.
    /// - Parameters:
    ///   - videoCount: The maximum number of videos allowed (optional). If `nil`, no limit is enforced.
    ///   - videoDuration: The maximum duration (in seconds) for each video (optional). If `nil`, no duration limit is applied.
    /// - Returns: A `TruvideoSdkCameraMediaMode` instance configured for video capture.
    public static func video(videoCount: Int? = nil, videoDuration: Int? = nil) -> TruvideoSdkCameraMediaMode {
        // Implementation
    }
    
    /// Creates a configuration for capturing multiple pictures with an optional limit on the number of pictures.
    /// - Parameter pictureCount: The maximum number of pictures allowed (optional). If `nil`, no limit is enforced.
    /// - Returns: A `TruvideoSdkCameraMediaMode` instance configured for picture capture.
    public static func picture(pictureCount: Int? = nil) -> TruvideoSdkCameraMediaMode {
        // Implementation
    }
    
    /// Creates a configuration for capturing a combined total of videos and pictures, with a strict limit on the total number of media items and an optional video duration limit.
    /// - Parameters:
    ///   - mediaCount: The maximum combined number of videos and pictures allowed.
    ///   - videoDuration: The maximum duration (in seconds) for each video (optional). If `nil`, no duration limit is applied.
    /// - Returns: A `TruvideoSdkCameraMediaMode` instance configured for a limited number of videos and pictures.
    public static func videoAndPicture(mediaCount: Int, videoDuration: Int? = nil) -> TruvideoSdkCameraMediaMode {
        // Implementation
    }
}

Result

The results of TruvideoSDK camera operations, present an array of TruvideoSdkCameraMedia. Each TruvideoSdkCameraMedia object holds essential video attributes like createdAt, filePath, type, cameraLensFacing, rotation, resolution, and duration. Meanwhile, type defines the TruvideoSdkCameraMedia as photo or video as TruvideoSdkCameraMediaType.clip defines video and TruvideoSdkCameraMediaType.photo defines photo. This comprehensive data structure empowers developers to manage captured media seamlessly, facilitating integration and post-processing within their applications.

public struct TruvideoSdkCameraMedia {
    public let id: UUID
    public let createdAt: Double
    public let filePath: String
    public let type: TruvideoSdkCameraMediaType
    public let lensFacing: TruvideoSdkCameraLensFacing
    public let orientation: TruvideoSdkCameraOrientation
    public let resolution: TruvideoSdkCameraResolution
    public let duration: Int64
}

public enum TruvideoSdkCameraMediaType {
    case clip
    case photo
}

Camera Events

The SDK communicates various camera-related events to consumers through a publisher that sends TruvideoSdkCameraEvent objects containing details about the event, including its type and creation date.

Event Observer

To observe camera events, consumers can register an observer using the provided Observer class. The observer listens for events and logs details about them.

Example Usage

import TruvideoSdkCamera
import Combine

final class MyViewModel: ObservableObject {
    var disposeBag = Set<AnyCancellable>()

    private func subscribeToEventsPublisher() {
        TruvideoSdkCamera
            .events
            .sink { cameraEvent in
                // Handle the TruvideoSdkCameraEvent cases
            }
            .store(in: &disposeBag)
    }
}

Event Class: TruvideoSdkCameraEvent

This class encapsulates the details of an event, including the event type, associated data, and the event's creation date.

Properties:

  • type: TruvideoSdkCameraEventType The type of event that occurred.

  • data: TruvideoSdkCameraEventData The data associated with the event. This data can vary depending on the event type.

  • createdAt: Date The date and time when the event was created.

public struct TruvideoSdkCameraEvent {
    /// Event type
    public let type: TruvideoSdkCameraEventType
    public let data: TruvideoSdkCameraEventData
    /// Event creation date
    public let createdAt: Date
}

Event Type Enum: TruvideoSdkCameraEventType

The TruvideoSdkCameraEventType enum defines the types of events that can be emitted by the Camera SDK.

Enum Values:

  • RecordingStarted Triggered when recording starts.

  • RecordingFinished Triggered when recording finishes.

  • RecordingPaused Triggered when recording is paused.

  • RecordingResumed Triggered when recording resumes.

  • PictureTaken Triggered when a picture is taken.

  • CameraFlipped Triggered when the camera is flipped between front and back.

  • ResolutionChanged Triggered when the camera resolution is changed.

  • FlashModeChanged Triggered when the flash mode is changed.

  • ZoomChanged Triggered when the zoom level is changed.

  • MediaDeleted Triggered when media is deleted.

  • MediaDiscard Triggered when media is discarded.

  • Continue Represents an event to continue clicked for saving photos and videos.

public enum TruvideoSdkCameraEventType {
    /// Flash mode change, will have the new flash mode as associated value
    case truvideoSdkCameraEventFlashModeChanged(flashMode: TruvideoSdkCameraFlashMode)
    /// Camera flipped, will have the new lens facing as associated value
    case truvideoSdkCameraEventCameraFlipped(lensFacing: TruvideoSdkCameraLensFacing)
    /// Successful completion, will have the array of media elements as associated value
    case truvideoSdkCameraEventMediaContinue(media: [TruvideoSdkCameraMedia])
    /// Deleted file, will have the deleted media as associated value
    case truvideoSdkCameraEventMediaDeleted(media: TruvideoSdkCameraMedia)
    /// Media discard on camera dismissal, will have the array of media as associated value
    case truvideoSdkCameraEventMediaDiscard(media: [TruvideoSdkCameraMedia])
    /// Picture taken, will have the media element as associated value
    case truvideoSdkCameraEventPictureTaken(media: TruvideoSdkCameraMedia)
    /// Video recording completion, will have the new created media as associated value
    case truvideoSdkCameraEventRecordingFinished(media: TruvideoSdkCameraMedia)
    /// Recording paused, will have the resolution, orientation and lens facing as associated values
    case truvideoSdkCameraEventRecordingPaused(
        resolution: TruvideoSdkCameraResolution,
        orientation: TruvideoSdkCameraOrientation,
        lensFacing: TruvideoSdkCameraLensFacing
    )
    /// Recording resumed, will have the resolution, orientation and lens facing as associated values
    case truvideoSdkCameraEventRecordingResumed(
        resolution: TruvideoSdkCameraResolution,
        orientation: TruvideoSdkCameraOrientation,
        lensFacing: TruvideoSdkCameraLensFacing
    )
    /// Recording started, will have the resolution, orientation and lens facing as associated values
    case truvideoSdkCameraEventRecordingStarted(
        resolution: TruvideoSdkCameraResolution,
        orientation: TruvideoSdkCameraOrientation,
        lensFacing: TruvideoSdkCameraLensFacing
    )
    /// Camera resolution updated, will have the new resolution as associated value
    case truvideoSdkCameraEventResolutionChanged(resolution: TruvideoSdkCameraResolution)
    /// Camera zoom updated, will have the new zoom value as associated value
    case truvideoSdkCameraEventZoomChanged(zoom: Float)
}

Last updated

Was this helpful?