2012-12-18 28 views
2

我正在做android中運行wowza示例鏈接。 Wowza示例鏈接是 here.但它不適用於Android。Wowza示例鏈接在android中不工作

我的代碼在這裏。

HelloAndroidActivity(MainActivity)

public class HelloAndroidActivity extends Activity implements OnClickListener { 

private static String TAG = "androidEx2"; 

private Button buttonVideoSample; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Log.i(TAG, "onCreate"); 
    setContentView(R.layout.main); 

    buttonVideoSample = (Button) findViewById(R.id.buttonVideoSample); 
    buttonVideoSample.setOnClickListener(this); 
} 

public void onClick(View v) { 
    if (v.getId() == R.id.buttonVideoSample) { 
     String video_uri = "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov"; 
     Intent intent = new Intent(this, VideoSample.class); 
     intent.putExtra("video_path", video_uri); 
     startActivity(intent); 
    } 
} 
} 

Utils.java

public class Utils { 
public static String durationInSecondsToString(int sec){ 
    int hours = sec/3600; 
    int minutes = (sec/60) - (hours * 60); 
    int seconds = sec - (hours * 3600) - (minutes * 60) ; 
    String formatted = String.format("%d:%02d:%02d", hours, minutes, seconds); 
    return formatted; 
} 
} 

VideoSampleActivity

public class VideoSample extends Activity implements OnSeekBarChangeListener, Callback, OnPreparedListener, OnCompletionListener, OnBufferingUpdateListener, 
    OnClickListener, OnSeekCompleteListener, AnimationListener { 
private TextView textViewPlayed; 
private TextView textViewLength; 
private SeekBar seekBarProgress; 
private SurfaceView surfaceViewFrame; 
private ImageView imageViewPauseIndicator; 
private MediaPlayer player; 
private SurfaceHolder holder; 
private ProgressBar progressBarWait; 
private Timer updateTimer; 
private Bundle extras; 
private Animation hideMediaController; 
private LinearLayout linearLayoutMediaController; 
private static final String TAG = "log_tag"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.videosample); 
    extras = getIntent().getExtras(); 

    linearLayoutMediaController = (LinearLayout) findViewById(R.id.linearLayoutMediaController); 
    linearLayoutMediaController.setVisibility(View.GONE); 

    hideMediaController = AnimationUtils.loadAnimation(this, R.anim.disapearing); 
    hideMediaController.setAnimationListener(this); 

    imageViewPauseIndicator = (ImageView) findViewById(R.id.imageViewPauseIndicator); 
    imageViewPauseIndicator.setVisibility(View.GONE); 
    if (player != null) { 
     if (!player.isPlaying()) { 
      imageViewPauseIndicator.setVisibility(View.VISIBLE); 
     } 
    } 

    textViewPlayed = (TextView) findViewById(R.id.textViewPlayed); 
    textViewLength = (TextView) findViewById(R.id.textViewLength); 

    surfaceViewFrame = (SurfaceView) findViewById(R.id.surfaceViewFrame); 
    surfaceViewFrame.setOnClickListener(this); 
    surfaceViewFrame.setClickable(false); 

    seekBarProgress = (SeekBar) findViewById(R.id.seekBarProgress); 
    seekBarProgress.setOnSeekBarChangeListener(this); 
    seekBarProgress.setProgress(0); 

    progressBarWait = (ProgressBar) findViewById(R.id.progressBarWait); 

    holder = surfaceViewFrame.getHolder(); 
    holder.addCallback(this); 
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    player = new MediaPlayer(); 
    player.setOnPreparedListener(this); 
    player.setOnCompletionListener(this); 
    player.setOnBufferingUpdateListener(this); 
    player.setOnSeekCompleteListener(this); 
    player.setScreenOnWhilePlaying(true); 
    player.setDisplay(holder); 
} 

private void playVideo() { 
    if (extras.getString("video_path").equals("VIDEO_URI")) { 
     showToast("Please, set the video URI in HelloAndroidActivity.java in onClick(View v) method"); 
    } else { 
     new Thread(new Runnable() { 
      public void run() { 
       try { 
        player.setDataSource(VideoSample.this, Uri.parse(extras.getString("video_path"))); 
        //player.setDataSource(extras.getString("video_path")); 
        //player.start(); 
        player.prepare(); 
       } catch (IllegalArgumentException e) { 
        showToast("Error while playing video"); 
        Log.i(TAG, e.getMessage()); 
        e.printStackTrace(); 
       } catch (IllegalStateException e) { 
        showToast("Error while playing video"); 
        Log.i(TAG, e.getMessage()); 
        e.printStackTrace(); 
       } catch (IOException e) { 
        showToast("Error while playing video. Please, check your network connection."); 
        Log.i(TAG, e.getMessage()); 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 
    } 
} 

private void showToast(final String string) { 
    runOnUiThread(new Runnable() { 
     public void run() { 
      Toast.makeText(VideoSample.this, string, Toast.LENGTH_LONG).show(); 
      finish(); 
     } 
    }); 
} 

private void hideMediaController() { 
    new Thread(new Runnable() { 
     public void run() { 
      try { 
       Thread.sleep(5000); 
       runOnUiThread(new Runnable() { 
        public void run() { 
         linearLayoutMediaController.startAnimation(hideMediaController); 
        } 
       }); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    Log.i(TAG, "========== onProgressChanged : " + progress + " from user: " + fromUser); 
    if (!fromUser) { 
     textViewPlayed.setText(Utils.durationInSecondsToString(progress)); 
    } 
} 

public void onStartTrackingTouch(SeekBar seekBar) { 
} 

public void onStopTrackingTouch(SeekBar seekBar) { 
    if (player.isPlaying()) { 
     progressBarWait.setVisibility(View.VISIBLE); 
     player.seekTo(seekBar.getProgress() * 1000); 
     Log.i(TAG, "========== SeekTo : " + seekBar.getProgress()); 
    } 
} 

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

} 

public void surfaceCreated(SurfaceHolder holder) { 
    playVideo(); 
} 

public void surfaceDestroyed(SurfaceHolder holder) { 

} 

public void onPrepared(MediaPlayer mp) { 
    Log.i(TAG, "========== onPrepared ==========="); 
    int duration = mp.getDuration()/1000; // duration in seconds 
    seekBarProgress.setMax(duration); 
    textViewLength.setText(Utils.durationInSecondsToString(duration)); 
    progressBarWait.setVisibility(View.GONE); 

    // Get the dimensions of the video 
    int videoWidth = player.getVideoWidth(); 
    int videoHeight = player.getVideoHeight(); 
    float videoProportion = (float) videoWidth/(float) videoHeight; 
    Log.i(TAG, "VIDEO SIZES: W: " + videoWidth + " H: " + videoHeight + " PROP: " + videoProportion); 

    // Get the width of the screen 
    int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); 
    int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); 
    float screenProportion = (float) screenWidth/(float) screenHeight; 
    Log.i(TAG, "VIDEO SIZES: W: " + screenWidth + " H: " + screenHeight + " PROP: " + screenProportion); 

    // Get the SurfaceView layout parameters 
    android.view.ViewGroup.LayoutParams lp = surfaceViewFrame.getLayoutParams(); 

    if (videoProportion > screenProportion) { 
     lp.width = screenWidth; 
     lp.height = (int) ((float) screenWidth/videoProportion); 
    } else { 
     lp.width = (int) (videoProportion * (float) screenHeight); 
     lp.height = screenHeight; 
    } 

    // Commit the layout parameters 
    surfaceViewFrame.setLayoutParams(lp); 

    // Start video 
    if (!player.isPlaying()) { 
     player.start(); 
     updateMediaProgress(); 
     linearLayoutMediaController.setVisibility(View.VISIBLE); 
     hideMediaController(); 
    } 
    surfaceViewFrame.setClickable(true); 
} 

public void onCompletion(MediaPlayer mp) { 
    mp.stop(); 
    if (updateTimer != null) { 
     updateTimer.cancel(); 
    } 
    finish(); 
} 

/** 
* Change progress of mediaController 
* */ 
private void updateMediaProgress() { 
    updateTimer = new Timer("progress Updater"); 
    updateTimer.scheduleAtFixedRate(new TimerTask() { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       public void run() { 
        seekBarProgress.setProgress(player.getCurrentPosition()/1000); 
       } 
      }); 
     } 
    }, 0, 1000); 
} 

public void onBufferingUpdate(MediaPlayer mp, int percent) { 
    int progress = (int) ((float) mp.getDuration() * ((float) percent/(float) 100)); 
    seekBarProgress.setSecondaryProgress(progress/1000); 
} 

public void onClick(View v) { 
    if (v.getId() == R.id.surfaceViewFrame) { 
     if (linearLayoutMediaController.getVisibility() == View.GONE) { 
      linearLayoutMediaController.setVisibility(View.VISIBLE); 
      hideMediaController(); 
     } else if (player != null) { 
      if (player.isPlaying()) { 
       player.pause(); 
       imageViewPauseIndicator.setVisibility(View.VISIBLE); 
      } else { 
       player.start(); 
       imageViewPauseIndicator.setVisibility(View.GONE); 
      } 
     } 
    } 
} 

public void onSeekComplete(MediaPlayer mp) { 
    progressBarWait.setVisibility(View.GONE); 
} 

public void onAnimationEnd(Animation animation) { 

} 

public void onAnimationRepeat(Animation animation) { 

} 

public void onAnimationStart(Animation animation) { 
    linearLayoutMediaController.setVisibility(View.GONE); 
} 
} 
+0

該網址在我的Nexus 7上的VideoView中播放正常。如果沒有,我會嘗試在主UI線程上播放它。 – grant

+0

你可以發佈你的代碼 – urveshpatel50

回答

1

,我不認爲會有房間評論...

視圖:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/hls_frame" 
    android:background="#000000" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
<VideoView 
    android:id="@+id/video_player" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:layout_gravity="center" 
/> 
    <include layout="@layout/player_bar" /> 
</FrameLayout> 

在下面的代碼,該活動在一個單獨的類傳入(這通常發生在活動本身,但我需要支持多個玩家對舊設備)。感興趣的方法:

public void loadPlayer() { 
     _activity.setContentView(R.layout.hls_video_view); 
     if (_activity.url == null) { 
      Development.ExceptionMsg("Video Url is Null!"); 
      return; 
     } 
     VideoView view = (VideoView) _activity.findViewById(R.id.video_player); 
     if (!_activity.isLive) { 
      //MediaController for vod only 
      MediaController controller = new MediaController(_activity); 
      controller.setAnchorView(view); 
      view.setMediaController(controller); 
     } 
     _activity.LogStreamStart(); 
     _activity.HideBuffering(); 
     view.setOnCompletionListener(this); 
     view.setOnPreparedListener(this); 
     view.setOnErrorListener(this); 
     //this is important, and should perhaps be part of the interface 
     view.setOnTouchListener(_activity); 
     view.setVideoURI(Uri.parse(_activity.url)); 
     view.requestFocus(); 
     view.start(); 
    }