2014-07-06 29 views
7

Sto cercando di ottenere una presa sul nuovo ExoPlayer library introdotto quest'anno al Google I/O 2014 in modo che possa incorporarlo nella mia applicazione.Android ExoPlayer streaming mp3 su HTTP

Sto tentando di riprodurre in streaming un mp3 su HTTP, ma finora non ha avuto esito positivo. Non sono sicuro che sia possibile, ma sto cercando di ottenerlo senza estendere nessuna delle classi di base Source/Sample. Il mio codice è il seguente:

nella mia attività

SampleSource s = new FrameworkSampleSource(this, Uri.parse("http://traffic.libsyn.com/joeroganexp/p518.mp3"), null, 1); 

// Since I only have 1 audio renderer 
ExoPlayer player = ExoPlayer.Factory.newInstance(1); 

MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(s); 
player.prepare(audioRenderer); 
player.setPlayWhenReady(true); 

Logcat

3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ SniffFFMPEG 
07-06 15:52:34.080 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ android-source:0xb7c53e00 
07-06 15:52:34.084 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ android source begin open 
07-06 15:52:34.084 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ android open, url: android-source:0xb7c53e00 
07-06 15:52:34.084 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ ffmpeg open android data source success, source ptr: 0xb7c53e00 
07-06 15:52:34.088 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ android source open success 
07-06 15:52:34.108 3363-3363/com.kevintcoughlin.smodr W/EGL_genymotion﹕ eglSurfaceAttrib not implemented 
07-06 15:52:34.116 3363-3363/com.kevintcoughlin.smodr E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from GradienCache 
07-06 15:52:34.120 3363-3363/com.kevintcoughlin.smodr E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384 
07-06 15:52:34.128 3363-3363/com.kevintcoughlin.smodr E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from Caches::initConstraints() 
07-06 15:52:34.128 3363-3363/com.kevintcoughlin.smodr E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384 
07-06 15:52:34.128 3363-3363/com.kevintcoughlin.smodr D/OpenGLRenderer﹕ Enabling debug mode 0 
07-06 15:52:34.640 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ [mp3 @ 0xb7c57040] Estimating duration from bitrate, this may be inaccurate 
07-06 15:52:34.640 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ Input #0, mp3, from 'android-source:0xb7c53e00': 
07-06 15:52:34.640 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ Metadata: 
07-06 15:52:34.640 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ TSS    : Logic Pro 9.1.8 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ title   : #518 - Matt Fulchiron 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ artist   : Joe Rogan Experience 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ album_artist : Joe Rogan Experience 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ Duration: 02:57:10.21, start: 0.000000, bitrate: 127 kb/s 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ FFmpegExtrator, url: android-source:0xb7c53e00, format_name: mp3, format_long_name: MP2/3 (MPEG audio layer 2/3) 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ list the formats suppoted by ffmpeg: 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ ======================================== 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[00]: mpeg 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[01]: mpegts 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[02]: mov,mp4,m4a,3gp,3g2,mj2 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[03]: matroska,webm 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[04]: asf 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[05]: rm 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[06]: flv 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[07]: swf 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[08]: avi 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[09]: ape 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[10]: dts 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[11]: flac 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[12]: ac3 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[13]: wav 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[14]: ogg 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[15]: vc1 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[16]: hevc 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ ======================================== 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ android source close 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr W/FFmpegExtractor﹕ sniff through BetterSniffFFMPEG failed, try LegacySniffFFMPEG 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ source url:http://traffic.libsyn.com/joeroganexp/p518.mp3 
07-06 15:52:34.644 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ android source begin open 
07-06 15:52:34.648 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ android open, url: android-source:0xb7c53e00|file:http://traffic.libsyn.com/joeroganexp/p518.mp3 
07-06 15:52:34.648 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ ffmpeg open android data source success, source ptr: 0xb7c53e00 
07-06 15:52:34.648 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ android source open success 
07-06 15:52:34.708 3363-3394/com.kevintcoughlin.smodr D/dalvikvm﹕ GC_FOR_ALLOC freed 361K, 4% free 10852K/11288K, paused 75ms, total 75ms 
07-06 15:52:34.844 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ [mp3 @ 0xb7ca7700] Estimating duration from bitrate, this may be inaccurate 
07-06 15:52:34.844 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ Input #0, mp3, from 'android-source:0xb7c53e00|file:http://traffic.libsyn.com/joeroganexp/p518.mp3': 
07-06 15:52:34.844 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ Metadata: 
07-06 15:52:34.844 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ TSS    : Logic Pro 9.1.8 
07-06 15:52:34.848 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ title   : #518 - Matt Fulchiron 
07-06 15:52:34.848 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ artist   : Joe Rogan Experience 
07-06 15:52:34.848 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ album_artist : Joe Rogan Experience 
07-06 15:52:34.848 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ Duration: 02:57:10.21, start: 0.000000, bitrate: 127 kb/s 
07-06 15:52:34.848 3363-3376/com.kevintcoughlin.smodr I/FFMPEG﹕ Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 128 kb/s 
07-06 15:52:34.848 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ FFmpegExtrator, url: android-source:0xb7c53e00|file:http://traffic.libsyn.com/joeroganexp/p518.mp3, format_name: mp3, format_long_name: MP2/3 (MPEG audio layer 2/3) 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ list the formats suppoted by ffmpeg: 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ ======================================== 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[00]: mpeg 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[01]: mpegts 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[02]: mov,mp4,m4a,3gp,3g2,mj2 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[03]: matroska,webm 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[04]: asf 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[05]: rm 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[06]: flv 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[07]: swf 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[08]: avi 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[09]: ape 
07-06 15:52:34.852 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[10]: dts 
07-06 15:52:34.856 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[11]: flac 
07-06 15:52:34.856 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[12]: ac3 
07-06 15:52:34.856 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[13]: wav 
07-06 15:52:34.856 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[14]: ogg 
07-06 15:52:34.856 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[15]: vc1 
07-06 15:52:34.856 3363-3376/com.kevintcoughlin.smodr V/FFmpegExtractor﹕ format_names[16]: hevc 
07-06 15:52:34.856 3363-3376/com.kevintcoughlin.smodr I/FFmpegExtractor﹕ ======================================== 
07-06 15:52:34.856 3363-3376/com.kevintcoughlin.smodr D/FFMPEG﹕ android source close 
07-06 15:52:34.856 3363-3376/com.kevintcoughlin.smodr D/FFmpegExtractor﹕ SniffFFMPEG failed to sniff this source 
07-06 15:52:34.856 3363-3397/com.kevintcoughlin.smodr D/dalvikvm﹕ GC_FOR_ALLOC freed 120K, 3% free 12342K/12696K, paused 29ms, total 60ms 
07-06 15:52:34.860 3363-3397/com.kevintcoughlin.smodr I/dalvikvm-heap﹕ Grow heap (frag case) to 13.981MB for 1960012-byte allocation 
07-06 15:52:34.872 3363-3387/com.kevintcoughlin.smodr D/dalvikvm﹕ GC_FOR_ALLOC freed <1K, 3% free 14256K/14612K, paused 10ms, total 10ms 
07-06 15:52:34.880 3363-3376/com.kevintcoughlin.smodr I/OMXClient﹕ Using client-side OMX mux. 
07-06 15:52:34.976 3363-3400/com.kevintcoughlin.smodr I/OMXClient﹕ Using client-side OMX mux. 
07-06 15:52:35.144 3363-3393/com.kevintcoughlin.smodr D/dalvikvm﹕ GC_FOR_ALLOC freed 1512K, 12% free 13705K/15532K, paused 12ms, total 36ms 
07-06 15:52:35.152 3363-3393/com.kevintcoughlin.smodr I/dalvikvm-heap﹕ Grow heap (frag case) to 15.315MB for 1962812-byte allocation 
07-06 15:52:35.200 3363-3388/com.kevintcoughlin.smodr D/dalvikvm﹕ GC_FOR_ALLOC freed <1K, 11% free 15621K/17452K, paused 39ms, total 39ms 
07-06 15:52:35.356 3363-3400/com.kevintcoughlin.smodr E/ACodec﹕ OMX/mediaserver died, signalling error! 
07-06 15:52:35.356 3363-3400/com.kevintcoughlin.smodr E/MediaCodec﹕ Codec reported an error. (omx error 0x8000100d, internalError -32) 
07-06 15:52:35.376 3363-3400/com.kevintcoughlin.smodr A/ACodec﹕ frameworks/av/media/libstagefright/ACodec.cpp:499 CHECK(mem.get() != NULL) failed. 
07-06 15:52:35.376 3363-3400/com.kevintcoughlin.smodr A/libc﹕ Fatal signal 4 (SIGILL) at 0xb76d563d (code=2), thread 3400 (MediaCodec_loop) 

Per il mio occhio inesperto sembra che posso ottenere il trackinfo correttamente, ma sto avendo un problema nel leggere i dati su HTTP. Sembra anche che il modo in cui il framework annusa che il mimetype stia fallendo anche se ricevo il tipo 'audio/mpeg'.

Ancora una volta, apprezzo ogni direzione che ricevo. Mi rendo conto che queste API sono molto nuove.

Grazie!

risposta

6

Il codice seguente ha funzionato per me. Però ho difficoltà ad agganciare l'exoPlayer all'interfaccia utente.

String key = DeveloperKey.CLIENT_ID; 
    // Construct the URL for the query 
    final String BASE_URL = "https://api.soundcloud.com/tracks/101150664/stream?"; 
    final String CLIENTID_PARAM = "client_id"; 

    Uri builtUri = Uri.parse(BASE_URL).buildUpon() 
      .appendQueryParameter(CLIENTID_PARAM, key) 
      .build(); 

    Log.v(LOG_TAG, "BUILT URI FOR STREAMING: " + builtUri); 

    // Build the sample source 
    FrameworkSampleSource sampleSource = new FrameworkSampleSource(getActivity(), builtUri, null, 1); 

    // Build the track renderers 
    TrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource, null, true); 

    // Build the ExoPlayer and start playback 
    ExoPlayer exoPlayer = ExoPlayer.Factory.newInstance(1); 
    exoPlayer.prepare(audioRenderer); 
    exoPlayer.setPlayWhenReady(true); 
+0

Hai provato ad aggiungere Listener per leggere il vari stato di ExoPlayer. Sono riuscito a sostituire MediaPlayer con ExoPlayer. – user2538359

+0

hi user user2538359 in qualsiasi modo puoi mostrarmi come sei aggiornato da mediaplayer a exoplayer? – alexistkd

+1

A partire da ora per l'utilizzo di origine - nuovo MediaCodecAudioTrackRenderer (sampleSource, MediaCodecSelector.DEFAULT) –