ctbrec/src/main/java/org/taktik/mpegts/sources/InputStreamMTSSource.java

64 lines
1.8 KiB
Java

package org.taktik.mpegts.sources;
import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import org.taktik.mpegts.Constants;
import org.taktik.mpegts.MTSPacket;
import com.google.common.base.Preconditions;
public class InputStreamMTSSource extends AbstractMTSSource {
private InputStream inputStream;
private InputStreamMTSSource(InputStream inputStream) throws IOException {
this.inputStream = inputStream;
}
public static InputStreamMTSSourceBuilder builder() {
return new InputStreamMTSSourceBuilder();
}
@Override
protected MTSPacket nextPacketInternal() throws IOException {
byte[] packetData = new byte[Constants.MPEGTS_PACKET_SIZE];
int bytesRead = 0;
while(bytesRead < Constants.MPEGTS_PACKET_SIZE) {
int bytesLeft = Constants.MPEGTS_PACKET_SIZE - bytesRead;
int length = inputStream.read(packetData, bytesRead, bytesLeft);
bytesRead += length;
if(length == -1) {
// no more bytes available
return null;
}
}
// Parse the packet
return new MTSPacket(ByteBuffer.wrap(packetData));
}
@Override
protected void closeInternal() throws Exception {
inputStream.close();
}
public static class InputStreamMTSSourceBuilder {
private InputStream inputStream;
private InputStreamMTSSourceBuilder() {
}
public InputStreamMTSSourceBuilder setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
return this;
}
public InputStreamMTSSource build() throws IOException {
Preconditions.checkNotNull(inputStream, "InputStream cannot be null");
return new InputStreamMTSSource(inputStream);
}
}
}