android 在 SurfaceView 的文件中记录 RTSP 流
android Record a RTSP stream in a file from SurfaceView
我正在使用摄像头的 IP 将 RTPS 实时流(来自摄像头)显示到 SurfaceView (my_surface_view) 中。
为此,我正在使用以下库 -> 实现 'com.github.pedroSG94.vlc-example-streamplayer:libvlc:2.5.14v3'
我需要实现一项功能,以便用户可以将流记录到文件中,但是当我尝试使用 mediaRecorder 从我的表面视图记录我的视频时,我得到:java.lang.IllegalArgumentException:不是持久表面
这是我的代码:
mediaRecorder.setInputSurface(my_surface_view.holder.hurface)
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264)
mediaRecorder.setVideoEncodingBitRate(512 * 1000)
mediaRecorder.setVideoFrameRate(30)
mediaRecorder.setVideoSize(640, 480)
mediaRecorder.setOutputFile(File(getVideosDirectory(), "TEST.mp4").path)
mediaRecorder.prepare()
mediaRecorder.start()
我在互联网上看过,但没有找到任何库或示例。现在我被困住了,没有想法
我已经使用 FFmpeg 做到了 ->
implementation 'com.arthenica:mobile-ffmpeg-full-gpl:4.2.2.LTS'
用于开始录制(确保它不在主线程上),并且文件具有 .mkv 扩展名
runOnIoThread {
FFmpeg.execute("-i $url -acodec copy -bsf:a aac_adtstoasc -vcodec copy ${file.path}")
}
并停止它 -> FFmpeg.cancel()
我正在使用摄像头的 IP 将 RTPS 实时流(来自摄像头)显示到 SurfaceView (my_surface_view) 中。 为此,我正在使用以下库 -> 实现 'com.github.pedroSG94.vlc-example-streamplayer:libvlc:2.5.14v3'
我需要实现一项功能,以便用户可以将流记录到文件中,但是当我尝试使用 mediaRecorder 从我的表面视图记录我的视频时,我得到:java.lang.IllegalArgumentException:不是持久表面
这是我的代码:
mediaRecorder.setInputSurface(my_surface_view.holder.hurface)
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264)
mediaRecorder.setVideoEncodingBitRate(512 * 1000)
mediaRecorder.setVideoFrameRate(30)
mediaRecorder.setVideoSize(640, 480)
mediaRecorder.setOutputFile(File(getVideosDirectory(), "TEST.mp4").path)
mediaRecorder.prepare()
mediaRecorder.start()
我在互联网上看过,但没有找到任何库或示例。现在我被困住了,没有想法
我已经使用 FFmpeg 做到了 ->
implementation 'com.arthenica:mobile-ffmpeg-full-gpl:4.2.2.LTS'
用于开始录制(确保它不在主线程上),并且文件具有 .mkv 扩展名
runOnIoThread {
FFmpeg.execute("-i $url -acodec copy -bsf:a aac_adtstoasc -vcodec copy ${file.path}")
}
并停止它 -> FFmpeg.cancel()