IMAStreamManager.h
1 //
2 // IMAStreamManager.h
3 // GoogleIMA3
4 //
5 // Copyright (c) 2015 Google Inc. All rights reserved.
6 //
7 // Declares IMAStreamManager interface that manages stream playback.
8 // The interface represents an abstract API. There can be only one stream managed by a single
9 // stream manager.
10 // The implementing code should respond to the callbacks as defined in IMAStreamManagerDelegate.
11 //
12 // A typical stream playback session:
13 // 1. Stream manager is retrieved. Delegate is set.
14 // 2. Stream playback will meanwhile start because of the adsLoader requestStream call.
15 // 3. delegate.didReceiveAdEvent: is called with a kIMAAdBreakStarted event.
16 // 4. Publisher should now hide content controls or disable seeking. Ad is now playing
17 // 5. delegate.didReceiveAdEvent: is called with a kIMAAdStart event. This event comes with
18 // information about the ad.
19 // 6. delegate.didReceiveAdEvent is called with ad events like quartiles, midpoint and complete.
20 // 7. Ad break finishes and delegate.didReceiveAdEvent is called with a kIMAAdBreakEnded event.
21 // 8. Publisher should now show content controls or reenable seeking. Content is now playing.
22 // playback should resume now.
23 // It is possible to detach the delegate and destroy the ads manager.
24 //
25 // Steps 3-8 may repeat several times for the same stream if there are multiple ads inserted in
26 // the stream.
27 
28 #import <Foundation/Foundation.h>
29 
30 #import "IMAAdError.h"
31 #import "IMAAdEvent.h"
32 #import "IMAAdPlaybackInfo.h"
33 #import "IMAAdsRenderingSettings.h"
34 #import "IMAContentPlayhead.h"
35 
36 @class IMACuepoint;
37 @class IMAStreamManager;
38 
39 #pragma mark IMAStreamManagerDelegate
40 
45 
52 - (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdEvent:(IMAAdEvent *)event;
53 
60 - (void)streamManager:(IMAStreamManager *)streamManager didReceiveAdError:(IMAAdError *)error;
61 
62 
73 - (void)streamManager:(IMAStreamManager *)streamManager
74  adDidProgressToTime:(NSTimeInterval)time
75  adDuration:(NSTimeInterval)adDuration
76  adPosition:(NSInteger)adPosition
77  totalAds:(NSInteger)totalAds
78  adBreakDuration:(NSTimeInterval)adBreakDuration;
79 
80 @end
81 
82 #pragma mark - IMAStreamManager
83 
87 @interface IMAStreamManager : NSObject
88 
92 @property(nonatomic, weak) NSObject<IMAStreamManagerDelegate> *delegate;
93 
98 @property(nonatomic, copy, readonly) NSString *streamId;
99 
106 - (void)initializeWithAdsRenderingSettings:(IMAAdsRenderingSettings *)adsRenderingSettings;
107 
116 - (NSTimeInterval)streamTimeForContentTime:(NSTimeInterval)contentTime;
117 
126 - (NSTimeInterval)contentTimeForStreamTime:(NSTimeInterval)streamTime;
127 
137 - (IMACuepoint *)previousCuepointForStreamTime:(NSTimeInterval)streamTime;
138 
142 - (instancetype)init NS_UNAVAILABLE;
143 
147 - (void)destroy;
148 
149 @end
NSObject< IMAStreamManagerDelegate > * delegate
The IMAStreamManagerDelegate to notify with events during stream playback.
Definition: IMAStreamManager.h:92
Set of properties that influence how ads are rendered.
Definition: IMAAdsRenderingSettings.h:69
Simple data class used to transport ad playback information.
Definition: IMAAdEvent.h:113
The IMAStreamManager class is responsible for playing streams.
Definition: IMAStreamManager.h:87
Data object representation of a cuepoint for a single ad break.
Definition: IMACuepoint.h:13
instancetype NS_UNAVAILABLE()
:nodoc:
A callback protocol for IMAStreamManager.
Definition: IMAStreamManager.h:44
Surfaces an error that occurred during ad loading or playing.
Definition: IMAAdError.h:151
void destroy()
Cleans the stream manager&#39;s internal state for proper deallocation.
NSString * streamId
Identifier used during dynamic ad insertion to uniquely identify a stream.
Definition: IMAStreamManager.h:98