【问题标题】:Android MediaPlayer play m3u8 only audio streamming not workedAndroid MediaPlayer 仅播放 m3u8 音频流不起作用
【发布时间】:2014-09-10 15:47:18
【问题描述】:

大家好,我编写了一个代码来播放调频无线电波。在我的代码中有一个进度条和两个按钮,其中一个用于播放,另一个用于停止。当我单击播放按钮时,它不会发生。我怎么解决这个问题?或者有什么好的建议让我播放音频 m3u8 文件?
我使用的代码是:

    public class Main extends Activity implements OnClickListener {

    private ProgressBar playSeekBar;

    private Button buttonPlay;

    private Button buttonStopPlay;

    private MediaPlayer player;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        initializeUIElements();

        initializeMediaPlayer();

    }

    private void initializeUIElements() {

        playSeekBar = (ProgressBar) findViewById(R.id.progressBar1);
        playSeekBar.setMax(100);
        playSeekBar.setVisibility(View.INVISIBLE);

        buttonPlay = (Button) findViewById(R.id.buttonPlay);
        buttonPlay.setOnClickListener(this);

        buttonStopPlay = (Button) findViewById(R.id.buttonStopPlay);
        buttonStopPlay.setEnabled(false);
        buttonStopPlay.setOnClickListener(this);

    }

    public void onClick(View v) {
        if (v == buttonPlay) {
            startPlaying();
        } else if (v == buttonStopPlay) {
            stopPlaying();
        }
    }

    private void startPlaying() {
        buttonStopPlay.setEnabled(true);
        buttonPlay.setEnabled(false);

        playSeekBar.setVisibility(View.VISIBLE);

        player.prepareAsync();

        player.setOnPreparedListener(new OnPreparedListener() {

            public void onPrepared(MediaPlayer mp) {
                player.start();
            }
        });

    }

    private void stopPlaying() {
        if (player.isPlaying()) {
            player.stop();
            player.release();
            initializeMediaPlayer();
        }

        buttonPlay.setEnabled(true);
        buttonStopPlay.setEnabled(false);
        playSeekBar.setVisibility(View.INVISIBLE);
    }

    private void initializeMediaPlayer() {
        player = new MediaPlayer();
        try {

            player.setDataSource("http://url.m3u8");
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        player.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {

            public void onBufferingUpdate(MediaPlayer mp, int percent) {
                playSeekBar.setSecondaryProgress(percent);
                Log.i("Buffering", "" + percent);
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (player.isPlaying()) {
            player.stop();
        }
    }
}

【问题讨论】:

    标签: android audio media-player m3u8


    【解决方案1】:

    我通过vitamio 库解决了这个问题。谢谢

    【讨论】:

      【解决方案2】:

      如果没有得到 onPrepared() 回调,请尝试在 prepareAsync() 之前调用 setOnPreparedListener()。

      【讨论】:

      • 请求的坦克,实际上当我将 .m3u8 url 更改为 .mp3 url 时,它可以正常工作。但对于 .m3u8,它什么也玩不了
      【解决方案3】:

      根据documentation,Android 4.0 及更高版本不支持 mp3 块。它仅支持 ts 文件。

      此外,如果您的链接最终没有.m3u8,MediaPlayer 将无法播放它。这说明Content-Type: application/vnd.apple.mpegurl 已被放弃。并且您必须在链接中有 .m3u8 扩展名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-11
        • 1970-01-01
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多