2 zhangyicheng9 zhangyicheng9 于 2016.02.16 00:22 提问

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()不能加载视频文件(文件过于大,不能被加载),我想解决,但是没有什么思路,不知道有什么办法。

2个回答

devmiao
devmiao   Ds   Rxr 2016.02.16 08:48
已采纳
Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.16 08:57

源文件太大了,以前不做过,你试试能不能再qq音乐之类的音乐播放器中播放

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
android边缓存边播放mp4
在做一个新闻系统中间有视频播放的要求,当时想着非常简单,android的mediaplayer封装的非常好了,基本就是做做界面。 界面写好的时候才发现悲剧了,对方服务器是http方式提供的mp4,android死活无法边缓存边播放,缓存到100%才能播放。 在网上找了找资料,网上有个边下载mp3边播放的例子,按照其思路修改后发现mp4在没有完成下载时,播放器仍然无法识别。 只好找
Android MediaPlayer播放异常问题汇总
一、关于 “MediaPlayer error (XXXX,XXXX)  问题1: E/MediaPlayer(19765): stop called in state 4 E/MediaPlayer(19765): error (-38, 0) 原因:是在调用prepareAsync()则以异步方式进入Prepared状态过程中即preparing状态中,调用了stop方法。
Android使用MediaPlayer只播放视频不播放音频的方法
今天写项目时,突然遇到一个麻烦的问题,就是使用mediaplayer播放MP4文件时,只需要播放他的视频画面就好了,而不用去播放他的声音,需求很怪,尝试了mediaplayer的各种方法也没有解决,后来想了一个取巧的方法。 通过设置mediaplayer.setAudioStreamType(AudioManager.STREAM_ALERM),使用闹钟的音量来播放视频,然后我们可以通过调节闹钟
android简易播放器,边下边播放,边缓冲边播放
简易播放器,边下边播放,边缓冲边播放,可以在应用里使用 已经相对独立了 使用media SurfaceView 做的
Android实现MP4边下边播(边缓存边播放、在线播放)原理与代码
对于这套方法我已经封装成库,可以直接下载使用。 MP4Info1.0.2.jar下载 配套的视频播放器终于出来了,可自定义性很大。 MP4Player1.0.1.jarDemo下载 另外写了一个查看MP4结构的软件,安卓版的 (下载安卓版MP4Info查看MP4结构) 码云项目 MP4Info-码云开源 边下边播方法初试 刚开始实现这个的时候,我第一下想到的是:先将MP4...
android中使用MediaPlayer播放视频
Android中播放视频主要有两种方式: 使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型 使用android自带的VideoView,这种方法太简单就不介绍了 使用SurfaceView+MediaPlayer,这种方式效果比较好,这里也重点介绍
Android 播放MP4文件
Android 播放MP4文件 首先,要在AndroidManifest.xml文件中添加相应的权限: 第二步,布局文件
android在线边缓存边播放mp4
android在线边缓存边播放mp4
MediaPlayer IllegalStateException
MediaPlayer类可用于控制音频/视频文件或流的播放。关于如何使用这个类的方法还可以阅读VideoView类的文档。 1.状态图 对播放音频/视频文件和流的控制是通过一个状态机来管理的。下图显示一个MediaPlayer对象被支持的播放控制操作驱动的生命周期和状态。椭圆代表MediaPlayer对象可能驻留的状态。弧线表示驱动MediaPlayer在各个状态之间迁移的播放控制
Android MediaPlayer简单的实用以及续播的实现
MianActivity.javapackage xyz.video;import android.app.Activity; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; import android.media.MediaPlayer; import android