英文:
How to play streamed URL link to mediaPlayer?
问题
mediaPlayer 播放不了流媒体收音机链接。
我的主要目标是使我的 Android 应用能够播放来自 radio-browser.info 的收音机 URL 链接。我找到的大多数答案只是使用常规的 .mp3 链接,而不是流媒体音频。此外,我相信我找到的大多数答案已过时,所以代码无法正常工作。
这是我的代码:
class MainActivity : AppCompatActivity() {
private lateinit var testingButton: Button
var mediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
testingButton = findViewById(R.id.testingButton)
testingButton.setOnClickListener {
playAudio()
}
}
private fun playAudio() {
mediaPlayer = MediaPlayer()
try {
mediaPlayer!!.setDataSource("http://play.sas-media.ru/play_256")
mediaPlayer!!.prepareAsync()
mediaPlayer!!.start()
} catch (e: IOException) {
e.printStackTrace()
}
Toast.makeText(this, "音频开始播放", Toast.LENGTH_LONG).show()
}
}
在按下按钮后,应用程序不会崩溃,它会显示“音频已开始播放”,但实际上没有播放任何内容。我觉得我漏掉了什么。
编辑:
按下按钮后的 Logcat 错误:
MediaPlayerNative 错误 (1, -2147483648)
MediaPlayer 错误 (1, -2147483648)
如果在出现错误后再次按下按钮:
MediaPlayer 错误 (-38,0)
英文:
mediaPlayer won't play streamed radio link
my main goal is to make it so my android app can play a radio url link from radio-browser.info.
Most of the answers i find are just using a regular .mp3 link, not a streamed audio. On top of that, i believe most answers i find are outdated so the code doesn't quite work.
This is what i have:
class MainActivity : AppCompatActivity() {
private lateinit var testingButton : Button
var mediaPlayer : MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
testingButton = findViewById(R.id.testingButton)
testingButton.setOnClickListener{
playAudio()
}
}
private fun playAudio() {
mediaPlayer = MediaPlayer()
try {
mediaPlayer!!.setDataSource("http://play.sas-media.ru/play_256")
mediaPlayer!!.prepareAsync()
mediaPlayer!!.start()
}catch (e: IOException) {
e.printStackTrace()
}
Toast.makeText(this,"Audio started playing",Toast.LENGTH_LONG).show()
}
The app doesn't crash upon button press, it says "Audio Started playing" but actually plays nothing.
I feel like i'm missing something.
Edit:
Logcat errors upon button press:
MediaPlayerNative error (1, -2147483648)
MediaPlayer error (1, -2147483648)
and if i press the button again after that error
MediaPlayer error (-38,0)
答案1
得分: 0
我认为你的playAudio()方法中缺少下面的代码:
mediaPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
setAudioStreamType已经被弃用,更新的代码如下:
private fun playAudio() {
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
GlobalScope.launch(Dispatchers.Main) {
try {
val mediaPlayer = MediaPlayer()
withContext(Dispatchers.IO) {
mediaPlayer.setDataSource("https://play.sas-media.ru/play_256")
mediaPlayer.setAudioAttributes(audioAttributes)
mediaPlayer.prepare()
}
mediaPlayer.start()
Toast.makeText(this@MainActivity, "Audio started playing", Toast.LENGTH_LONG).show()
} catch (e: IOException) {
e.printStackTrace()
Toast.makeText(this@MainActivity, "Failed to play audio", Toast.LENGTH_LONG).show()
}
}
}
英文:
I think you are missing the below code in your playAudio() method
mediaPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
setAudioStreamType is deprecated updated code-
private fun playAudio() {
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
GlobalScope.launch(Dispatchers.Main) {
try {
val mediaPlayer = MediaPlayer()
withContext(Dispatchers.IO) {
mediaPlayer.setDataSource("https://play.sas-media.ru/play_256")
mediaPlayer.setAudioAttributes(audioAttributes)
mediaPlayer.prepare()
}
mediaPlayer.start()
Toast.makeText(this@MainActivity, "Audio started playing", Toast.LENGTH_LONG).show()
} catch (e: IOException) {
e.printStackTrace()
Toast.makeText(this@MainActivity, "Failed to play audio", Toast.LENGTH_LONG).show()
}
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论