Skip to content

Instantly share code, notes, and snippets.

@abhiguru
Created January 1, 2016 00:27
Show Gist options
  • Save abhiguru/9fb26a51c4e8b57d3d48 to your computer and use it in GitHub Desktop.
Save abhiguru/9fb26a51c4e8b57d3d48 to your computer and use it in GitHub Desktop.
Sample Source for vtt in ExoPlayer
package vcuplayer;
import android.media.MediaPlayer;
import android.os.AsyncTask;
import android.util.Log;
import com.google.android.exoplayer.MediaFormat;
import com.google.android.exoplayer.MediaFormatHolder;
import com.google.android.exoplayer.SampleHolder;
import com.google.android.exoplayer.SampleSource;
import com.google.android.exoplayer.TrackRenderer;
import com.google.android.exoplayer.util.Assertions;
import com.google.android.exoplayer.util.MimeTypes;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.ByteBuffer;
/**
* Created by aguru on 01/01/16.
*/
public class HttpSampleSource extends AsyncTask<Void, Void, Void> implements SampleSource, SampleSource.SampleSourceReader {
private ByteBuffer byteBuffer;
private int byteBufferSize;
private URL url;
private String mimeType;
private MediaPlayer.TrackInfo trackInfo;
private boolean readNeeded = true;
HttpSampleSource(URL url, String mimeType){
this.url = url;
this.mimeType = mimeType;
}
@Override
protected Void doInBackground(Void... params) {
try
{
URLConnection conn = url.openConnection();
InputStream inputStream = conn.getInputStream();
ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len;
while ((len = inputStream.read(buffer)) != -1 && !isCancelled())
{
byteBufferSize += len;
byteArrayOS.write(buffer, 0, len);
}
byteBuffer = ByteBuffer.wrap(byteArrayOS.toByteArray());
} catch (Exception e)
{
Log.d("VCU Log", e.getMessage());
}
return null;
}
@Override
public SampleSourceReader register() {
return null;
}
@Override
public void maybeThrowError() throws IOException {
}
@Override
public boolean prepare(long positionUs) {
if (getStatus() == AsyncTask.Status.PENDING) {
execute();
}
return true;
}
@Override
public int getTrackCount() {
return 1;
}
@Override
public MediaFormat getFormat(int track) {
return MediaFormat.createTextFormat(Integer.toString(track), mimeType,
MediaFormat.NO_VALUE, TrackRenderer.MATCH_LONGEST_US, "en");
}
@Override
public void enable(int track, long positionUs) {
readNeeded = true;
}
@Override
public boolean continueBuffering(int track, long positionUs) {
return false;
}
@Override
public int readData(int track, long positionUs, MediaFormatHolder formatHolder,
SampleHolder sampleHolder, boolean onlyReadDiscontinuity) {
if (byteBuffer == null)
{
return NOTHING_READ;
}
if (sampleHolder != null && readNeeded){
sampleHolder.size = byteBufferSize;
sampleHolder.data = byteBuffer;
readNeeded = false;
return SAMPLE_READ;
}
return END_OF_STREAM;
}
@Override
public void seekToUs(long positionUs) {
//return positionUs;
}
@Override
public long getBufferedPositionUs() {
return TrackRenderer.END_OF_TRACK_US;
}
@Override
public void disable(int track) {
}
@Override
public void release() {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment