VL C Игрок черный на несколько секунд, когда возвращается с фона - PullRequest
0 голосов
/ 25 апреля 2020

Если я помещаю приложение в фоновый режим и возвращаюсь к нему, плеер становится черным в течение 5 секунд, но в течение этого времени воспроизводится звук. Примерно через 5 сек c изображение появляется. Вы знаете, как это можно исправить?

Я использую Videolan / Vl c - android

Вот мой код:

class PlayerActivity : AppCompatActivity() {

    private val USE_TEXTURE_VIEW = false
    private val ENABLE_SUBTITLES = true
    private var mVideoLayout: VLCVideoLayout? = null
    private var mLibVLC: LibVLC? = null
    private var mMediaPlayer: MediaPlayer? = null
    private var streamUrl:String? = null
    var isMediaSet = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        streamUrl = intent.getStringExtra("STREAM_URL")
        setContentView(R.layout.activity_player)
        val args = ArrayList<String>()
        args.add("-vvv")
        args.add(":http-reconnect")
        mLibVLC = LibVLC(this, args)
        mMediaPlayer = MediaPlayer(mLibVLC)
        mVideoLayout = findViewById(R.id.videoView)
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            hideSystemUI()
        }
        setUpMediaPlayerEvents()
    }

    override fun onDestroy() {
        super.onDestroy()
        mMediaPlayer!!.release()
        mLibVLC!!.release()
    }

    override fun onStart() {
        super.onStart()
        mMediaPlayer!!.attachViews(
            mVideoLayout!!,
            null,
            ENABLE_SUBTITLES,
            USE_TEXTURE_VIEW
        )
        if (!isMediaSet){
            isMediaSet = true
            val media = Media(
                mLibVLC,
                Uri.parse(streamUrl)
            )
            mMediaPlayer!!.media = media
            media.release()
        }
        mMediaPlayer!!.play()
    }

    override fun onStop() {
        super.onStop()
        mMediaPlayer!!.pause()
        mMediaPlayer!!.detachViews()
    }

    private fun setUpMediaPlayerEvents(){
        mMediaPlayer?.setEventListener(object: MediaPlayer.EventListener{
            override fun onEvent(event: MediaPlayer.Event?) {
                println("event = ${event.toString()}")
            }
        })
    }

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            hideSystemUI()
        }
    }
}

Я использую VLCVideoLayout. Вот как выглядит XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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"
    tools:context=".PlayerActivity"
    android:fitsSystemWindows="true"
    android:background="#000"
    >

    <org.videolan.libvlc.util.VLCVideoLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/videoView"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

Используемая версия:

implementation 'org.videolan.android:libvlc-all:3.1.12'

Я также пробовал:

implementation group: 'org.videolan.android', name: 'libvlc-all', version: '3.3.0-eap03'
...