如何将VLC媒体播放器嵌入我的Android应用程序
有没有办法将VLC媒体播放器嵌入Android应用程序?我有几个问题: 1) 我有一个视频流摄像机(来自RTSP),我无法在我的常规视频视图面板上播放它的视频流(很抱歉,此视频无法播放错误)。然而,我为Android安装了VLC应用程序(测试版),并且我能够玩它。 2) 我的主要目标是将一个使用VLC插件的桌面java应用程序移植到Android上。我想以最小的努力完成这项任务(我有一些时间问题) 另一种选择是,有没有办法将VLC使用的编解码器嵌入到我的应用程序中?因为在我的videoview中,结果会根据视频的格式而变化。我可以在videoview上播放通过RTSP传输的其他视频如何将VLC媒体播放器嵌入我的Android应用程序,android,video,libvlc,Android,Video,Libvlc,有没有办法将VLC媒体播放器嵌入Android应用程序?我有几个问题: 1) 我有一个视频流摄像机(来自RTSP),我无法在我的常规视频视图面板上播放它的视频流(很抱歉,此视频无法播放错误)。然而,我为Android安装了VLC应用程序(测试版),并且我能够玩它。 2) 我的主要目标是将一个使用VLC插件的桌面java应用程序移植到Android上。我想以最小的努力完成这项任务(我有一些时间问题) 另一种选择是,有没有办法将VLC使用的编解码器嵌入到我的应用程序中?因为在我的videoview中
我在互联网上搜索,发现了一个“libvlc”,但也发现了一些关于android版libvlc不完整的注释(但这些注释属于过去,即使是在stackoverflow中) 是的,如果您已经拥有vlc-sdk.7z(适用于android的libVLC),那么它就是将vlc嵌入android应用程序的示例项目 如果您没有libVLC,那么以下是构建libVLC的步骤。(在“sh compile.sh”完成后,“make vlc sdk.7z”创建vlc-sdk.7z并解压缩到演示项目
我将VLCSDK.7z(仅包括armeabi-v7a)用于测试。Maruku给出了一个很好的答案 另外,如果您不想在自己的机器上编译libVLC,那么maffen先生已经将它放到maven central上了
compile "de.mrmaffen:vlc-android-sdk:1.9.8"
请记住,LibVLC可能不会100%更新,因为您不是自己编译源代码
有关更多信息,请参见步骤1:安装Linux 步骤2:安装ndk和sdk 步骤3:将目录路径更改为compile.sh 然后compile.sh运行Linux终端并生成apk
编译-运行-享受一些其他答案链接到过时的版本,但2019.03的实际版本是。这是.aar版本,您可以将其添加到您的项目中并使用
但是,如果所有版本都太大(超过70MB),则是armv7版本,如果是x86版本。2019将引入VLCVideoLayout组件,大大简化将VLC嵌入android所需的代码
libVLC由BinTray上的官方VideoLAN项目提供。请参阅build.gradle文件以获取Maven repo的链接和包名/版本
libVLC由BinTray上的官方VideoLAN项目提供。 您可以直接将库用作依赖项,而无需编译它 将maven url“”添加到项目级渐变文件中,如下所示:
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>'
implementation'org.videolan.android:libvlc all:'
从下面的官方VLC GitHub存储库获取最新的libVLC版本
查找字符串“libvlcVersion”以获取最新版本
在build.gradle中:
allprojects {
repositories {
google()
jcenter()
maven {
url 'https://jitpack.io'
}
maven {
url "https://dl.bintray.com/videolan/Android"
}
}
implementation "org.videolan.android:libvlc-all:3.1.12"
}
在app\build.gradle中:
allprojects {
repositories {
google()
jcenter()
maven {
url 'https://jitpack.io'
}
maven {
url "https://dl.bintray.com/videolan/Android"
}
}
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()
}
}
导入android.net.Uri
导入android.os.Bundle
导入androidx.appcompat.app.appcompat活动
导入androidx.navigation.navArgs
导入com.android.forum.R
导入kotlinx.android.synthetic.main.activity\u摄像头*
导入org.videolan.libvlc.libvlc
导入org.videolan.libvlc.Media
导入org.videolan.libvlc.MediaPlayer
导入java.io.IOException
导入java.util*
private const val USE_TEXTURE_VIEW=false
private const val ENABLE_SUBTITLES=真
类CameraActivity:AppCompatActivity(){
私有变量mLibVLC:LibVLC?=null
私有层:MediaPlayer?=null
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\U摄像头)
mLibVLC=LibVLC(这个,ArrayList().apply{
添加(“--no drop late frames”)
添加(“--无跳过帧”)
添加(“--rtsp tcp”)
添加(“-vvv”)
})
mMediaPlayer=MediaPlayer(mLibVLC)
}
覆盖有趣的onStart(){
super.onStart()
MMediplayer?.attachViews(视频布局、空、启用字幕、使用纹理视图)
试一试{
val name=“login”;
val password=“password”;
val cameraUrl=“100.00.00.01:9982”;
val rtspur=“rtsp://”+name+:“+password+”@“+cameraUrl
val httpUrl=”https://archive.org/download/Popeye_forPresident/Popeye_forPresident_512kb.mp4"
val uri=uri.parse(httpUrl)/…任何您想要的url…甚至是来自M资产的文件
媒体(mLibVLC,uri)。应用{
SETHWDecoverEnabled(真、假);
addOption(“:网络缓存=150”);
addOption(“:时钟抖动=0”);
addOption(“:时钟同步=0”);
mMediaPlayer?.media=此
}.release()
播放者?.play()
}捕获(e:IOException){
e、 printStackTrace()
}
}
覆盖桌面上的乐趣(){
super.onStop()
mmediplayer?.stop()
mMediaPlayer?.detachViews()
}
重写onDestroy(){
super.ondestory()
mmediplayer?.release()
mLibVLC?.release()
}
}
p、 关于rtsp,在我的例子中,它只在9982端口工作(在链接中:rtsp://login:password@100.00.00.01:9982在IE中,链接看起来像:)如果你说VLC播放器应用程序存在,你显然有证据证明VLC可以嵌入到应用程序中……你试过检查源代码(和许可证)吗适用于该应用程序?有人知道该应用程序的许可证是什么样的吗?它与商业应用程序中的使用兼容吗?此库将增加应用程序的大小apk@AshishSaini这个评论会增加站点的规模。你能给我一些关于api文档的见解吗?不知道我如何集成sdkI'm loo