1,把vlc的aar文件放入libs中
arr文件下载:vlc
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,写代码
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;
}
}
}
截图