有没有办法将VLC媒体播放器嵌入到Android应用程序中?我有几个问题:
1)我有一个视频流摄像头(来自RTSP),我不能在我的常规视频视频面板上播放它(抱歉这个视频无法播放错误)。但是,我安装了Android的VLC应用程序(测试版),我能够播放它。 2)我的主要目标是移植使用VLC插件到Android的桌面java应用程序。我想用最少的努力完成这项任务(我有一些时间问题)。
另一种方法是,有没有办法将VLC使用的编解码器嵌入到我的应用程序中?因为使用我的视频,结果会根据视频的格式而有所不同。我可以在我的视频视频中播放通过RTSP流式播放的其他视频。
我通过互联网搜索并发现了一个“libvlc”,但也有一些关于android的libvlc未完成的注释(但这些注释属于过去的时间,即使在stackoverflow中也是如此)。
答案 0 :(得分:25)
是的,如果您已经拥有vlc-sdk.7z(用于Android的libVLC),here是将VLC嵌入到您的Android应用程序中的示例项目。
如果您没有libVLC,here是构建一个的步骤。 (在“sh compile.sh”完成后,“make vlc-sdk.7z”创建vlc-sdk.7z并解压缩到演示项目。
我把vlc-sdk.7z(仅包括armeabi-v7a)here用于测试。
答案 1 :(得分:19)
Maruku给出了一个很好的答案。
此外,如果你不想在你自己的机器上编译libVLC,那么mrmaffen已经把它推到了maven central上。所以在.gradle文件中包括
compile "de.mrmaffen:vlc-android-sdk:1.9.8"
请记住,LibVLC可能不会100%更新,因为您没有自己编译源代码。
可以在GitHub
上找到更多信息答案 2 :(得分:4)
在build.gradle中:
allprojects {
repositories {
google()
jcenter()
maven {
url 'https://jitpack.io'
}
maven {
url "https://dl.bintray.com/videolan/Android"
}
}
}
在app \ build.gradle中:
implementation "org.videolan.android:libvlc-all:3.1.12"
activity_camera.xml中的
:<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
android:background="@android:color/background_dark"
android:keepScreenOn="true"
tools:context=".ui.main.cameras.CameraActivity">
<org.videolan.libvlc.util.VLCVideoLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false" />
</FrameLayout>
在CameraActivity.java中
import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.navArgs
import com.android.forum.R
import kotlinx.android.synthetic.main.activity_camera.*
import org.videolan.libvlc.LibVLC
import org.videolan.libvlc.Media
import org.videolan.libvlc.MediaPlayer
import java.io.IOException
import java.util.*
private const val USE_TEXTURE_VIEW = false
private const val ENABLE_SUBTITLES = true
class CameraActivity : AppCompatActivity() {
private var mLibVLC: LibVLC? = null
private var mMediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_camera)
mLibVLC = LibVLC(this, ArrayList<String>().apply {
add("--no-drop-late-frames")
add("--no-skip-frames")
add("--rtsp-tcp")
add("-vvv")
})
mMediaPlayer = MediaPlayer(mLibVLC)
}
override fun onStart() {
super.onStart()
mMediaPlayer?.attachViews(videoLayout, null, ENABLE_SUBTITLES, USE_TEXTURE_VIEW)
try {
val name = "login";
val password = "password";
val cameraUrl = "100.00.00.01:9982";
val rtspUrl = "rtsp://" + name + ":" + password + "@" + cameraUrl
val httpUrl = "https://archive.org/download/Popeye_forPresident/Popeye_forPresident_512kb.mp4"
val uri = Uri.parse(httpUrl) // ..whatever you want url...or even file fromm asset
Media(mLibVLC, uri).apply {
setHWDecoderEnabled(true, false);
addOption(":network-caching=150");
addOption(":clock-jitter=0");
addOption(":clock-synchro=0");
mMediaPlayer?.media = this
}.release()
mMediaPlayer?.play()
} catch (e: IOException) {
e.printStackTrace()
}
}
override fun onStop() {
super.onStop()
mMediaPlayer?.stop()
mMediaPlayer?.detachViews()
}
override fun onDestroy() {
super.onDestroy()
mMediaPlayer?.release()
mLibVLC?.release()
}
}
p.s。关于rtsp,以我为例,它只能在9982端口上工作(在链接中:rtsp:// login:password@100.00.00.01:9982,而在IE链接中看起来像:http://100.00.00.01:9981)
答案 3 :(得分:3)
libVLC由BinTray上托管的正式VideoLAN项目提供。 您可以直接使用该库作为依赖项,而无需对其进行编译。
将maven网址“ https://dl.bintray.com/videolan/Android”添加到您的项目级Gradle文件中,如下所示:
allprojects {
repositories {
google()
jcenter()
maven {
url "https://maven.google.com";
}
maven { url "https://dl.bintray.com/videolan/Android" }
}
}
并在您的应用级Gradle文件中,添加libVLC依赖项
implementation 'org.videolan.android:libvlc-all:<latest-version-here>'
从下面的官方VLC GitHub存储库中获取最新的libVLC版本。
找到字符串“ libvlcVersion”以获取最新版本。
https://github.com/videolan/vlc-android/blob/master/build.gradle#L33
答案 4 :(得分:2)
2019年看到了VLCVideoLayout组件的引入,该组件大大简化了将VLC嵌入android所需的代码。
https://code.videolan.org/videolan/libvlc-android-samples
libVLC由BinTray上托管的正式VideoLAN项目提供。请参阅build.gradle文件以获取指向Maven存储库和软件包名称/版本的链接。
https://code.videolan.org/videolan/libvlc-android-samples/blob/master/build.gradle#L18 https://code.videolan.org/videolan/libvlc-android-samples/blob/master/java_sample/build.gradle#L34
答案 5 :(得分:0)
其他一些答案链接到过时的版本,但是实际适用于2019.03的LibVlc for all platforms 3.1.8。这是.aar版本,您可以使用these instructions将其添加到项目中并使用。
答案 6 :(得分:-1)
第1步:安装Linux
第2步:安装ndk和sdk
步骤3:将目录路径更改为compile.sh
然后compile.sh在你的Linux终端上运行并生成apk
编译 - 运行 - 享受