Android上的高分辨率RTSP服务器?

时间:2014-05-17 20:46:08

标签: android opencv streaming rtsp

我尝试将实时视频从我的Android流式传输到我的PC(这将对输入进行大量的OpenCV操作并将结果保存到文件中),两者都在同一个局域网中。我已尝试使用libstreaming用于此目的,但问题是我无法使用它来发送分辨率高于240x160的帧,这使我的质量很差 - 不足以满足我的需求。我使用过H264,当我尝试使用更高分辨率时,libstreaming会抛出一个异常,编码器无法处理这些帧。

关于如何使用libstreaming来传输高分辨率帧的任何想法? (最好是720p,20 + fps)。 不使用libstreaming的想法也欢迎......

非常感谢!

2 个答案:

答案 0 :(得分:0)

好吧,你可以在FFMPEG的帮助下做一个原生的C / C ++ RTP或RTSP流转换器。如果您的Android环境允许,您可以使用API​​并制作自己的软件,甚至可以从命令行运行FFMPEG。您还没有提到您的可用选择(仅限Java,Java + JNI + C / C ++),因此很难给出确切的建议。

答案 1 :(得分:0)

我目前遇到同样的问题。但是,我使用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();

你必须在调用网址中强制它:

C:\>"C:\<your VLC installation path>\vlc.exe" rtsp://<your device IP address>:1234?videoapi=mr -f