Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将VLC媒体播放器嵌入我的Android应用程序_Android_Video_Libvlc - Fatal编程技术网

如何将VLC媒体播放器嵌入我的Android应用程序

如何将VLC媒体播放器嵌入我的Android应用程序,android,video,libvlc,Android,Video,Libvlc,有没有办法将VLC媒体播放器嵌入Android应用程序?我有几个问题: 1) 我有一个视频流摄像机(来自RTSP),我无法在我的常规视频视图面板上播放它的视频流(很抱歉,此视频无法播放错误)。然而,我为Android安装了VLC应用程序(测试版),并且我能够玩它。 2) 我的主要目标是将一个使用VLC插件的桌面java应用程序移植到Android上。我想以最小的努力完成这项任务(我有一些时间问题) 另一种选择是,有没有办法将VLC使用的编解码器嵌入到我的应用程序中?因为在我的videoview中

有没有办法将VLC媒体播放器嵌入Android应用程序?我有几个问题:

1) 我有一个视频流摄像机(来自RTSP),我无法在我的常规视频视图面板上播放它的视频流(很抱歉,此视频无法播放错误)。然而,我为Android安装了VLC应用程序(测试版),并且我能够玩它。 2) 我的主要目标是将一个使用VLC插件的桌面java应用程序移植到Android上。我想以最小的努力完成这项任务(我有一些时间问题)

另一种选择是,有没有办法将VLC使用的编解码器嵌入到我的应用程序中?因为在我的videoview中,结果会根据视频的格式而变化。我可以在videoview上播放通过RTSP传输的其他视频


我在互联网上搜索,发现了一个“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