当前位置:   article > 正文

【Android】使用VLC播放RTSP视频流_vlc播放网络摄像头视频流

vlc播放网络摄像头视频流

任务需求

实时播放摄像头传来的监控画面

资源文件

下载vLc的资源文件
链接: VLC的aar库资源下载

操作步骤

集成VLC

1.将资源下载之后放入android的lib库中
在这里插入图片描述
2.引入aar包
在Gradle 7.0+版本上的操作
首先在根目录的【setting.gradle】文件中,添加

pluginManagement {
    repositories {
    ......
        flatDir {
           dirs 'libs'
        }
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

然后在要用到VLC的项目的下面的【build.gradle】文件中添加

android {
  ......
   defaultConfig {
      ......
      ndk {
         abiFilters "armeabi-v7a"//这里根据需要填写,同时要和libs里面的对应
      }
  }
  ......
  sourceSets {
      main {
          jniLibs.srcDirs = ['libs']
          ......
          }
  }
}
......
dependencies {
   implementation(fileTree("libs"))
   ......
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

使用VLC

首先创建一个布局文件,里面是一个【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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

然后在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()
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

代码参考 此文章

显示效果(用的是其他的rtsp地址,非代码中的rtsp地址)
在这里插入图片描述
OVER

vlc参数

PS:
见证了CSDN维护了
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/852566
推荐阅读
相关标签
  

闽ICP备14008679号