赞
踩
实时播放摄像头传来的监控画面
下载vLc的资源文件
链接: VLC的aar库资源下载
1.将资源下载之后放入android的lib库中
2.引入aar包
在Gradle 7.0+版本上的操作
首先在根目录的【setting.gradle】文件中,添加
pluginManagement {
repositories {
......
flatDir {
dirs 'libs'
}
}
}
然后在要用到VLC的项目的下面的【build.gradle】文件中添加
android {
......
defaultConfig {
......
ndk {
abiFilters "armeabi-v7a"//这里根据需要填写,同时要和libs里面的对应
}
}
......
sourceSets {
main {
jniLibs.srcDirs = ['libs']
......
}
}
}
......
dependencies {
implementation(fileTree("libs"))
......
}
首先创建一个布局文件,里面是一个【SurfaceView】
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.home.ScreenActivity">
<SurfaceView
android:id="@+id/sv_video"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
然后在Activity中
import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.shsany.module_main.databinding.ActivityScreenBinding
import org.videolan.libvlc.IVLCVout
import org.videolan.libvlc.LibVLC
import org.videolan.libvlc.Media
import org.videolan.libvlc.MediaPlayer
class ScreenActivity : AppCompatActivity() {
//此RTSP地址可作为测试使用
private val videoUrl =
"rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4"
private lateinit var binding: ActivityScreenBinding
private var mediaPlayer: MediaPlayer? = null
private var media: Media? = null
private var libVLC: LibVLC? = null
private var ivlcVout: IVLCVout? = null
private var options: ArrayList<String> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityScreenBinding.inflate(layoutInflater)
setContentView(binding.root)
}
override fun onStart() {
super.onStart()
startPlay()
}
private fun startPlay() {
releasePlayer()
options.add("--aout=opensles")//音频输出模块opensles模式
options.add(" --audio-time-stretch")
options.add("-vvv")
libVLC = LibVLC(this, options)
mediaPlayer = MediaPlayer(libVLC)
mediaPlayer?.scale = 0F
ivlcVout = mediaPlayer?.vlcVout
ivlcVout?.setVideoView(binding.svVideo)
ivlcVout?.attachViews()
media = Media(libVLC, Uri.parse(videoUrl))
//media?.addOption(":network-caching=500")//网络缓存
//media?.addOption(":rtsp-tcp")//RTSP采用TCP传输方式
media?.setHWDecoderEnabled(true, true);
val cache = 1500
media?.addOption(":network-caching=$cache")
media?.addOption(":file-caching=$cache")
media?.addOption(":live-cacheing=$cache")
media?.addOption(":sout-mux-caching=$cache")
media?.addOption(":codec=mediacodec,iomx,all")
mediaPlayer?.media = media
mediaPlayer?.play()
}
private fun releasePlayer() {
if (libVLC == null || mediaPlayer == null ||
ivlcVout == null || media == null) return
mediaPlayer?.stop()
ivlcVout = mediaPlayer?.vlcVout
ivlcVout?.detachViews()
libVLC?.release()
libVLC = null
mediaPlayer = null
ivlcVout = null
media = null
}
override fun onDestroy() {
super.onDestroy()
releasePlayer()
}
}
代码参考 此文章
显示效果(用的是其他的rtsp地址,非代码中的rtsp地址)
OVER
PS:
见证了CSDN维护了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。