我目前有同样的问题。但是,我设法通过使用 H263 编解码器的 libstreaming 获得了一些更好的结果。视频质量仍然不完全令人满意,但它是 720p。
我已经使用RTSPServer 基于libstreaming example 1 构建了我的应用程序。以下是相关代码:
private Session mSession;
[...]
mSession = SessionBuilder.getInstance()
.setContext(getApplicationContext())
.setAudioEncoder(SessionBuilder.AUDIO_AAC)
.setAudioQuality(new AudioQuality(8000, 16000))
.setVideoEncoder(SessionBuilder.VIDEO_H263)
.setVideoQuality(new VideoQuality(1280,720,30,2000000))
.setSurfaceView(mSurfaceView)
.build();
我不知道如何使用 openCV 处理流,但例如,我能够使用 VLC 看到它:
C:\>"C:\<your VLC installation path>\vlc.exe" rtsp://<your device IP address>:1234 -f
编辑:我设法使用 H264 编码器以 720p 流式传输,并强制使用 MediaRecorder 方法而不是 MediaCodec 方法。不太确定为什么第二个应该比第一个更可取或更先进。质量和我上面描述的方法差不多,但至少在你快速移动时出现的抖动消失了。
请注意,使用 SessionBuilder 强制流式传输方法不起作用:
mSession = SessionBuilder.getInstance()
.setContext(getApplicationContext())
.setAudioEncoder(SessionBuilder.AUDIO_AAC)
.setAudioQuality(new AudioQuality(8000, 16000))
.setVideoEncoder(SessionBuilder.VIDEO_H264)
.setVideoQuality(new VideoQuality(1280,720,30,2000000))
.setSurfaceView(mSurfaceView)
.setStreamingMethod(VideoStream.MODE_MEDIARECORDER_API) //Completely ignored
.build();
你必须在调用 url 中强制它:
C:\>"C:\<your VLC installation path>\vlc.exe" rtsp://<your device IP address>:1234?videoapi=mr -f