zoukankan      html  css  js  c++  java
  • 网络获取视频

    布局:

     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"/> 

  • 相关阅读:
    (uC/OS-II学习笔记) 事件标志……
    (uC/OS-II学习笔记) 消息邮箱&&消息队列
    (uC/OS-II学习笔记)关于共享资源与信号量
    (uC/OS-II学习笔记)uC/OS-II 时间管理
    (uC/OS-II学习笔记)uC/OS-II在kinetis K60上移植与任务建立
    (Kinetis K60)RTC实时时钟
    (Kinetis K60)flash读写
    JQuery官方学习资料(译):避免与其他库的冲突
    JQuery官方学习资料(译):$( document ).ready()
    JQuery官方学习资料(译):$ vs $()
  • 原文地址:https://www.cnblogs.com/SongYongQian/p/7883359.html
Copyright © 2011-2022 走看看