问题描述
- android mediaPlayer播放了1.4G的MP4 抛出 传输量过大异常
-
package com.example.zyc.surfaceview;import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Surface;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;import java.io.File;
import java.io.IOException;public class MainActivity extends AppCompatActivity {
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private File file;
private Button playButton;
private Button pauseButton;
private Button stopButton;
private boolean isPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//实现各种控件 mediaPlayer = new MediaPlayer(); surfaceView = (SurfaceView)findViewById(R.id.surfaceView1); playButton = (Button)findViewById(R.id.play); pauseButton = (Button)findViewById(R.id.pause); stopButton = (Button)findViewById(R.id.stop); //初始化一些变量 isPlay = false; file = new File(Environment.getExternalStorageDirectory().getPath()+"/aa.mp4"); pauseButton.setEnabled(false); //surfaceView.setBackgroundResource(R.drawable.bg); //实现三个按钮的方法 playButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mediaPlayer.reset(); //重置MediaPlay对象 try { mediaPlayer.setDataSource(file.getAbsolutePath()); //读取视频文件地址 }catch(IOException e){ e.printStackTrace(); } mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDisplay(surfaceView.getHolder()); //将视频画面输出到surface上 //确保视屏加载完毕才能够播放 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { Log.i("TAG","准备完毕开始播放"); mediaPlayer.start(); //开始播放 pauseButton.setText("暂停"); //pause此时为暂停 pauseButton.setEnabled(true); //pause按钮此时可用 isPlay = true; } }); try { mediaPlayer.prepareAsync(); //让视频加载,加载完后自动执行onPrepared() }catch(Exception e){ Log.i("TAG","加载发生错误"); } } }); pauseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isPlay == true) { pauseButton.setText("继续"); mediaPlayer.pause(); isPlay = false; } else { mediaPlayer.start(); pauseButton.setText("暂停"); isPlay = true; } } }); stopButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(isPlay==true){ mediaPlayer.stop(); Toast.makeText(MainActivity.this,"已停止",Toast.LENGTH_LONG).show(); pauseButton.setEnabled(false); } } }); } @Override protected void onDestroy() { if(isPlay==true){ mediaPlayer.stop(); } mediaPlayer.release(); super.onDestroy(); }
}
以上是代码 用来播放小的MP4文件是没有什么问题。 但是我后来用来尝试播放一个1.4G的MP4文件后报出TransactionTooLargeException异常,原因是.prepareAsync()不能加载视频文件(文件过于大,不能被加载),我想解决,但是没有什么思路,不知道有什么办法。
解决方案
http://lovelease.iteye.com/blog/2105616
解决方案二:
源文件太大了,以前不做过,你试试能不能再qq音乐之类的音乐播放器中播放