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
}
)
}
}
}
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.
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.singleVideo
configures capture of one video with an optional duration limit (nil for no limit). Returns a TruvideoSdkCameraMediaMode instance.singlePicture
configures capture of one picture. Returns a TruvideoSdkCameraMediaMode instance.singleVideoOrPicture
configures capture of either one video or one picture with an optional video duration limit (nil for no limit). Returns a TruvideoSdkCameraMediaMode instance.video
configures capture of multiple videos with optional limits on video count and duration (nil for no limit). Returns a TruvideoSdkCameraMediaMode instance.picture
configures capture of multiple pictures with an optional limit on picture count (nil for no limit). Returns a TruvideoSdkCameraMediaMode instance.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
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
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?