android上的高分辨率RTSP服务器



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

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

谢谢!

嗯,你可以在FFMPEG的帮助下做一个本地C/c++ RTP或RTSP流媒体。你可以使用API制作自己的软件,或者如果你的Android环境允许的话,甚至可以从命令行运行FFMPEG。您没有提到可用的选择(仅Java, Java + JNI + C/c++),因此很难给出确切的建议。

我目前有同样的问题。然而,我设法得到一些更好的结果与libstreaming使用H263编解码器。视频质量仍然不是完全令人满意,但它是720p。我基于libstreaming示例1构建了我的应用程序,使用RTSPServer。以下是相关代码:

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

编辑:我设法在720p使用H264编码器流,并强迫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

相关内容

  • 没有找到相关文章

最新更新