我怎样才能播放video块的字节?

我想在Android中播放video,这是我保存在资产文件夹中的video。 我已经把它改成了一个字节数组,并使用下面的代码成功播放

private String getDataSource() throws IOException { InputStream stream = getAssets().open("famous.3gp"); if (stream == null) throw new RuntimeException("stream is null"); File temp = File.createTempFile("test", "mp4"); temp.deleteOnExit(); String tempPath = temp.getAbsolutePath(); int totalRead = 0; int bytesToRead = 1 * 1024; FileOutputStream out = new FileOutputStream(temp); byte buf[] = new byte[128]; int numread = 0; do { numread = stream.read(buf); totalRead += numread; if (numread <= 0) break; out.write(buf, 0, numread); } while (totalRead<bytesToRead); try { stream.close(); } catch (IOException ex) { Log.e("mini", "error: " + ex.getMessage(), ex); } return tempPath; // } } 

并在创build

  videoView.setVideoPath(getDataSource()); 

但是我的要求是,我想玩数组中的前100个字节,当它结束时,按顺序播放下100个字节,然后再播放100个字节。

Solutions Collecting From Web of "我怎样才能播放video块的字节?"

我得到了解决scheme

 public class VideoDemo extends Activity { private MediaController ctlr; VideoView videoView = null; Context context = null; long totalRead = 0; int bytesToRead = 50 * 1024; private int mPlayerPosition; private File mBufferFile; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(R.layout.main); videoView = (VideoView) findViewById(R.id.videoview); ctlr = new MediaController(this); ctlr.setMediaPlayer(videoView); videoView.setMediaController(ctlr); videoView.requestFocus(); new GetYoutubeFile().start(); } private class GetYoutubeFile extends Thread { private String mUrl; private String mFile; public GetYoutubeFile() { } @Override public void run() { super.run(); try { File bufferingDir = new File( Environment.getExternalStorageDirectory() + "/YoutubeBuff"); InputStream stream = getAssets().open("famous.3gp"); if (stream == null) throw new RuntimeException("stream is null"); File temp = File.createTempFile("test", "mp4"); System.out.println("hi"); temp.deleteOnExit(); String tempPath = temp.getAbsolutePath(); File bufferFile = File.createTempFile("test", "mp4"); BufferedOutputStream bufferOS = new BufferedOutputStream( new FileOutputStream(bufferFile)); InputStream is = getAssets().open("famous.3gp"); BufferedInputStream bis = new BufferedInputStream(is, 2048); byte[] buffer = new byte[16384]; int numRead; boolean started = false; while ((numRead = bis.read(buffer)) != -1) { bufferOS.write(buffer, 0, numRead); bufferOS.flush(); totalRead += numRead; if (totalRead > 120000 && !started) { Log.e("Player", "BufferHIT:StartPlay"); setSourceAndStartPlay(bufferFile); started = true; } } mBufferFile = bufferFile; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } public void setSourceAndStartPlay(File bufferFile) { try { mPlayerPosition=videoView.getCurrentPosition(); videoView.setVideoPath(bufferFile.getAbsolutePath()); videoView.start(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public void onCompletion(MediaPlayer mp) { mPlayerPosition = mp.getCurrentPosition(); try { mp.reset(); videoView.setVideoPath(new File("mnt/sdcard/YoutubeBuff/" + mBufferFile).getAbsolutePath()); mp.seekTo(mPlayerPosition); videoView.start(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } 

在我的XML我只有videoview