package com.laifeng.sopcastsdk.stream.sender.rtmp.io;
import android.util.Log;
import com.laifeng.sopcastsdk.stream.sender.rtmp.packets.Chunk;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
/**
* RTMPConnection's read thread
*
* @author francois, leo
*/
public class ReadThread extends Thread {
private static final String TAG = "ReadThread";
private RtmpDecoder rtmpDecoder;
private InputStream in;
private OnReadListener listener;
private volatile boolean startFlag;
public ReadThread(InputStream in, SessionInfo sessionInfo) {
this.in = in;
this.rtmpDecoder = new RtmpDecoder(sessionInfo);
startFlag = true;
}
public void setOnReadListener(OnReadListener listener) {
this.listener = listener;
}
@Override
public void run() {
while (startFlag) {
try {
Chunk chunk = rtmpDecoder.readPacket(in);
if(chunk != null && listener != null) {
listener.onChunkRead(chunk);
}
} catch (EOFException e) {
startFlag = false;
if(listener != null) {
listener.onStreamEnd();
}
} catch (IOException e) {
startFlag = false;
if(listener != null) {
listener.onDisconnect();
}
}
}
}
public void shutdown() {
listener = null;
startFlag = false;
this.interrupt();
}
public void clearStoredChunks(int chunkStreamId) {
rtmpDecoder.clearStoredChunks(chunkStreamId);
}
}