Pemba Tamang
Pemba Tamang

Reputation: 1052

ExoPlayer: Not able to play streaming url ending with .aac

Here is the streaming url:

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

Here is my code:

 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()

The error:

Caused by: com.google.android.exoplayer2.ParserException: Input does not start with the #EXTM3U header.

What am I missing.

Upvotes: 0

Views: 1634

Answers (1)

tfrysinger
tfrysinger

Reputation: 1336

It appears that ExoPlayer is not automatically detecting that this is an audio Uri for some reason - not sure why, but the below code worked for me:

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();

    }
}

Upvotes: 2

Related Questions