首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Automotive无法创建媒体播放器,setDataSource失败

Automotive无法创建媒体播放器,setDataSource失败
EN

Stack Overflow用户
提问于 2022-12-03 23:48:18
回答 2查看 23关注 0票数 0

我一直试图使用一个简单的音频播放器的android汽车,并只是从一个链接的音频流。但是当函数被调用时,媒体播放器无法从url中设置数据源。它将返回以下错误。

代码:

代码语言:javascript
复制
class HelloWorldScreen(carContext: CarContext) : Screen(carContext) {
override fun onGetTemplate(): Template {
    val mGridIcon = IconCompat.createWithResource(
        carContext, R.drawable.mainscreenlogo
    )

    val gridItemCar = GridItem.Builder()
        .setTitle("Car Info")
        .setImage(
            CarIcon.Builder(mGridIcon).build(),
            GridItem.IMAGE_TYPE_LARGE
        ).setOnClickListener(this::player).build()
    val gridList = ItemList.Builder()
        .addItem(gridItemCar).build()
   return GridTemplate.Builder()
        .setSingleList(gridList)
        .build()
}
private fun player(){
    var mediaPlayer = MediaPlayer()

    var audioUrl = "https://url"

    var customUri: Uri = Uri.parse(audioUrl)


    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
    mediaPlayer.setAudioAttributes(
        AudioAttributes. Builder()
            .setUsage(AudioAttributes.USAGE_MEDIA)
            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
            .build()
    )
    if(!mediaPlayer.isPlaying){
        try {

            mediaPlayer.setDataSource(audioUrl)
            mediaPlayer.prepareAsync()
            mediaPlayer.setOnPreparedListener {
                mediaPlayer.start()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
        Log.d("Player" , "Audio started playing..") }
    else {
        if (mediaPlayer.isPlaying) {
            mediaPlayer.stop()
            mediaPlayer.reset()
            //  mediaPlayer.release()
            Log.d("Player" , "Player Released")
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)


        } else {
            Log.d("Player" , "Audio not played.. Check Error")
        }
    }
}}

我使用player函数来调用播放器。

错误:

无法创建媒体播放器W/System.err: java.io.IOException: setDataSource失败。:status=0x80000000 W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1125)方法) W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1160) W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1160) W/System.err: at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1125) W/com.auslanka.app.common.HelloWorldService.player(HelloWorldService.kt:42) W/System.err: at com.auslanka.app.common.HelloWorldService.onCreateSession(HelloWorldService.kt:14) W/System.err: at androidx.car.app.CarAppService.onCreateSession(CarAppService.java:283) W/System.err: at androidx.car.app.CarAppBinder.lambda$onAppCreate$0$androidx-car-app-CarAppBinder(CarAppBinder.java:115) W/System.err: at androidx.car.app.CarAppBinder$$ExternalSyntheticLambda6.dispatch(Unknown来源:8) W/System.err: at androidx.car.app.utils.RemoteUtils.lambda$dispatchCallFromHost$0(RemoteUtils.java:149) W/System.err: at androidx.car.app.utils.RemoteUtils$$ExternalSyntheticLambda2.run(Unknown来源:6) W/System.err: at android.os.Handler.handleCallback(Handler.java:883) W/System.err:

在android.os.Handler.dispatchMessage(Handler.java:100) W/System.err: at android.os.Looper.loop(Looper.java:214) W/System.err: at android.app.ActivityThread.main(ActivityThread.java:7356) W/System.err: at java.lang.reflect.Method.invoke(原生方法) W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

我是不是做错了,如果是这样的话,一个关于如何在android汽车中播放音频的小代码指南将是非常感谢的。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2022-12-04 12:12:22

在我看来:媒体播放器无法从URL创建和设置数据源可能有几个原因。首先,检查您是否有正确的URL。确保它不是一个损坏的或无效的URL。此外,如果适用的话,请确保URL已在Android应用程序设置中被白色显示。另外,确保您的应用程序具有访问URL所需的权限。最后,确保Android Auto支持音频格式。如果所有这些都失败了,那么这可能是Android应用本身的一个问题,在这种情况下,您应该联系开发人员寻求帮助。

看看这个例子也许可以帮你解决这个问题:

代码语言:javascript
复制
// Create a MediaSource instance
MediaSource source = new MediaSource.Factory(dataSourceFactory)
        .createMediaSource(uri);

// Create an AudioSource instance
AudioSource audioSource = new AudioSource.Factory(dataSourceFactory)
        .setTag(TAG)
        .createAudioSource();

// Create a media player instance
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context);

// Prepare the player with the MediaSource
player.prepare(source);

// Set the audio source
player.setAudioSource(audioSource);

// Set the playback parameters
player.setPlaybackParameters(new PlaybackParameters(speed, pitch));

// Start playback
player.playWhenReady(true);
票数 1
EN

Stack Overflow用户

发布于 2022-12-04 14:23:31

从技术上讲,这是由于我自己没有在清单中添加网络权限而造成的。事实证明,Mediaplayer和HLS链接我在汽车仿真器中的支持都很好。如果有人看到这个问题,请确保正确添加网络权限。谢谢。

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET"/>

代码语言:javascript
复制
<application....

android:usesCleartextTraffic="true" .../>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74671750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档