Breadcrumbs

VMSPlayerController. iOS

Uses pusher-websocket-swift of 10.0.1 version with some fixes for VMSMobileSDK purposes.

https://github.com/pusher/pusher-websocket-swift/tree/master

Initialization

static func initialization(viewModel: VMSPlayerViewModel, delegate: VMSPlayerDelegate?) -> VMSPlayerController

VMSPlayerViewModel

init(
    camera: VMSCamera,
    groupCameras: [VMSCamera]?,
    user: VMSUser,
    translations: VMSPlayerTranslations,
    playerApi: VMSPlayerApi,
    options: VMSPlayerOptions
)

camera - camera you want to open player for

groupCameras - if you set this parameter you can swipe inside player to change camera playing in player

user - current user

translations - dictionary of translations needed inside player. You can make it based on the on you receive from server. See StaticsApi for details

playerApi - basically VMSMobileSDK object. Or custom object that implements CameraApiPlayerApi and CameraEventsApi

options - custom options you can set for player

VMSPlayerOptions

init(
    language: VMSLanguage?,
    allowVibration: Bool?,
    allowSoundOnStart: Bool?l,
    markTypes: [VMSEventType],
    videoRates: [VMSVideoRates]?
)

language - default is english

allowVibration - set to no if you don't want device to vibrant when clicking on some options. Default is yes

allowSoundOnStart - indicates if allow player to start audio if camera has sound right after player loaded. Default is true

markTypes - array of available mark types. See StaticsApi for more information

videoRates - array of available player video rates. See StaticsApi for more information

VMSOpenPlayerOptions

Additionally you can set open options if you need to open player in specific conditions.

init(
    event: VMSEvent?,
    archiveDate: Date?,
    showEventEdit: Bool,
    popNavigationAfterEventEdit: Bool,
    pushEventsListAfterEventEdit: Bool,
    openArchive: Bool
)

event - event you want to show / edit in player. Parameter isEventArchive will be set to true automatically

archiveDate - set date if you need to open archive at specific date

showEventEdit - set this parameter to true if you want to open event editing screen. event should be set as well

popNavigationAfterEventEdit - set this parameter to true if you want player controller to be popped after saving or canceling event editing

pushEventsListAfterEventEdit - set this parameter to true if you want to show events list screen after saving or canceling event editing

openArchive - set this parameter to true if you want to open archive in player controller

VMSPlayerDelegate

VMSPlayerController uses VMSPlayerDelegate

playerDidAppear() - get called when player loaded and appeared on screen

gotoEventsList(camera: VMSCamera) - get called when button «Events list» pressed

soundChanged(isOn: Bool) - get called when button «mute/unmute» pressed

screenshotCreated(image: UIImage, cameraName: String, date: Date) - get called when screenshot captured fom current frame

logPlayerEvent(event: String) - if you want to log user activity, this method provides the action's names to transfer to your app

playerDidReceiveError(message: String) - show player error

playerDidReceiveInfo(message: String) - show player info

dismissPlayerErrors() - if you show views for error that have lifetime, dismiss them

Update player

Player respond to these notification names in order to handle them ad be updated accordingly

extension Notification.Name {
    static let noConnectionError
    static let updateUserPermissions
    static let updateUserCameras
    static let updateMarks
    static let updateMark
}

noConnectionError - post this notification in case there is no connection. Player will stop playing

updateUserPermissions - in case user's permissions were changed player needs to be updated

updateUserCameras - in case you received camerasUpdate socket and current camera was removed from user's account player will be closed properly. It's a preferable way of closing player

updateMarks - in case you received socket push markCreated or markDeleted use this notification to update player

updateMark - in case you received socket push markUpdated use this notification to update player