Basic instantiation code
Given videoId
and settings
the following code streams the corresponding video:
class ExampleVideoMetadataProvider {
}
extension ExampleVideoMetadataProvider: VideoMetadataProvider {
func requestVideoMetadata(
videoId: String,
currentVideoMetadata: VideoMetadata?,
playbackState: PlaybackState
) async throws -> VideoMetadata {
SWVideoMetadataCleanModel.make(
videoId: videoId,
title: "title",
image: "https://www.image.jpg",
eventId: "eventId",
programDateTime: "2018-07-15T13:40:15.681Z",
trimIn: 0,
trimOut: 100,
assetState: .vod,
ad: "https://divademo.deltatre.net/DIVAProduct/www/Data/Vast/skippable2.xml",
sources: [
SWVideoSourceCleanModel.make(
uri: "https://vod-ffwddevamsmediaservice.streaming.mediaservices.windows.net/6e8b64ef-feb3-4ea9-9c63-32ef7b45e1dd/6e8b64ef-feb3-4ea9-9c63-32ef7b45.ism/manifest(format=m3u8-aapl,filter=hls)",
format: "HLS"
)
],
audioTracks: [SWAudioTrackCleanModel(_id: "English1" , selector: "English", label: "English")],
defaultAudioTrackId: "English1",
dvrType: .full
)
}
}
class FullscreenViewController: UIViewController {
var diva: Diva?
override func viewDidLoad() {
super.viewDidLoad()
Diva.isDebugMode = false
Diva.mediaAnalyticsEnabled = true
var config = DivaConfiguration(
settings: settings,
dictionary: dictionary,
videoId: videoId,
videoMetadataProvider: ExampleVideoMetadataProvider()
)
config.settingsError = "Settings Error"
config.networkError = "Network Error"
config.onVideoError = { error, videoMetadata in
print("[VideoError] VideoError received for video: \(videoMetadata?.videoId ?? "unknown Id")")
print("[VideoError] error: \(error.type.rawValue) message: \(error.message)")
}
config.onAnalyticEvent = { [weak self] event in
guard self != nil else { return }
var parameters = event.eventArguments
parameters["interactive"] = "\(event.interactive)"
Analytics.logEvent(event.type, parameters: parameters)
print("[EVENT] \(event.type)")
}
config.onMediaAnalyticsUpdate = { [weak self] update in
guard self != nil else { return }
await ConvivaAnalytics.shared.handle(update)
await YouboraAnalytics.shared.handle(update)
}
config.onExit = { [weak self] in
self?.dismiss(animated: true)
}
Task { @MainActor [weak self] in
guard let self else { return }
self.diva = await Diva(configuration: config)
self.diva?.setTargetView(view: self.view, viewController: self)
}
}
deinit {
diva = nil
}
}