可以使用LibVLC库嵌入 Android 应用程序上的 VLC 引擎。本教程提供了如何在 Android 应用程序上使用 LibVLC 播放视频文件的示例。
首先,将 LibVLC 库添加为模块build.gradle
文件中的依赖项。
app/build.gradle
dependencies {
// Other dependencies
// ...
implementation 'org.videolan.android:libvlc-all:3.4.4'
}
要显示视频,我们应该在布局 XML 文件中添加一个 VLCVideoLayout
。还要添加打开文件浏览器的按钮。
app/src/main/res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/openButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Open" />
<org.videolan.libvlc.util.VLCVideoLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
确保您的移动设备中有视频文件。例如,您可以下载以下视频进行测试:
https://docs.evostream.com/sample_content/assets/bun33s.mp4
单击按钮时,我们附加了单击侦听器以打开文件浏览器。当用户选择一个视频文件时,playVideo
调用该方法。它以读取模式打开文件。之后,Media
创建该类的实例并开始播放视频。
当活动停止时,媒体播放器也停止并且视频布局与播放器分离。当活动被销毁时,资源被释放。
app/src/main/java/com/example/app/MainActivity.java
package com.example.app;
import android.net.Uri;
import android.os.Bundle;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts.GetContent;
import androidx.appcompat.app.AppCompatActivity;
import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.Media;
import org.videolan.libvlc.MediaPlayer;
import org.videolan.libvlc.util.VLCVideoLayout;
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
public class MainActivity extends AppCompatActivity
{
private LibVLC libVlc;
private MediaPlayer mediaPlayer;
private VLCVideoLayout videoLayout;
ActivityResultLauncher<String> resultLauncher = registerForActivityResult(
new GetContent(),
this::playVideo
);
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
libVlc = new LibVLC(this);
mediaPlayer = new MediaPlayer(libVlc);
videoLayout = findViewById(R.id.videoLayout);
findViewById(R.id.openButton).setOnClickListener(
v -> resultLauncher.launch("video/*")
);
}
@Override
protected void onStop()
{
super.onStop();
mediaPlayer.stop();
mediaPlayer.detachViews();
}
@Override
protected void onDestroy()
{
super.onDestroy();
mediaPlayer.release();
libVlc.release();
}
private void playVideo(Uri uri)
{
if (uri == null) {
return;
}
try {
FileDescriptor fd = getContentResolver()
.openFileDescriptor(uri, "r")
.getFileDescriptor();
mediaPlayer.attachViews(videoLayout, null, false, false);
Media media = new Media(libVlc, fd);
media.setHWDecoderEnabled(true, false);
mediaPlayer.setMedia(media);
media.release();
mediaPlayer.play();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。