MultiStream

@RequiresApi(api = 21)
class MultiStream(context: Context, connectCheckerRtmpList: Array<ConnectChecker>?, connectCheckerRtspList: Array<ConnectChecker>?, connectCheckerSrtList: Array<ConnectChecker>?, connectCheckerUdpList: Array<ConnectChecker>?, videoSource: VideoSource, audioSource: AudioSource) : StreamBase

Created by pedro on 17/7/24.

Experiment class.

Support multiple streams in rtmp and rtsp at same time. You must set the same number of ConnectChecker that you want use.

For example. 2 RTMP and 1 RTSP: stream1, stream2, stream3 (stream1 and stream2 are ConnectChecker for RTMP. stream3 is ConnectChecker for RTSP)

MultiStream multiStream = new MultiStream(openGlView, new ConnectChecker[]{ stream1, stream2 }, new ConnectChecker[]{ stream3 });

You can set an empty array or null if you don't want use a protocol new MultiStream(openGlView, new ConnectChecker[]{ stream1, stream2 }, null); //RTSP protocol is not used

In order to use start, stop and other calls you must send type of stream and index to execute it. Example (using previous example interfaces):

multiStream.startStream(MultiType.RTMP, 1, endpoint); //stream2 is started multiStream.stopStream(MultiType.RTSP, 0); //stream3 is stopped multiStream.getStreamClient(MultiType.RTMP, 0).retry(delay, reason, backupUrl) //retry stream1

NOTE: If you call this methods nothing is executed:

multiStream.startStream(endpoint); multiStream.stopStream();

The rest of methods without MultiType and index means that you will execute that command in all streams. Read class code if you need info about any method.

Constructors

Link copied to clipboard
constructor(context: Context, connectCheckerRtmpList: Array<ConnectChecker>?, connectCheckerRtspList: Array<ConnectChecker>?, connectCheckerSrtList: Array<ConnectChecker>?, connectCheckerUdpList: Array<ConnectChecker>?)
constructor(context: Context, connectCheckerRtmpList: Array<ConnectChecker>?, connectCheckerRtspList: Array<ConnectChecker>?, connectCheckerSrtList: Array<ConnectChecker>?, connectCheckerUdpList: Array<ConnectChecker>?, videoSource: VideoSource, audioSource: AudioSource)

Properties

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Functions

Link copied to clipboard

Change audio source. Must be called after prepareAudio.

Link copied to clipboard

Change video source to Camera1 or Camera2. Must be called after prepareVideo.

Link copied to clipboard
fun forceCodecType(codecTypeVideo: CodecUtil.CodecType, codecTypeAudio: CodecUtil.CodecType)
Link copied to clipboard
fun forceFpsLimit(enabled: Boolean)

Force stream to work with fps selected in prepareVideo method. Must be called before prepareVideo. This is not recommend because could produce fps problems.

Link copied to clipboard

Get glInterface used to render video. This is useful to send filters to stream. Must be called after prepareVideo.

Link copied to clipboard
Link copied to clipboard

return surface texture that can be used to render and encode custom data. Return null if video not prepared. start and stop rendering must be managed by the user.

Link copied to clipboard

Pause record. Ignored if you are not recording.

Link copied to clipboard
fun prepareAudio(sampleRate: Int, isStereo: Boolean, bitrate: Int, echoCanceler: Boolean = false, noiseSuppressor: Boolean = false): Boolean

Necessary only one time before start stream or record. If you want change values stop stream and record is necessary.

Link copied to clipboard
fun prepareVideo(width: Int, height: Int, bitrate: Int, fps: Int = 30, iFrameInterval: Int = 2, rotation: Int = 0, profile: Int = -1, level: Int = -1): Boolean

Necessary only one time before start preview, stream or record. If you want change values stop preview, stream and record is necessary.

Link copied to clipboard
fun release()
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Resume record. Ignored if you are not recording and in pause mode.

Link copied to clipboard
Link copied to clipboard
fun setEncoderErrorCallback(encoderErrorCallback: EncoderErrorCallback?)

Set a callback to know errors related with Video/Audio encoders

Link copied to clipboard
Link copied to clipboard
fun setOrientation(orientation: Int)

Change stream orientation depend of activity orientation. This method affect to preview and stream. Must be called after prepareVideo.

Link copied to clipboard
Link copied to clipboard

Set video bitrate in bits per second while streaming.

Link copied to clipboard
Link copied to clipboard
fun startPreview(surfaceView: SurfaceView)

Start preview in the selected SurfaceView. Must be called after prepareVideo.

fun startPreview(textureView: TextureView)

Start preview in the selected TextureView. Must be called after prepareVideo.

fun startPreview(surfaceTexture: SurfaceTexture, width: Int, height: Int)

Start preview in the selected SurfaceTexture. Must be called after prepareVideo.

fun startPreview(surface: Surface, width: Int, height: Int)

Start preview in the selected Surface. Must be called after prepareVideo.

Link copied to clipboard

Start record.

Link copied to clipboard
fun startStream(endPoint: String)

Start stream.

fun startStream(type: MultiType, index: Int, endPoint: String)
Link copied to clipboard

Stop preview. Must be called after prepareVideo.

Link copied to clipboard
Link copied to clipboard

Stop stream.

fun stopStream(type: MultiType, index: Int)