मेरे पास कई गाने हैं जिनमें से मैं एक ConcatenatingMediaSource बना रहा हूं

...

allSongs.forEach {
            concatenatingMediaSource.addMediaSource(makeMediaSource(it.source))
        }
player!!.prepare(concatenatingMediaSource)

Log.d(TAG, "onCreate: period count ==> ${player!!.currentTimeline.periodCount} \n " +
                "window count ==> ${player!!.currentTimeline.windowCount}")

...

मेकमीडियासोर्स फंक्शन

private fun makeMediaSource(sourceOfSong: String): ProgressiveMediaSource {

        val dataSourceFactory = DefaultDataSourceFactory(
            this,
            getUserAgent(this, "ApplicationName")
        )

        return ProgressiveMediaSource.Factory(dataSourceFactory)
            .createMediaSource(
                Uri.parse(sourceOfSong)
            )
    }

मैं प्लेलिस्ट से एक रैंडम गाना बजाना चाहता था इसलिए जब मैंने seekTo(windowIndex, playbackPosition) का इस्तेमाल किया तो ऐप क्रैश हो गया। फिर प्लेयर में ConcatenatingMediaSource जोड़ने के बाद टाइमलाइन के windowCount और periodCount की जांच करने पर मुझे उन दोनों के लिए 0 और टाइमलाइन< मिला। /em> भी खाली है, लेकिन मेरे पास विंडो और अवधि होना चाहिए जो कि ConcatenatingMediaSource के आकार के बराबर हो, अधिकारी के अनुसार स्रोत। मुझे समझ नहीं आ रहा है कि ऐसा क्यों हो रहा है?

3
Neeraj Sewani 16 सितंबर 2019, 18:54

1 उत्तर

सबसे बढ़िया उत्तर

मैंने आखिरकार इसे समझ लिया, मैं खिलाड़ी को ConcatenatingMediaSource के साथ तैयार कर रहा था और उसके ठीक बाद मैं टाइमलाइन के windowCount और periodCount को लॉग कर रहा था।

player!!.prepare(concatenatingMediaSource)
Log.d(TAG, "onCreate: period count ==> ${player!!.currentTimeline.periodCount} \n " +
                "window count ==> ${player!!.currentTimeline.windowCount}")

मुझे पता चला कि prepare विधि एसिंक्रोनस रूप से काम करती है और खिलाड़ी को तैयार होने में कुछ समय लगता है अन्यथा वे इसके लिए श्रोता क्यों प्रदान करते। इसलिए, मैंने onPlayerStateChanged के अंदर विंडोकाउंट का लॉग किया और यह काम कर गया।

0
Neeraj Sewani 26 सितंबर 2019, 08:18