繁体   English   中英

如何从Android的VideoView中播放的RTSP流中消除延迟

[英]How to remove lag from RTSP stream playing in a VideoView on Android

我的目标是让计算机将视频从USB网络摄像头传输到我自己的android应用。

在PC上,我正在运行VLC,该VLC通过RTSP在端口8554上通过以下设置流式传输捕获设备(网络摄像头):

Video Codec: H.264
Video Resolution: 1600x1200 x 0.25= 400 x 300 px
Video Frame Rate: 12 fps
Video Bitrate: 56 Kbps
and NO audio

我选择了非常低的设置以查看它是否可以改善延迟,但是对延迟几乎没有影响。 这是生成的输出流字符串VLC给我的:

:sout=#transcode{vcodec=h264,vb=56,fps=12,scale=0.25,acodec=none}:rtp{sdp=rtsp://:8554/} :sout-keep

在android的onCreate方法中,我有:

String url = "rtsp://192.168.1.103:8554/";
vid = (VideoView) findViewById(R.id.videoView1);
mc = new MediaController(this);
vid.setMediaController(mc);
vid.setVideoURI(Uri.parse(url));
vid.requestFocus();
vid.setOnPreparedListener(new OnPreparedListener(){
    @Override
    public void onPrepared(MediaPlayer mp) {
        // TODO Auto-generated method stub
        vid.start();
    }
});

结果:

应用加载后,VideoView会全黑约10-20秒,而LogCat中会弹出两则消息:

Tag             Text
MediaPlayer     Couldn't open file on client side, trying server side
MediaPlayer     getMetadata

视频显示后,大约有20秒的延迟,大约30-60秒后,视频仍保持冻结状态。 视频开始播放后,这些消息也会出现:

Tag             Text
MediaPlayer     info/warning (3, 0)
MediaPlayer     Info (3, 0)

我还尝试过使用VLC从同一网络上的另一台PC捕获流,似乎延迟仍然存在,但是永远不会冻结。 不确定是否应使用其他的RTSP服务器,例如Darwin? 使用其他协议,HTTP还是RTP? 还是如果需要在android端进行更改?

尝试从VLC发送HTTP流。 转码时,您永远无法消除所有滞后,但应该能够将其降低至<10秒。

我不确定VideoView是否可以提供无懈可击的解决方案。 Android对RTSP的支持似乎很弱:当我尝试播放VLC生成的视频流时,即使VLC(和其他播放器)可以很好地处理该流,我也始终收到“不支持的格式”错误。

当我们尝试http流时,我们有90秒钟的巨大滞后!

最后,我编写了自己的最小RTSP客户端,并将H264数据包直接传递给MediaCodec 这花费了“不错”的代码量(3200多行),并且“合理地”困难了,但是延迟却不到一秒钟。 (这是在硬件上进行H264编码的相机;软件编码器可能会施加更高的最小延迟。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM