1

I'm using Vitamio 5.0.2 and I'm trying to open a stream from an IP camera. It worked on VLC Player, but not in my app.

I'll post my setup and hopefully someone could try to help me or give me a hint if I did something wrong..

This is Android Manifest from Vitamio, I added all the necessary permissions I found searching for an answer:

  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="io.vov.vitamio"
      android:versionCode="400"
      android:versionName="5.2">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application>
    <activity
            android:name="io.vov.vitamio.activity.InitActivity"
            android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.NoTitleBar"
            android:windowSoftInputMode="stateAlwaysHidden"/>
</application>

This is the layout of my activity inside which I'm trying to open the stream:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
android:gravity="center"
android:orientation="vertical">

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <io.vov.vitamio.widget.VideoView
        android:id="@+id/videoView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

    <ProgressBar
        android:id="@+id/progressBarCam"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:visibility="gone" />

</FrameLayout>

And this is the setup inside the activity:

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

    Vitamio.isInitialized(getApplicationContext());

    setContentView(R.layout.test_camera_activity);
    videoView = (VideoView) findViewById(R.id.videoView);
    progressBar = (ProgressBar) findViewById(R.id.progressBarCam);
    videoView.setOnPreparedListener(this);
    videoView.setOnErrorListener(this);
    videoView.setOnInfoListener(this);
}


 private void initPlayer() {

    try {
        switch (streamingType) {
            case HIGH_STREAM:
                mediaURL = camera.getHiQualityStream();
                break;
            case LOW_STREAM:
                mediaURL = camera.getLowQualityStream();
                break;
            default:
                exitError();
                break;
        }
    } catch (Exception e) {
        Log.d("STREAM_URL", "Failed to get media url");
    }

    if (mediaURL == null) {
        exitError();
        return;
    }

    videoView.setBufferSize(2048);

    HashMap<String, String> options = new HashMap<>();
    options.put("rtsp_transport", "tcp");
    options.put("headers", "User-Agent: myUserAgent\r\n");
    videoView.setVideoURI(Uri.parse(mediaURL), options);

    videoView.setVideoQuality(MediaPlayer.VIDEOQUALITY_HIGH);
    videoView.getHolder().setFormat(PixelFormat.RGBX_8888);
    videoView.setVideoChroma(MediaPlayer.VIDEOCHROMA_RGB565);
    videoView.start();
    videoView.requestFocus();
    MediaController mediaController = new MediaController(this);
    mediaController.setAnchorView(videoView);
    videoView.setMediaController(new MediaController(this));

    mediaController.setOnSnapShotListner(new MediaController.OnSnapShotListner() {
        @Override
        public void snapShot() {
            if (camera != null) {
                takeSnapshot();
            }
        }
    });

    mediaController.setOnExitListner(new MediaController.OnExitListner() {
        @Override
        public void onExit() {
            finish();
        }
    });

    if (camera.getName() == null) {
        mediaController.setFileName("");
    } else {
        mediaController.setFileName(camera.getName());
    }
}

I tried debugging it, but I just can't find the reason why it fails. Inside MediaPlayer.java class, in handleMessage method, first message that is received is MEDIA_ERROR, MEDIA_PREPARED and MEDIA_INFO are never called... Any ideas?

user8789149
  • 121
  • 4
  • 12

0 Answers0