? ? ?最近在做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")
通過以上設置可以有效減少延時。