IVSReplayKitBroadcastSession

Objective-C


@interface IVSReplayKitBroadcastSession : NSObject

Swift

class IVSReplayKitBroadcastSession : NSObject

This is a streamlined version of an IVSBroadcastSession to be used in a Broadcast Upload Extension. The extensions are under strict memory constraints, and this class removes some of the SDK features in exchange for a reduction in memory footprint.

For example, there are no attach or detach APIs. There are 3 devices created for you, corresponding to the screen, app audio, and the microphone. Pass CMSampleBuffers to these devices from your RPBroadcastSampleHandler implementation. In addition, there is no mixer configuration and no access to an IVSBroadcastMixer. This class does not support multiple image layers, and the primary layer (the device screen) is always sized to the full output stream scaled to fit. Transparency is also disabled regardless of what is provided in the video configuration.

Finally, you can not create a preview for the systemImageSource or the session as a whole, they will not render anything.

Note

this will automatically set IVSBroadcastSession.applicationAudioSessionStrategy to noAction.
  • A device that is meant to be associated with the video samples in your RPBroadcastSampleHandler implementation.

    Declaration

    Objective-C

    @property (nonatomic, readonly) id<IVSCustomImageSource> _Nonnull systemImageSource;
  • A device that is meant to be associated with the audioApp samples in your RPBroadcastSampleHandler implementation.

    Declaration

    Objective-C

    @property (nonatomic, readonly) id<IVSCustomAudioSource> _Nonnull systemAudioSource;
  • A device that is meant to be associated with the audioMic samples in your RPBroadcastSampleHandler implementation.

    Declaration

    Objective-C

    @property (nonatomic, readonly) id<IVSCustomAudioSource> _Nonnull microphoneSource;
  • Creates an instance of IVSReplayKitBroadcastSession.

    Declaration

    Objective-C

    - (nullable instancetype)
        initVideoConfiguration:(nonnull IVSVideoConfiguration *)videoConfig
                   audioConfig:(nonnull IVSAudioConfiguration *)audioConfig
                      delegate:(nullable id<IVSBroadcastSessionDelegate>)delegate
                         error:(NSError *_Nullable *_Nullable)outError;

    Parameters

    videoConfig

    the video configuration for the output stream.

    audioConfig

    the audio configuration for the output stream.

    delegate

    an IVSBroadcastSessionDelegate to receive callbacks from the broadcast session.

    outError

    On input, a pointer to an error object. If an error occurs, the pointer is an NSError object that describes the error. If you don’t want error information, pass in nil.

  • Start the configured broadcast session.

    Declaration

    Objective-C

    - (BOOL)startWithURL:(nonnull NSURL *)url
               streamKey:(nonnull NSString *)streamKey
                   error:(NSError *_Nullable *_Nullable)outError;

    Swift

    func start(with url: URL, streamKey: String) throws

    Parameters

    url

    the RTMPS endpoint provided by IVS.

    streamKey

    the broadcaster’s stream key that has been provided by IVS.

    outError

    A reference to an NSError that would be set if an error occurs.

    Return Value

    if the operation is successful. If it returns NO check isReady.

  • Stop the broadcast session, but do not deallocate resources. If this is being called as a result of the ReplayKit broadcast finishing (not just pausing), call broadcastFinished as well to block until the stream properly shuts down. Otherwise iOS may kill the process before the stop call completes, leaving the channel live until it times out.

    Declaration

    Objective-C

    - (void)stop;

    Swift

    func stop()
  • Teardown the underlying session, freeing up resources and synchronously forcing a call to stop to complete. Due to the way RPBroadcastSampleHandler handles deallocation, it is strongly recommended you invoke this in the broadcastFinished callback. Once invoked, this all methods on this instance will either no-op, or return an error.

    Declaration

    Objective-C

    - (void)broadcastFinished;

    Swift

    func broadcastFinished()