LibVLC for Android是一个允许在 Android 应用程序中嵌入 VLC 引擎的库。本教程提供了如何在 Android 应用程序上使用 LibVLC 显示来自 IP 摄像机的 RTSP 流的示例。
首先,我们需要在模块build.gradle
文件中添加 LibVLC 依赖项。
app/build.gradle
dependencies {
// Other dependencies
// ...
implementation 'org.videolan.android:libvlc-all:3.4.4'
}
请求INTERNET
清单文件中的权限,因为应用程序应具有 Internet 访问权限。
app/src/main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">
<uses-permission android:name="android.permission.INTERNET" />
<application>
...
</application>
</manifest>
打开布局 XML 文件并添加一个VLCVideoLayout
将用于显示来自 IP 摄像机的 RTSP 流的文件。
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">
<org.videolan.libvlc.util.VLCVideoLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
当活动开始时,来自 IP 摄像机的 RTSP 流被捕获并使用媒体播放器显示。确保您已更改网络摄像机的 RTSP URL。制造商可能使用不同的 RTSP URL。我们使用 Reolink E1 Pro 相机进行测试。可以最小化该network-caching
选项以减少来自 IP 摄像机的 RTSP 流的延迟。如果您设置network-caching
为低,则流捕获可能会冻结。因此,请尝试使用各种值并根据您的移动设备调整此选项。
当 Activity 进入停止状态时,媒体播放器也会停止,视频布局会与播放器分离。当活动被销毁时,资源被释放。爪哇科特林
app/src/main/java/com/example/app/MainActivity.java
package com.example.app;
import android.net.Uri;
import android.os.Bundle;
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;
public class MainActivity extends AppCompatActivity
{
private static final String url = "rtsp://user:pass@192.168.0.9:554/h264Preview_01_main";
private LibVLC libVlc;
private MediaPlayer mediaPlayer;
private VLCVideoLayout videoLayout;
@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);
}
@Override
protected void onStart()
{
super.onStart();
mediaPlayer.attachViews(videoLayout, null, false, false);
Media media = new Media(libVlc, Uri.parse(url));
media.setHWDecoderEnabled(true, false);
media.addOption(":network-caching=600");
mediaPlayer.setMedia(media);
media.release();
mediaPlayer.play();
}
@Override
protected void onStop()
{
super.onStop();
mediaPlayer.stop();
mediaPlayer.detachViews();
}
@Override
protected void onDestroy()
{
super.onDestroy();
mediaPlayer.release();
libVlc.release();
}
}
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/17526.html