android vlc播放rtsp
最近在做IOT开发,需要把IOT设备的RTSP流在手机端播放,VLC是个不错的选择,使用起来简单方便。
1、在AndroidManifest.xml 中添加网络权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
2.引入vlc 库
2.1 在libs.versions.toml 引入VCL
libvlcAll = "3.4.2"
libvlc-all = { module = "org.videolan.android:libvlc-all", version.ref = "libvlcAll" }
2.2 在build.gradle.kts 中添加依赖
implementation (libs.libvlc.all)
3.在layout 文件中添加播放器的布局
<org.videolan.libvlc.util.VLCVideoLayoutandroid:id="@+id/videoLayout"android:layout_width="match_parent"android:layout_height="match_parent" />
4. 添加代码
4.1 在Actvitiy中使用vlc
class RtspPlayActivity : AppCompatActivity() {companion object {const val WIFI_IP = "wifi_ip"}private lateinit var binding: ActivityRtspPlayBindingprivate lateinit var libVLC: LibVLCprivate lateinit var mediaPlayer: MediaPlayeroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)enableEdgeToEdge()binding = ActivityRtspPlayBinding.inflate(layoutInflater)setContentView(binding.root)ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)insets}initView()}private fun initView() {libVLC = LibVLC(this)mediaPlayer = MediaPlayer(libVLC)mediaPlayer.attachViews(binding.videoLayout, null, false, false)val rtspUri = intent.getStringExtra(WIFI_IP)val media = Media(libVLC, Uri.parse(rtspUri))mediaPlayer.media = mediamediaPlayer.setEventListener { event ->if (event?.type == MediaPlayer.Event.EndReached) {mediaPlayer.stop()}}mediaPlayer.play()}override fun onResume() {super.onResume()if (!mediaPlayer.isPlaying) {mediaPlayer.play()}}override fun onPause() {super.onPause()if (mediaPlayer.isPlaying) {mediaPlayer.pause()}}override fun onDestroy() {super.onDestroy()libVLC.release()mediaPlayer.release()}
}
5.时延问题
运行代码以后,发现延时很严重大概在2s左右
5.1 .时延原因
RTSP流的延迟主要有以下几个因素:
- 网络延迟:包括路由、丢包等。
- 缓冲区设置:设置过大的缓冲区会增加延迟。
- 解码延迟:视频流的编码格式及解码方式也会影响延迟。
鉴于这些因素,我们可以如何调整VLC播放器的设置来减少延迟呢?
5.2 如何降低延时
1.调整缓存设置
media.addOption(":netwrok-catch=100")
2.选择合适的解码器也会影响延迟,VLC允许我们选择不同的解码方式。
media.addOption(":avcodec-dec-options=skip=nonkey")
通过以上设置可以有效减少延时。