当前位置: 首页 > 知识库问答 >
问题:

ExoPlayer:无法播放以结尾的流媒体url。自动幅度控制(Automatic Ampltiude Control的缩写)

夹谷辰沛
2023-03-14

这是流媒体网址:

"https://rfcmedia.streamguys1.com/70hits.aac"

以下是我的代码:

 val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()

        val hlsMediaSource: HlsMediaSource = HlsMediaSource.Factory(dataSourceFactory)
            .createMediaSource(MediaItem.fromUri("https://rfcmedia.streamguys1.com/70hits.aac"))
        exoPlayer.setMediaSource(hlsMediaSource)
        exoPlayer.prepare()

错误:

原因:com.google.android.exoplayer2.ParserException:输入不是以#EXTM3U头开头。

我错过了什么?

共有1个答案

孔经武
2023-03-14

由于某种原因,ExoPlayer似乎没有自动检测到这是一个音频Uri不知道为什么,但下面的代码对我有效:

package com.example.hls_test;

import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.util.MimeTypes;

public class MainActivity extends AppCompatActivity {
    ExoPlayer player;
    private static final String hlsUri = "https://rfcmedia.streamguys1.com/70hits.aac";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        player = new ExoPlayer.Builder(this).build();
        Button b = findViewById(R.id.playButton);
        TextView t = findViewById(R.id.errormessage);
        b.setOnClickListener(view -> {
            try {
                t.setText("");
                MediaItem item = new MediaItem.Builder()
                        .setUri(hlsUri)
                        .setMimeType(MimeTypes.AUDIO_AAC)
                        .build();
                player.setMediaItem(item);
                player.prepare();
                player.play();
            } catch (Exception e) {
                t.setText("Error occurred playing media item: " + e.getMessage());
            }
        });
    }

    private void releaseResources() {
        if ( player != null ) {
            if ( player.isPlaying() ) {
                player.stop();
            }
            player.release();
            player = null;
        }
    }

    @Override
    public void onBackPressed() {
        releaseResources();
        super.onBackPressed();
    }

    @Override
    protected void onDestroy() {
        releaseResources();
        super.onDestroy();

    }
}
 类似资料:
  • 经过多次尝试,我决定去ExoPlayer库。我很高兴使用方便和不断更新。此外,它减少了我的APK的大小三倍。 不幸的是,ExoPlayer库无法播放一些音频流。我尝试过调试、更改对URL的调用等等。不成功。 以下是我不能用ExoPlayer库玩的流的例子,但我可以用Vitamio复制: http://42747t.lp.azioncdn.net:1935/2747t/a/mp4:access_op

  • 我的问题是关于媒体播放器直播流从我的应用程序的url? 我正在尝试通过媒体播放器播放实时流mp3音频。

  • 有人尝试过使用ExoPlayer来实现这一点吗?我试着在网上找,但没有成功。 当我说无间隙播放时,我指的是使用媒体播放器背靠背播放本地视频的问题。在第一视频完成播放之后,在第二视频开始之前有1秒的明显延迟。 希望这个问题有助于进一步理解这个问题。请看以下问题以供参考: Android:MediaPlayer无间隙或无缝视频播放

  • 一旦我向concatenatingMediaSource添加一首歌,我就会在它旁边添加一个标签,所以我想知道如何通过这个特定的标签播放一首歌。 obs:ctd是歌曲位置的参考号;

  • 你好,我正在开发一个应用程序,我可以在其中使用widevine drm保护来播放dash stream。我已经阅读了exoplayer的示例,但我的需求不同,我会在我的网站上,当单击dash url时,它将开始在exoplayer中播放流。我已经成功地完成了打开exoplayer活动的第一部分,但是我不知道如何在exoplayer上运行受drm保护的流。 我知道流和drm许可证url。 我正在编写

  • 1.1.1. 多媒体播放 1.1.1. 多媒体播放 我们事实上对上游芯片厂商自带的播放器方式做了调整。 Amlogic 芯片 BaseCode 我们禁用了芯片厂商的原生代码的 libplayer 包,原因是芯片厂商的播放器是直接使用 ALSA 框架来调用音频播放功能的。 这对我们 RokidOS 平台让多个进程使用音频设备造成阻碍。基于这个因素,我们使用了 RokidOS 开发的媒体播放库 lib