安卓使用vlc播放rtsp视频

1,把vlc的aar文件放入libs中

2,在build.gradle中添加以下代码

android {
    //...
    repositories {
        flatDir {
            dirs 'libs'
        }
        maven {
            url "http://dl.bintray.com/jlmd/maven"
        }
    }
}

dependencies {
    implementation(name:'libvlc-3.0.0', ext:'aar')
}

3,在gragment的xml中添加以下代码

<SurfaceView
        android:id="@+id/surfaceView"
        android:layout_width="0dp"
        android:layout_height="200dp"
        android:layout_marginTop="32dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/buttonPause" />

4,写代码java

package com.example.test10;


import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import androidx.fragment.app.Fragment;

import com.example.test10.util.ShowToast;

import org.videolan.libvlc.IVLCVout;
import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.Media;
import org.videolan.libvlc.MediaPlayer;

import java.util.ArrayList;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;


/**
 * A simple {@link Fragment} subclass.
 */
public class fourFragment extends Fragment {
    @BindView(R.id.buttonPause)
    Button buttonPause;
    @BindView(R.id.buttonStop)
    Button buttonStop;
    @BindView(R.id.buttonPlay)
    Button buttonPlay;
    @BindView(R.id.surfaceView)
    SurfaceView surfaceView;

    private Unbinder unbinder;
    private MediaPlayer mediaPlayer;
//    private SurfaceView surfaceView;
    private String url = "rtsp://192.168.1.11/user=admin&password=&channel=1&stream=0.sdp";
    Media media;
    LibVLC libVLC;
    ArrayList<String> options = new ArrayList<>();
    IVLCVout ivlcVout;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_four, container, false);
        unbinder = ButterKnife.bind(this, view);
        return view;
    }

    @Override
    public void onStart() {
        startPlay();
        super.onStart();
    }

    /**
     * 初始化视频
     */
    private void startPlay() {
        //先中止
        releaseVideo();
        //开始方法
        options.add("--network-caching=500");
        options.add("--rtsp-caching=500");
//        options.add("-vvv"); // verbosity
        libVLC = new LibVLC(this.getActivity().getApplication(), options);
        mediaPlayer = new MediaPlayer(libVLC);
        ivlcVout = mediaPlayer.getVLCVout();
        ivlcVout.setVideoView(surfaceView);
        //播放前还要调用这个方法
        ivlcVout.attachViews();
        media = new Media(libVLC, Uri.parse(url));
        media.addOption(":network-caching=500");
        media.addOption(":rtsp-tcp");
        mediaPlayer.setMedia(media);
        mediaPlayer.play();
    }

    /**
     * 暂停视频
     */
    private void releaseVideo() {
        if (libVLC == null || mediaPlayer == null || ivlcVout == null || media == null)
            return;
        mediaPlayer.stop();
        ivlcVout = mediaPlayer.getVLCVout();
        ivlcVout.detachViews();
        libVLC.release();
        libVLC = null;
        mediaPlayer = null;
        ivlcVout = null;
        media = null;
    }

    /**
     * 视图结束之后
     */
    @Override
    public void onDestroyView() {
        if (unbinder != null) {
            unbinder.unbind();
            releaseVideo();
        }
        super.onDestroyView();
    }

    /**
     * 点击时
     *
     * @param view
     */
    @OnClick({R.id.buttonPause, R.id.buttonStop, R.id.buttonPlay})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.buttonPause:
                ShowToast.showTextToast(getContext(), "点击暂停!");
                releaseVideo();
                break;
            case R.id.buttonStop:
                ShowToast.showTextToast(getContext(), "点击中止!");
                releaseVideo();
                break;
            case R.id.buttonPlay:
                ShowToast.showTextToast(getContext(), "点击开始!");
                startPlay();
                break;
        }
    }
}

截图 android