1. 程式人生 > >網絡獲取視頻

網絡獲取視頻

用戶 推送 ont clas ket onclick area call cep

布局:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7
android:orientation="vertical" 8 tools:context="com.example.administrator.zhoukao03.MainActivity"> 9 10 <LinearLayout 11 android:orientation="horizontal" 12 android:layout_width="wrap_content" 13 android:layout_height="wrap_content"> 14 15 <Button
16 android:id="@+id/play_btn" 17 android:layout_width="wrap_content" 18 android:layout_height="wrap_content" 19 android:text="播放"/> 20 21 <Button 22 android:id="@+id/stop_btn" 23 android:layout_width="wrap_content" 24
android:layout_height="wrap_content" 25 android:text="暫停/播放"/> 26 27 28 </LinearLayout> 29 30 <com.example.administrator.zhoukao03.MySurfaceView 31 android:id="@+id/surfaceview" 32 android:layout_width="match_parent" 33 android:layout_height="200dp" /> 34 35 <Button 36 android:id="@+id/sd_btn1" 37 android:layout_width="wrap_content" 38 android:layout_height="wrap_content" 39 android:text="1倍"/> 40 <Button 41 android:id="@+id/sd_btn2" 42 android:layout_width="wrap_content" 43 android:layout_height="wrap_content" 44 android:text="2倍"/> 45 <Button 46 android:id="@+id/sd_btn3" 47 android:layout_width="wrap_content" 48 android:layout_height="wrap_content" 49 android:text="3倍"/> 50 51 </LinearLayout>

Activity:

 1 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 2 
 3     private String url = "http://baobab.kaiyanapp.com/api/v1/playUrl?vid=61069&editionType=low&source=ucloud";
 4     private Button play_btn;
 5     private Button stop_btn;
 6     private MySurfaceView surfaceview;
 7     private Button sd_btn1;
 8     private Button sd_btn2;
 9     private Button sd_btn3;
10 
11     @Override
12     protected void onCreate(Bundle savedInstanceState) {
13         super.onCreate(savedInstanceState);
14         setContentView(R.layout.activity_main);
15         initView();
16     }
17 
18     private void initView() {
19         play_btn = (Button) findViewById(R.id.play_btn);
20         stop_btn = (Button) findViewById(R.id.stop_btn);
21         surfaceview = (MySurfaceView) findViewById(R.id.surfaceview);
22 
23         //設置分辨率
24         surfaceview.setPivotY(320);
25         surfaceview.setPivotX(320);
26 
27 
28         play_btn.setOnClickListener(this);
29         stop_btn.setOnClickListener(this);
30         sd_btn1 = (Button) findViewById(R.id.sd_btn1);
31         sd_btn1.setOnClickListener(this);
32         sd_btn2 = (Button) findViewById(R.id.sd_btn2);
33         sd_btn2.setOnClickListener(this);
34         sd_btn3 = (Button) findViewById(R.id.sd_btn3);
35         sd_btn3.setOnClickListener(this);
36     }
37 
38     @Override
39     public void onClick(View v) {
40         switch (v.getId()) {
41             case R.id.play_btn:
42                 //點擊播放按鈕
43                 surfaceview.playVideo(url);
44 
45                 break;
46             case R.id.stop_btn:
47                 surfaceview.stopVideo();
48 
49                 break;
50 
51             case R.id.sd_btn1:
52                 surfaceview.setprogress(100);
53 
54 
55                 break;
56             case R.id.sd_btn2:
57                 surfaceview.setprogress(200);
58 
59 
60 
61                 break;
62             case R.id.sd_btn3:
63                 surfaceview.setprogress(300);
64 
65 
66                 break;
67         }
68     }
69 }

MySurfaceView類:

 1 public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback, MediaPlayer.OnCompletionListener {
 2 
 3     private SurfaceHolder holder;
 4     private MediaPlayer mediaPlayer;
 5 
 6     public MySurfaceView(Context context, AttributeSet attrs) {
 7         super(context, attrs);
 8 
 9 
10         init();
11     }
12 
13     //快進
14     public void setprogress(int progress){
15         int currentPosition = mediaPlayer.getCurrentPosition();
16         mediaPlayer.seekTo(currentPosition+progress);
17         Toast.makeText(getContext(),"快進"+progress,Toast.LENGTH_SHORT).show();
18     }
19 
20     //暫停/播放方法
21     public void stopVideo(){
22         if (mediaPlayer.isPlaying()){
23             mediaPlayer.pause();
24         }else {
25             mediaPlayer.start();
26         }
27     }
28 
29 
30 
31     //播放視頻方法
32     public void playVideo(String path){
33         if (mediaPlayer==null){
34             mediaPlayer=new MediaPlayer();
35             //設置surfaceview不維護自己的緩沖區,而是等待屏幕的渲染引擎將內容推送到用戶面前
36             mediaPlayer.setOnCompletionListener(this);
37         }
38 
39         try {
40             mediaPlayer.reset();
41             mediaPlayer.setDataSource(path);
42             mediaPlayer.setDisplay(holder);
43             mediaPlayer.prepareAsync();
44         } catch (IOException e) {
45             e.printStackTrace();
46         }
47     }
48 
49     private void init() {
50         holder=this.getHolder();
51 
52         //重寫SurfaceHolder.Callback方法
53         holder.addCallback(this);
54     }
55 
56     @Override
57     public void surfaceCreated(SurfaceHolder surfaceHolder) {
58 
59     }
60 
61     @Override
62     public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
63 
64     }
65 
66     @Override
67     public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
68         if (mediaPlayer!=null){
69             mediaPlayer.release();
70             mediaPlayer=null;
71         }
72 
73     }
74 
75 
76     //緩沖完成播放
77     @Override
78     public void onCompletion(MediaPlayer mediaPlayer) {
79         mediaPlayer.start();
80     }
81 }

權限:

<uses-permission android:name="android.permission.INTERNET">

</uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

網絡獲取視頻