@@ -56,6 +56,13 @@ val username = "admin"
5656val password = " secret"
5757val rtsp = Rtsp ()
5858rtsp.init (uri, username, password)
59+ rtsp.setStatusListener(object : RtspStatusListener {
60+ override fun onConnecting () {}
61+ override fun onConnected (sdpInfo : SdpInfo ) {}
62+ override fun onDisconnected () {}
63+ override fun onUnauthorized () {}
64+ override fun onFailed (message : String? ) {}
65+ })
5966rtsp.setSurfaceView(binding.svVideo)
6067rtsp.start()
6168// ...
@@ -68,23 +75,16 @@ rtsp.stop()
6875e.g. for writing video stream into MP4 via muxer.
6976
7077``` kotlin
71- val rtspStatusListener = object : RtspStatusListener {
72- override fun onConnecting () {}
73- override fun onConnected (sdpInfo : SdpInfo ) {}
78+ // ... build rtsp
79+ rtsp.setFrameListener(object : RtspFrameListener {
7480 override fun onVideoNalUnitReceived (frame : Frame ? ) {
7581 // Send raw H264/H265 NAL unit to decoder
7682 }
7783 override fun onVideoFrameReceived (width : Int , height : Int , mediaImage : Image ? , yuv420Bytes : ByteArray? , bitmap : Bitmap ? ) {}
7884 override fun onAudioSampleReceived (frame : Frame ? ) {
7985 // Send raw audio to decoder
8086 }
81- override fun onDisconnected () {}
82- override fun onUnauthorized () {}
83- override fun onFailed (message : String? ) {}
84- }
85- // ... build rtsp
86- rtsp.setStatusListener(rtspStatusListener)
87- rtsp.setSurfaceView(null ) // or don't set surface view
87+ })
8888rtsp.start(autoPlayAudio = false ) // turn off autoPlayAudio
8989// ...
9090rtsp.stop()
@@ -95,9 +95,8 @@ rtsp.stop()
9595### 3) You can still use library with H264/H265 to YUV MediaImage decoding
9696
9797``` kotlin
98- val rtspStatusListener = object : RtspStatusListener {
99- override fun onConnecting () {}
100- override fun onConnected (sdpInfo : SdpInfo ) {}
98+ // ... build rtsp
99+ rtsp.setFrameListener(object : RtspFrameListener {
101100 override fun onVideoNalUnitReceived (frame : Frame ? ) {}
102101 override fun onVideoFrameReceived (width : Int , height : Int , mediaImage : Image ? , yuv420Bytes : ByteArray? , bitmap : Bitmap ? ) {
103102 if (mediaImage != null ) {
@@ -112,13 +111,7 @@ val rtspStatusListener = object : RtspStatusListener {
112111 override fun onAudioSampleReceived (frame : Frame ? ) {
113112 // Send raw audio to decoder
114113 }
115- override fun onDisconnected () {}
116- override fun onUnauthorized () {}
117- override fun onFailed (message : String? ) {}
118- }
119- // ... build rtsp
120- rtsp.setStatusListener(rtspStatusListener)
121- rtsp.setSurfaceView(null ) // or don't set surface view
114+ })
122115rtsp.setRequestMediaImage(true )
123116rtsp.start(autoPlayAudio = false ) // turn off autoPlayAudio
124117// ...
@@ -130,29 +123,22 @@ rtsp.stop()
130123### 4) You can still use library with H264/H265 to YUV ByteArray decoding
131124
132125``` kotlin
133- val rtspStatusListener = object : RtspStatusListener {
134- override fun onConnecting () {}
135- override fun onConnected (sdpInfo : SdpInfo ) {}
126+ // ... build rtsp
127+ rtsp.setFrameListener(object : RtspFrameListener {
136128 override fun onVideoNalUnitReceived (frame : Frame ? ) {}
137129 override fun onVideoFrameReceived (width : Int , height : Int , mediaImage : Image ? , yuv420Bytes : ByteArray? , bitmap : Bitmap ? ) {
138130 // you can decode YUV to Bitmap by Android New RenderScript Toolkit that integrated in the library
139131 // or your custom decoder
140132 /* *
141133 if (yuv420Bytes != null) {
142- Toolkit.yuvToRgbBitmap(yuv420Bytes, width, height, YuvFormat.YUV_420_888)
134+ Toolkit.yuvToRgbBitmap(yuv420Bytes, width, height, YuvFormat.YUV_420_888)
143135 }
144136 */
145137 }
146138 override fun onAudioSampleReceived (frame : Frame ? ) {
147139 // Send raw audio to decoder
148140 }
149- override fun onDisconnected () {}
150- override fun onUnauthorized () {}
151- override fun onFailed (message : String? ) {}
152- }
153- // ... build rtsp
154- rtsp.setStatusListener(rtspStatusListener)
155- rtsp.setSurfaceView(null ) // or don't set surface view
141+ })
156142rtsp.setRequestYuvBytes(true )
157143rtsp.start(autoPlayAudio = false ) // turn off autoPlayAudio
158144// ...
@@ -165,30 +151,23 @@ rtsp.stop()
165151### 5) You can still use library with H264/H265 to Bitmap decoding
166152
167153``` kotlin
168- val rtspStatusListener = object : RtspStatusListener {
169- override fun onConnecting () {}
170- override fun onConnected (sdpInfo : SdpInfo ) {}
154+ // ... build rtsp
155+ rtsp.setFrameListener(object : RtspFrameListener {
171156 override fun onVideoNalUnitReceived (frame : Frame ? ) {}
172157 override fun onVideoFrameReceived (width : Int , height : Int , mediaImage : Image ? , yuv420Bytes : ByteArray? , bitmap : Bitmap ? ) {
173158 if (bitmap != null ) {
174159 // Just use it!
175160 /* *
176161 binding.img.run {
177- post { setImageBitmap(bitmap?.removeTimestamp()) }
178- }
162+ post { setImageBitmap(bitmap?.removeTimestamp()) }
163+ }
179164 */
180165 }
181166 }
182167 override fun onAudioSampleReceived (frame : Frame ? ) {
183168 // Send raw audio to decoder
184169 }
185- override fun onDisconnected () {}
186- override fun onUnauthorized () {}
187- override fun onFailed (message : String? ) {}
188- }
189- // ... build rtsp
190- rtsp.setStatusListener(rtspStatusListener)
191- rtsp.setSurfaceView(null ) // or don't set surface view
170+ })
192171rtsp.setRequestBitmap(true )
193172rtsp.start(autoPlayAudio = false ) // turn off autoPlayAudio
194173// ...
@@ -215,3 +194,6 @@ launch {
215194
216195* https://github.com/alexeyvasilyev/rtsp-client-android
217196
197+
198+
199+
0 commit comments