Android 中播放内存中视频
16lz
2021-01-23
Android播放内存中视频有两种方法:
1.Android中自带的mediaController(媒体控制器)
VideoViewActivity.java
package com.example.videodisplay;import android.content.pm.ActivityInfo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.MediaController;import android.widget.VideoView;public class VideoViewActivity extends AppCompatActivity { private VideoView vv_video_view; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video_view); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); vv_video_view = (VideoView) findViewById(R.id.vv_video_view); //设置播放的来源 vv_video_view.setVideoPath("file://mnt/sdcard/360Video/sister.mp4"); //实例化媒体控制器 MediaController mediaController=new MediaController(this); mediaController.setMediaPlayer(vv_video_view); vv_video_view.setMediaController(mediaController); }}
activity_video_view.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" > <VideoView android:layout_width="match_parent" android:layout_height="400dp" android:id="@+id/vv_video_view" />LinearLayout>
2.利用mediaPlayer和SurfaceView实现视频播放
MainActivity.java
package com.example.videodisplay;import android.media.MediaPlayer;import android.net.Uri;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.SurfaceView;import android.view.View;import android.widget.ImageButton;import android.widget.SeekBar;import java.io.IOException;public class MainActivity extends AppCompatActivity { private MediaPlayer mediaPlayer; private SeekBar sb_main_bar; private SurfaceView sfv_1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar); sfv_1 = (SurfaceView) findViewById(R.id.sfv_1); //给进度条设置滑动的监听 sb_main_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { int progress=seekBar.getProgress(); //在当前位置播放 mediaPlayer.seekTo(progress); } }); } public void isPlayOrPause(View view){ final ImageButton imageButton= (ImageButton) view; if(mediaPlayer==null){ //播放内存中音频 //mediaPlayer = MediaPlayer.create(this, R.raw.f); //播放内存卡中文件 mediaPlayer=new MediaPlayer(); //设置音源 try { mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/360Video/advideo.mp4"));// mediaPlayer.setDataSource(this, Uri.parse("http://193.168.4.135/internet.mp3")); //准备 mediaPlayer.prepare(); //mediaPlayer.prepareAsync(); } catch (IOException e) { e.printStackTrace(); } //设置准备完成的监听// mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {// @Override// public void onPrepared(MediaPlayer mediaPlayer) { //下载操作(复制) //将媒体播放器捕捉的画面展示到SurfaceView mediaPlayer.setDisplay(sfv_1.getHolder()); mediaPlayer.start(); imageButton.setImageResource(android.R.drawable.ic_media_pause); //获取音乐的总时长 int duration=mediaPlayer.getDuration(); //将进度条设置最大值为:音乐的总时长 sb_main_bar.setMax(duration); new MyThread().start();// }// }); }else if(mediaPlayer.isPlaying()){ mediaPlayer.pause(); imageButton.setImageResource(android.R.drawable.ic_media_play); }else{ mediaPlayer.start(); imageButton.setImageResource(android.R.drawable.ic_media_pause); } } class MyThread extends Thread{ @Override public void run() { super.run(); while(sb_main_bar.getProgress()<=sb_main_bar.getMax()){ //获取音乐当前播放的位置 int position=mediaPlayer.getCurrentPosition(); sb_main_bar.setProgress(position); } } }}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.example.videodisplay.MainActivity"> <SurfaceView android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/sfv_1" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <SeekBar android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/sb_main_bar" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@android:drawable/ic_media_play" android:onClick="isPlayOrPause" /> LinearLayout>LinearLayout>
最后必须要加上读取内存的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
更多相关文章
- Android 内存笔记
- Android 如何获取手机内存大小,内置存储空间大小
- Android取得系统信息和分辨率内存信息
- Android应用程序内存分析-Memory Analysis for Android Applicat
- android保存文件到手机内存
- Android防止内存溢出浅析
- Android漫游记(1)---内存映射镜像(memory maps)
- Android中的内存管理