Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:通过http播放大型视频MP4文件_Java_Android_Video_Streaming - Fatal编程技术网

Java Android:通过http播放大型视频MP4文件

Java Android:通过http播放大型视频MP4文件,java,android,video,streaming,Java,Android,Video,Streaming,我的http服务器上有300 MB的视频…我正在尝试编写简单的代码,以便在3G模式下远程播放这些视频-sd存储或本地存储不是一个选项。当然,我是从SDK android-17 MediaPlayerDemo_视频中的演示源开始的,VideoViewDemo。。。在3G模式下,我的视频无法播放,我正在三星Galaxy Nexus上测试。之后,我在下一个代码中进行了新的尝试: /** * Listing 15-4: Initializing and assigning a Surface View

我的http服务器上有300 MB的视频…我正在尝试编写简单的代码,以便在3G模式下远程播放这些视频-sd存储或本地存储不是一个选项。当然,我是从SDK android-17 MediaPlayerDemo_视频中的演示源开始的,VideoViewDemo。。。在3G模式下,我的视频无法播放,我正在三星Galaxy Nexus上测试。之后,我在下一个代码中进行了新的尝试:

/**
 * Listing 15-4: Initializing and assigning a Surface View to a Media Player
 */
import java.io.IOException;

import mobile.dariknews.R;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.MediaController.MediaPlayerControl;

public class SurfaceViewVideoViewActivity extends Activity 
  implements SurfaceHolder.Callback {

  static final String TAG = "SurfaceViewVideoViewActivity";

  private MediaPlayer mediaPlayer;

  public void surfaceCreated(SurfaceHolder holder) { 
    try {
      // When the surface is created, assign it as the
      // display surface and assign and prepare a data 
      // source.
      mediaPlayer.setDisplay(holder);
      mediaPlayer.setDataSource("http://snimkitevi-bg.com/darik/1.MP4");
      //mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
      mediaPlayer.prepareAsync();
    } catch (IllegalArgumentException e) {
      Log.e(TAG, "Illegal Argument Exception", e);
    } catch (IllegalStateException e) {
      Log.e(TAG, "Illegal State Exception", e);
    } catch (SecurityException e) {
      Log.e(TAG, "Security Exception", e);
    } catch (Exception e) {      
      Log.e(TAG, "IO Exception", e);
    }
  }

  public void surfaceDestroyed(SurfaceHolder holder) {
    mediaPlayer.release();
  }  

  public void surfaceChanged(SurfaceHolder holder,
                             int format, int width, int height) { }


  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.surfaceviewvideoviewer);

    // Create a new Media Player.
    mediaPlayer = new MediaPlayer();

    // Get a reference to the Surface View.
    final SurfaceView surfaceView =
      (SurfaceView)findViewById(R.id.surfaceView);

    // Configure the Surface View.
    surfaceView.setKeepScreenOn(true);

    // Configure the Surface Holder and register the callback.
    SurfaceHolder holder = surfaceView.getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    holder.setFixedSize(400, 300);

    // Connect a play button.
    Button playButton = (Button)findViewById(R.id.buttonPlay);
    playButton.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        mediaPlayer.start();        
      }
    });

    // Connect a pause button.
    Button pauseButton = (Button)findViewById(R.id.buttonPause);
    pauseButton.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        mediaPlayer.pause();        
      }
    });

    // Add a skip button.
    Button skipButton = (Button)findViewById(R.id.buttonSkip);    
    skipButton.setOnClickListener(new OnClickListener() {
      public void onClick(View v) {
        mediaPlayer.seekTo(mediaPlayer.getDuration()/2);
      }
    });

    /**
     * Listing 15-5: Controlling playback using the Media Controller
     */
    MediaController mediaController = new MediaController(this);
    mediaController.setMediaPlayer(new MediaPlayerControl() {
      public boolean canPause() {
        return true;
      }

      public boolean canSeekBackward() {
        return true;
      }

      public boolean canSeekForward() {
        return true;
      }

      public int getBufferPercentage() {
        return 0;
      }

      public int getCurrentPosition() {
        return mediaPlayer.getCurrentPosition();
      }

      public int getDuration() {
        return mediaPlayer.getDuration();
      }

      public boolean isPlaying() {
        return mediaPlayer.isPlaying();
      }

      public void pause() {
        mediaPlayer.pause();
      }

      public void seekTo(int pos) {
        mediaPlayer.seekTo(pos);
      }

      public void start() {
        mediaPlayer.start();
      }
    });    
  }
}
在那次新的尝试之后

import android.app.Activity;
import android.app.Application;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.widget.MediaController;
import android.widget.VideoView;

public class PlayerActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.videoplayer);
        new LoadOutbox().execute();

    }

    /**
     * Background Async Task to Load all OUTBOX messages by making HTTP Request
     * */
    class LoadOutbox extends AsyncTask<String, String, String> {
        int progressBarStatus = 0;
        private Handler progressBarHandler = new Handler();

        /**
         * Before starting background thread Show Progress Dialog
         * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        /**
         * getting Outbox JSON
         * */
        protected String doInBackground(String... args) {
            // Building Parameters
            VideoView videoView = (VideoView) findViewById(R.id.videoView1);
            videoView.setKeepScreenOn(true);
            // Attach a Media Controller MediaController mediaController = new
            // MediaController( this); videoView.setMediaController(
            // mediaController);
            MediaController mediaController = new MediaController(
                    PlayerActivity.this);

            videoView.setMediaController(mediaController);

            Uri uri = Uri.parse("http://snimkitevi-bg.com/darik/1.MP4");
            videoView.setVideoURI(uri);
            videoView.start();

            return null;
        }

        /**
         * After completing background task Dismiss the progress dialog
         * **/
        protected void onPostExecute(String file_url) {
            // dismiss the dialog after getting all products

            // updating UI from Background Thread
            runOnUiThread(new Runnable() {
                public void run() {

                }
            });

        }

    }

    public static Bitmap getLocalImageBitmap(String url) {
        return MainNewsActivities.getLocalImageBitmap(url);
    }

}
之后,我用MediaPlayer和VIewVideo玩了50个其他测试。。。所有的结果都是一样的——缓慢而冻结的视频播放。我的需求很简单——我的网站上有大视频文件mp4,我想在我的应用程序上播放它们。所以我在这里-在android应用程序中播放大型远程文件的正确公式是什么

PS:当然我试过使用GStreamer,但这个框架与上一个android环境不兼容-我用了2天时间玩了…我的视频还可以-在wifi模式下我玩


因此,您能给我一些好的建议、示例和教程,说明MediaPlayer如何在3G internet连接中正常播放、缓冲和快速播放大视频文件吗?

您需要降低视频的带宽要求,无论您是否有不同的移动或动态转码选项。3G internet连接中的快速播放大视频文件,听起来不太好。我有一些类似的东西,最后我不得不下载这些文件。当我们开发一些视频流时,遇到了问题,我们首先检查了一下,他们是否能够处理。可能是数据太多了。你试过那样的东西吗?