首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android增高第二十一篇之MediaPlayer播放网络视频

2012-09-24 
Android提高第二十一篇之MediaPlayer播放网络视频? ? ? 上次讲解了MediaPlayer播放网络音频,介绍了MediaPl

Android提高第二十一篇之MediaPlayer播放网络视频

? ? ? 上次讲解了MediaPlayer播放网络音频,介绍了MediaPlayer关于网络音频的缓冲和进度条控制的方法,这次再讲解MediaPlayer播放网络视频。播放网络视频比播放网络音频多需要一个SurfaceView而已,已经熟悉MediaPlayer播放网络音频之后,相信大家对播放网络视频也能很快地掌握。先来看看本文程序运行截图:

Android增高第二十一篇之MediaPlayer播放网络视频

本文程序的视频来自http://daily3gp.com,大家可以替换程序中的视频链接,试试其他影片。

main.xml的源码如下:

?

?

?

Player.java是本文的核心,Player.java实现了“进度条更新”、“数据缓冲”、“SurfaceHolder生命周期”等功能,其中“SurfaceHolder生命周期”是视频与音频播放的最大区别,通过surfaceCreated()、surfaceDestroyed()、surfaceChanged()可以创建/释放某些资源。下面这个地方需要注意一下:

?

package com.videoplayer;    import android.app.Activity;  import android.content.pm.ActivityInfo;  import android.net.Uri;  import android.os.Bundle;  import android.util.Log;  import android.view.SurfaceView;  import android.view.View;  import android.view.View.OnClickListener;  import android.widget.Button;  import android.widget.SeekBar;    public class test_videoplayer extends Activity {      private SurfaceView surfaceView;      private Button btnPause, btnPlayUrl, btnStop;      private SeekBar skbProgress;      private Player player;        /** Called when the activity is first created. */      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);          setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);          surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView1);            btnPlayUrl = (Button) this.findViewById(R.id.btnPlayUrl);          btnPlayUrl.setOnClickListener(new ClickEvent());            btnPause = (Button) this.findViewById(R.id.btnPause);          btnPause.setOnClickListener(new ClickEvent());            btnStop = (Button) this.findViewById(R.id.btnStop);          btnStop.setOnClickListener(new ClickEvent());            skbProgress = (SeekBar) this.findViewById(R.id.skbProgress);          skbProgress.setOnSeekBarChangeListener(new SeekBarChangeEvent());          player = new Player(surfaceView, skbProgress);        }        class ClickEvent implements OnClickListener {            @Override          public void onClick(View arg0) {              if (arg0 == btnPause) {                  player.pause();              } else if (arg0 == btnPlayUrl) {                  String url="http://daily3gp.com/vids/family_guy_penis_car.3gp";                  player.playUrl(url);              } else if (arg0 == btnStop) {                  player.stop();              }            }      }        class SeekBarChangeEvent implements SeekBar.OnSeekBarChangeListener {          int progress;            @Override          public void onProgressChanged(SeekBar seekBar, int progress,                  boolean fromUser) {              // 原本是(progress/seekBar.getMax())*player.mediaPlayer.getDuration()              this.progress = progress * player.mediaPlayer.getDuration()                      / seekBar.getMax();          }            @Override          public void onStartTrackingTouch(SeekBar seekBar) {            }            @Override          public void onStopTrackingTouch(SeekBar seekBar) {              // seekTo()的参数是相对与影片时间的数字,而不是与seekBar.getMax()相对的数字              player.mediaPlayer.seekTo(progress);          }      }    }

?

本文来自http://blog.csdn.net/hellogv/article/details/6429455

热点排行