无法在Nexus 5

时间:2018-03-04 02:09:34

标签: android rtsp

我正在尝试使用下面的代码打开RTSP流,但只获得一个空白屏幕。我在Nexus 5上运行它。我可以使用android VLC应用程序打开相同的URL。 这是日志: 这是日志: 03-04 06:57:59.247 776 1004 I ActivityManager:启动proc 1875:com.vibhani.rtspexperiment / u0a180 for activity com.vibhani.rtspexperiment / com.vibhanirtsp.rtspexperiment.MainActivity 03-04 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/arm 03-04 06:57:59.367 892 892 W Binder_4:type = 1400 audit(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 permissive = 0 03-04 06:57:59.367 892 892 W Binder_4:type = 1400 audit(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 permissive = 0 03-04 06:57:59.367 892 892 W Binder_4:type = 1400 audit(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 permissive = 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} for path =" socket:[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:type = 1400 audit(0.0:61298):avc:拒绝{ioctl} for path =" socket:[4550751]" dev的=" sockfs" ino = 4550751 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.377 5028 5028 W Binder_10:type = 1400 audit(0.0:61299):avc:拒绝{ioctl} for path =" socket:[4550751]" dev的=" sockfs" ino = 4550751 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.403 1875 1908 I Adreno-EGL :: QUALCOMM Build:10/21 / 15,369a2ea,I96aee987eb 03-04 06:57:59.405 1875 1908 I OpenGLRenderer:初始化的EGL,版本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 RTSPSource:连接请求已完成,结果为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:status:RTSP / 1.0 401 Unauthorized 03-04 06:57:59.479 202 1918 I ARTSPConnection:使用身份验证标头重新发送请求... 03-04 06:57:59.467 5028 5028 W Binder_10:type = 1400 audit(0.0:61300):avc:拒绝{ioctl} for 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 5028 5028 W Binder_10:type = 1400 audit(0.0:61301):avc:拒绝{ioctl} for 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} for path =" socket:[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 bound 03-04 06:57:59.486 1555 1555 I GoogleInputMethod:onStartInput():Dummy InputConnection bound 03-04 06:57:59.467 944 944 W Binder_3:type = 1400 audit(0.0:61303):avc:拒绝{ioctl} for path =" socket:[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.512 202 1918 I ARTSPConnection:status:RTSP / 1.0 401 Unauthorized 03-04 06:57:59.513 202 1918 I RTSPSource: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:错误(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();
    }
}

0 个答案:

没有答案