I want to play a video in android,which i had saved in my assets folder. I have changed it into a byte array and it is playing successfully,using the below code
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;
         // }
     }
and in oncreate
 videoView.setVideoPath(getDataSource());
But my requirement is, i want to play like, first 100 bytes from the array, and when it is finished ,play next 100 bytes in sequence and then another 100 like this.
I got the solution
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();
    }
}
and in my xml i had only videoview
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With