繁体   English   中英

无法在Nexus 5上打开RTSP流

[英]Unable to open RTSP Stream on Nexus 5

我正在尝试使用下面的代码打开RTSP流,但只会出现空白屏幕。 我在Nexus 5上运行。我可以使用android VLC应用打开相同的URL。 这是日志:这是日志:03-04 06:57:59.247 776 1004 I ActivityManager:针对活动com.vibhani.rtspexperiment / com.vibhanirtsp.rtspexperiment.MainActivity 03-04启动proc 1875:com.vibhani.rtspexperiment / u0a180 06:57:59.285 1875 1875我的艺术:后期启用-Xcheck:jni 03-04 06:57:59.347 1875 1875 W系统:ClassLoader引用的未知路径:/data/app/com.vibhani.rtspexperiment-2/lib/机械臂03-04 06:57:59.367 892 892 W Binder_4:类型= 1400审核(0.0:61294):avc:拒绝了{ioctl} for path =“ socket:[4550745]” dev =“ sockfs” ino = 4550745 ioctlcmd = 7704 scontext = u:r:surfaceflinger:s0 tcontext = u:r:surfaceflinger:s0 tclass = unix_stream_socket允许= 0 = 0 03-04 06:57:59.367 892892 W Binder_4:类型= 1400审核(0.0:61295):avc:拒绝{ioctl} for path =“ socket:[4550745]” dev =“ sockfs” ino = 4550745 ioctlcmd = 7704 scontext = u:r:surfaceflinger:s0 tcontext = u:r:surfaceflinger:s0 tclass = unix_stream_socket允许= 0 = 03 -04 06:57:59.367 892 892 W Binder_4:类型= 1400审核(0.0:61296):avc:拒绝{ioctl } for path =“ socket:[4550747]” dev =“ sockfs” ino = 4550747 ioctlcmd = 7704 scontext = u:r:surfaceflinger:s0 tcontext = u:r:surfaceflinger:s0 tclass = unix_stream_socket允许== 0 03-04 06 :57:59.374 1875 1908 D OpenGLRenderer:使用EGL_SWAP_BEHAVIOR_PRESERVED:true 03-04 06:57:59.367 892 892 W Binder_4:type = 1400 audit(0.0:61297):avc:拒绝{ioctl}用于路径=“套接字:[4550747] ]“ dev =” sockfs“ ino = 4550747 ioctlcmd = 7704 scontext = u:r:surfaceflinger:s0 tcontext = u:r:surfaceflinger:s0 tclass = unix_stream_socket permissive = 0 03-04 06:57:59.377 5028 5028 W Binder_10:类型= 1400审核(0.0:61298):AVC:拒绝{ioctl}用于路径=“套接字:[4550751]” dev =“ sockfs” ino = 4550751 ioctlcmd = 7704 scontext = u:r:system_server:s0 tcontext = u: r:system_server:s0 tclass = unix_stream_socket允许= 0 = 0 03-04 06:57:59.377 5028 5028 W Binder_10:type = 1400 audit(0.0:61299):avc:拒绝了{ioctl}用于路径=“ socket:[4550751]” dev =“ sockfs” ino = 4550751 ioctlcmd = 7704 scontext = u:r:system_server:s0 tcontext = u:r:system_server:s0 tclass = uni x_stream_socket permissive = 0 03-04 06:57:59.403 1875 1908 I Adreno-EGL::QUALCOMM Build:10/21/15,369a2ea,I96aee987eb 03-04 06:57:59.405 1875 1908 I OpenGLRenderer:Initialized EGL,version 1.4 03-04 06:57:59.436 1875 1875 W MediaPlayer:无法在客户端打开文件; 尝试服务器端:java.io.FileNotFoundException:无内容提供者:rtsp:// xxxxx:xxxx@192.168.1.102/cam/realmonitor?channel = 1&subtype = 0 03-04 06:57:59.438 202 1917 D NuPlayer:onSetVideoSurface( 0xb4905100,无视频解码器)03-04 06:57:59.439 202 1917 D NuPlayerDriver:notifyListener_l(0xb44ad720),(200,701,0)03-04 06:57:59.439 1875 1894 W MediaPlayer:info / warning(701, 0)03-04 06:57:59.463 202 1918 I RTSP来源:连接请求已完成,结果为0(成功)03-04 06:57:59.472 776 798 I ActivityManager:显示了com.vibhani.rtspexperiment / com.vibhanirtsp.rtspexperiment。 MainActivity:+ 236ms 03-04 06:57:59.478 202 1918 I ARTSPConnection:状态:RTSP / 1.0 401未经授权03-04 06:57:59.479 202 1918 I ARTSPConnection:重新发送带有身份验证标头的请求... 03-04 06:57:59.467 5028 5028 W Binder_10:类型= 1400审核(0.0:61300):avc:拒绝了{ioctl}用于路径=“套接字:[4550753]” dev =“ sockfs” ino = 4550753 ioctlcmd = 7704 scontext = u :r:system_server:s0 tcontext = u:r:system _server:s0 tclass = unix_stream_socket允许= 0 = 0 03-04 06:57:59.467 5028 5028 W装订工10:类型= 1400审核(0.0:61301):avc:拒绝{ioctl}为path =“ socket:[4550753]” dev = “ sockfs” ino = 4550753 ioctlcmd = 7704 scontext = u:r:system_server:s0 tcontext = u:r:system_server:s0 tclass = unix_stream_socket permissive = 0 03-04 06:57:59.467 944 944 W Binder_3:type = 1400 audit (0.0:61302):avc:拒绝{ioctl}用于路径=“套接字:[4550752]” dev =“ sockfs” ino = 4550752 ioctlcmd = 7704 scontext = u:r:system_server:s0 tcontext = u:r:system:server: s0 tclass = unix_stream_socket permissive = 0 03-04 06:57:59.486 1555 1555 I GoogleInputMethod:onFinishInput():Dummy InputConnection已绑定03-04 06:57:59.486 1555 1555 I GoogleInputMethod:onStartInput():Dummy InputConnection已绑定03-04 06:57:59.467 944 944 W Binder_3:类型= 1400审核(0.0:61303):AVC:拒绝{ioctl}用于路径=“套接字:[4550752]” dev =“ sockfs” ino = 4550752 ioctlcmd = 7704 scontext = u :r:system_server:s0 tcontext = u:r:system_server:s0 tclass = unix_stream_socket烫发 issive = 0 03-04 06:57:59.512 202 1918 I ARTSPConnection:状态:RTSP / 1.0 401未经授权03-04 06:57:59.513 202 1918 I RTSP来源:DESCRIBE完成,结果为0(成功)03-04 06:57 :59.516 202 1917 D NuPlayerDriver:notifyListener_l(0xb44ad720),(100,1,-2147483648)03-04 06:57:59.516 1875 1895 E MediaPlayer:error(1,-2147483648)03-04 06:57:59.517 1875 1875 E MediaPlayer:错误(1,-2147483648)

这是代码:

public class MainActivity extends Activity implements MediaPlayer.OnPreparedListener, SurfaceHolder.Callback {
    final static String USERNAME = "xxxxx";
    final static String PASSWORD = "xxxxx";
    final static String RTSP_URL = "rtsp://xxxxx:xxxxx@192.168.1.102/cam/realmonitor?channel=1&subtype=0";

    private MediaPlayer _mediaPlayer;
    private SurfaceHolder _surfaceHolder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set up a full-screen black window.
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        Window window = getWindow();
        window.setFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        window.setBackgroundDrawableResource(android.R.color.black);

        setContentView(R.layout.activity_main);

        // Configure the view that renders live video.
        SurfaceView surfaceView =
                (SurfaceView) findViewById(R.id.surfaceView);
        _surfaceHolder = surfaceView.getHolder();
        _surfaceHolder.addCallback(this);
        _surfaceHolder.setFixedSize(320, 240);
    }

    /*
SurfaceHolder.Callback
*/

    @Override
    public void surfaceChanged(
            SurfaceHolder sh, int f, int w, int h) {}

    @Override
    public void surfaceCreated(SurfaceHolder sh) {
        _mediaPlayer = new MediaPlayer();
        _mediaPlayer.setDisplay(_surfaceHolder);

        Context context = getApplicationContext();
        Map<String, String> headers = getRtspHeaders();
        Uri source = Uri.parse(RTSP_URL);

        try {
            // Specify the IP camera's URL and auth headers.
            _mediaPlayer.setDataSource(context, source, headers);

            // Begin the process of setting up a video stream.
            _mediaPlayer.setOnPreparedListener(this);
            _mediaPlayer.prepareAsync();
        }
        catch (Exception e) {}
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder sh) {
        _mediaPlayer.release();
    }

    private Map<String, String> getRtspHeaders() {
        Map<String, String> headers = new HashMap<String, String>();
        String basicAuthValue = getBasicAuthValue(USERNAME, PASSWORD);
        headers.put("Authorization", basicAuthValue);
        return headers;
    }

    private String getBasicAuthValue(String usr, String pwd) {
        String credentials = usr + ":" + pwd;
        int flags = Base64.URL_SAFE | Base64.NO_WRAP;
        byte[] bytes = credentials.getBytes();
        return "Basic " + Base64.encodeToString(bytes, flags);
    }

    /*
MediaPlayer.OnPreparedListener
*/
    @Override
    public void onPrepared(MediaPlayer mp) {
        _mediaPlayer.start();
    }
}

暂无
暂无

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

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