android { //... repositories { flatDir { dirs 'libs' } maven { url "http://dl.bintray.com/jlmd/maven" } } } dependencies { implementation(name:'libvlc-3.0.0', ext:'aar') }
<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