【问题标题】:Audio streaming from URL failed to init from data source?来自 URL 的音频流无法从数据源初始化?
【发布时间】:2018-08-08 10:35:39
【问题描述】:

我正在尝试从 URL 获取流,但我不断收到 Failed to init from data source 错误

这是我的代码:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val url = "http://www.radioideal.net:8026/;stream/1"

    try {
        val mediaPlayer: MediaPlayer? = MediaPlayer().apply {
            setAudioStreamType(AudioManager.STREAM_MUSIC)
            setDataSource(url)
            prepareAsync()
            start()
        }
    } catch (e: Exception) {
        e.message
    }

}

这是最简单的例子。

【问题讨论】:

    标签: android multithreading kotlin android-mediaplayer audio-streaming


    【解决方案1】:

    您在 prepareAsync() 之后立即调用 start ,这可能会导致问题。请使用下面的代码

     override fun onCreate(savedInstanceState: Bundle?) {
         val url = "http://www.radioideal.net:8026/;stream/1"
    
            try {
                val mediaPlayer: MediaPlayer? = MediaPlayer().apply {
                    setAudioStreamType(AudioManager.STREAM_MUSIC)
                    setDataSource(url)
                    setOnPreparedListener(this@MainActivity)
                    prepareAsync()
    
                }
            } catch (e: Exception) {
                e.printStackTrace()
            }
    
    
        }
    
    
        override fun onPrepared(mp: MediaPlayer?) {
            mp?.start()
        }
    

    别忘了实现 MediaPlayer.OnPreparedListener.... 干杯

    【讨论】:

    • 如何实现 OnPreparedListener?
    • class myclass:MediaPlayer:OnPreparedListener{ override fun onPrepared(mp: MediaPlayer?) { mp?.start() } }
    【解决方案2】:
    class MainActivity : AppCompatActivity(), MediaPlayer.OnPreparedListener {
    
        override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
        play_btn.setOnClickListener {
            val mp = MediaPlayer ()
            mp.setOnPreparedListener(this@MainActivity)
            try {
                mp.setDataSource ("https://www.ssaurel.com/tmp/mymusic.mp3")
                mp.prepareAsync ()
            } catch (e: IOException) {
            }
                Toast.makeText (this, "Wait a moment while loading the mp3", Toast.LENGTH_SHORT) .show ()
            }
        }
    
        override fun onPrepared (p0: MediaPlayer?) {
           p0?.start()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 1970-01-01
      • 2019-08-08
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 2011-06-25
      相关资源
      最近更新 更多