Is Android 2.2 HTTP progressive streaming = HTTP Live Streaming?

前端 未结 2 1279
故里飘歌
故里飘歌 2020-12-12 20:00

The Stagefrigh media framework (Android 2.2) supports HTTP progressive streaming.
What\'s that means? I.e. is this an HTTP Live Streaming protocol realization?

相关标签:
2条回答
  • 2020-12-12 20:27

    One big practical diffrence is that Stagefright media Framework supports mpeg3 streaming, which the old engine didn't. So you can use (shoutcast) mp3streams for example.

    Here is a simple example of implementation, which streams a shoutcast URL: http://fr3.ah.fm:9000. Note that this only works on Android 2.2 and up.

    import android.app.Activity;
    import android.media.AudioManager;
    import android.media.MediaPlayer;
    import android.net.Uri;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    
    public class SimpleMusicStream extends Activity implements
      MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener,
      MediaPlayer.OnErrorListener, MediaPlayer.OnBufferingUpdateListener {
    
     private String TAG = getClass().getSimpleName();
     private MediaPlayer mp = null;
    
     private Button play;
     private Button pause;
     private Button stop;
    
     @Override
     public void onCreate(Bundle icicle) {
      super.onCreate(icicle);
      setContentView(R.layout.main);
    
      play = (Button) findViewById(R.id.play);
      pause = (Button) findViewById(R.id.pause);
      stop = (Button) findViewById(R.id.stop);
    
      play.setOnClickListener(new View.OnClickListener() {
       public void onClick(View view) {
        play();
       }
      });
    
      pause.setOnClickListener(new View.OnClickListener() {
       public void onClick(View view) {
        pause();
       }
      });
    
      stop.setOnClickListener(new View.OnClickListener() {
       public void onClick(View view) {
        stop();
       }
      });
     }
    
     private void play() {
      Uri myUri = Uri.parse("http://fr3.ah.fm:9000/");
      try {
       if (mp == null) {
        this.mp = new MediaPlayer();
       } else {
        mp.stop();
        mp.reset();
       }
       mp.setDataSource(this, myUri); // Go to Initialized state
       mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
       mp.setOnPreparedListener(this);
       mp.setOnBufferingUpdateListener(this);
    
       mp.setOnErrorListener(this);
       mp.prepareAsync();
    
       Log.d(TAG, "LoadClip Done");
      } catch (Throwable t) {
       Log.d(TAG, t.toString());
      }
     }
    
     @Override
     public void onPrepared(MediaPlayer mp) {
      Log.d(TAG, "Stream is prepared");
      mp.start();
     }
    
     private void pause() {
      mp.pause();
     }
    
     private void stop() {
      mp.stop();
    
     }
    
     @Override
     public void onDestroy() {
      super.onDestroy();
      stop();
    
     }
    
     public void onCompletion(MediaPlayer mp) {
      stop();
     }
    
     public boolean onError(MediaPlayer mp, int what, int extra) {
      StringBuilder sb = new StringBuilder();
      sb.append("Media Player Error: ");
      switch (what) {
      case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
       sb.append("Not Valid for Progressive Playback");
       break;
      case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
       sb.append("Server Died");
       break;
      case MediaPlayer.MEDIA_ERROR_UNKNOWN:
       sb.append("Unknown");
       break;
      default:
       sb.append(" Non standard (");
       sb.append(what);
       sb.append(")");
      }
      sb.append(" (" + what + ") ");
      sb.append(extra);
      Log.e(TAG, sb.toString());
      return true;
     }
    
     public void onBufferingUpdate(MediaPlayer mp, int percent) {
      Log.d(TAG, "PlayerService onBufferingUpdate : " + percent + "%");
     }
    
        }
    

    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="fill_parent">
     <Button
      android:text="Play"
      android:id="@+id/play"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"></Button>
     <Button
      android:text="Pause"
      android:id="@+id/pause"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"></Button>
     <Button
      android:text="Stop"
      android:id="@+id/stop"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"></Button>
    </LinearLayout>
    

    Read more http://developer.android.com/guide/topics/media/index.html check Asynchronous Preparation

    0 讨论(0)
  • 2020-12-12 20:44

    HTTP progressive streaming is like playing media file in the mean time downloading the file.

    Is not realization. 1st, stagefright doesn't contain any .m3u8 file handler. 2nd, stagefright doesn't support .ts file format.

    currently, you can reimplement your mediaplayer for playing live streaming.

    0 讨论(0)
提交回复
热议问题