У меня есть класс, который смотрит поток rtmp с помощью ExoPLayer:
player = ExoPlayerFactory.newSimpleInstance(context)
val rtmpDataSourceFactory = RtmpDataSourceFactory()
val videoSource = ProgressiveMediaSource.Factory(rtmpDataSourceFactory)
.createMediaSource(Uri.parse(streamURL))
player.prepare(videoSource)
player.setVideoTextureView(playerView)
player.playWhenReady = true
playerView
- это TextureView, выбранный вместо SurfaceView, потому что мне также нужно делать скриншоты из потока.
Насколько я знаю, ExoPlayer не имеет методов для потоковой записи, только для загрузки, поэтому проблема в том, как мне записать поток RTMP? Я искал много библиотек, и вопросы Stack, но все еще не могу найти чистое, нормальное решение.
В настоящее время я пытаюсь записать поток с помощью основного MediaRecorder, с помощью документации разработчика Android, но я все еще не понимаю,как MediaRecorder получает данные потока или хотя бы поверхность.
val path = "${Environment.getExternalStorageDirectory()}${File.separator}${Environment.DIRECTORY_DCIM}${File.separator}${"FILE_NAME"}"
recorder = MediaRecorder().apply {
setVideoSource(MediaRecorder.VideoSource.SURFACE)
setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
setOutputFile(path)
start()
}