Как играть в m3u8 на Android? - PullRequest
8 голосов
/ 01 июня 2011

Как я понял, Android 3.0 и выше способны воспроизводить потоковое радио m3u8 - http://developer.android.com/guide/appendix/media-formats.html

Я поместил эту ссылку - http://content.mobile -tv.sky.com / content / ssna / live / ssnraudio.m3u8 в MediaPlayer, но в LogCat я получаю:

06-01 09:04:44.287: INFO/LiveSession(33): onConnect 'http://content.mobile-tv.sky.com/content/ssna/live/ssnraudio.m3u8'
06-01 09:04:44.287: INFO/NuHTTPDataSource(33): connect to content.mobile-tv.sky.com:80/content/ssna/live/ssnraudio.m3u8 @0
06-01 09:04:44.747: INFO/NuHTTPDataSource(33): connect to content.mobile-tv.sky.com:80/content/ssna/live/ssnraudio.m3u8 @0
06-01 09:04:45.019: INFO/NuHTTPDataSource(33): connect to content.mobile-tv.sky.com:80/content/ssna/live/ssnraudio/ssnr_052311_071632_78731.aac @0
**06-01 09:04:45.817: ERROR/LiveSession(33): This doesn't look like a transport stream...**
06-01 09:04:45.967: INFO/HTTPLiveSource(33): input data EOS reached.

Это мой исходный код:

    mp = new MediaPlayer();        
    start.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub              
            try {

                mp.setDataSource("http://content.mobile-tv.sky.com/content/ssna/live/ssnraudio.m3u8");
                mp.prepare();
                mp.start();

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }
    });

    stop.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            try {

                mp.stop(); 
                mp.reset();

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
        }
    });
}

Ответы [ 5 ]

5 голосов
/ 25 августа 2011

По этой ссылке след: http://code.google.com/p/android/issues/detail?id=14646

->

http://code.google.com/p/android/issues/detail?id=16884

->

http://code.google.com/p/android/issues/detail?id=17118

(ARGGGGH!)

Дает ответ в конце:

в основном в Android v2.3 и v3.0, используйте нестандартную схему httplive: //, в 3.1 используйте http: // но с некоторым обходом кода в том, как вы вызываете соответствующие методы в медиа-структуре.

5 голосов
/ 25 февраля 2015

Это мой пример того, как играть .M3U8 Потоковое в Android

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <VideoView
        android:id="@+id/myVideoView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Main.java

package com.grexample.ooyalalive;

import java.net.URL;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;

public class Main extends Activity {

    private String urlStream;
    private VideoView myVideoView;
    private URL url;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_vv);//***************
            myVideoView = (VideoView)this.findViewById(R.id.myVideoView);
            MediaController mc = new MediaController(this);
            myVideoView.setMediaController(mc);         
            urlStream = "http://jorgesys.net/i/irina_delivery@117489/master.m3u8";
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    myVideoView.setVideoURI(Uri.parse(urlStream)); 
                }
            });
    }
}

Я видел, что у многих людей возникают проблемы с воспроизведением .M3U8, это зависит от кодеков, используемых для потоковой передачи, и совместимости с устройством.Например, некоторые из моих файлов .m3u8 поддерживаются только на устройствах с экранами 1200 x 800 и выше.

4 голосов
/ 22 декабря 2015

Попробуйте ExoMedia , потоковое вещание так же просто, как:

emVideoView.setVideoURI(Uri.parse("https://archive.org/download/Popeye_forPresident/Popeye_forPresident_512kb.mp4"));

Я хорошо работаю с m3u8.

4 голосов
/ 21 августа 2011

Возможно, вы можете попробовать плагин Vitamio, http://vov.io/vitamio/

Vitamio - это мультимедийный фреймворк для всех устройств Android.Vitamio работает как MediaPlayer по умолчанию для Android, за исключением того, что он включает в себя гораздо более мощные функции.И это абсолютно бесплатно!Сетевые протоколы

Для воспроизведения аудио и видео поддерживаются следующие сетевые протоколы:

MMS
RTSP (RTP, SDP)
HTTP progressive streaming
HTTP live streaming (M3U8), for Android 2.1+
1 голос
/ 22 июня 2018

Вы можете использовать FFmpegMediaPlayer:

https://github.com/wseemann/FFmpegMediaPlayer

...