77 lines
2.9 KiB
Java
77 lines
2.9 KiB
Java
package ctbrec.sites.showup;
|
|
|
|
import static ctbrec.io.HttpConstants.*;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import com.iheartradio.m3u8.ParseException;
|
|
import com.iheartradio.m3u8.PlaylistException;
|
|
|
|
import ctbrec.Config;
|
|
import ctbrec.io.BandwidthMeter;
|
|
import ctbrec.io.HttpClient;
|
|
import ctbrec.io.HttpException;
|
|
import ctbrec.recorder.download.hls.MergedFfmpegHlsDownload;
|
|
import okhttp3.Request;
|
|
import okhttp3.Response;
|
|
|
|
public class ShowupMergedDownload extends MergedFfmpegHlsDownload {
|
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(ShowupMergedDownload.class);
|
|
|
|
public ShowupMergedDownload(HttpClient client) {
|
|
super(client);
|
|
}
|
|
|
|
@Override
|
|
protected void downloadSegments(String segmentPlaylistUri, boolean livestreamDownload) throws IOException, ParseException, PlaylistException {
|
|
try {
|
|
SegmentPlaylist lsp = getNextSegments(segmentPlaylistUri);
|
|
emptyPlaylistCheck(lsp);
|
|
|
|
for (String segment : lsp.segments) {
|
|
Request request = new Request.Builder().url(segment)
|
|
.header(USER_AGENT, Config.getInstance().getSettings().httpUserAgent)
|
|
.header(CONNECTION, KEEP_ALIVE)
|
|
.build();
|
|
try (Response response = client.execute(request)) {
|
|
if (response.isSuccessful()) {
|
|
InputStream in = response.body().byteStream();
|
|
byte[] buffer = new byte[10240];
|
|
int length = -1;
|
|
boolean keepGoing = true;
|
|
while ((length = in.read(buffer)) >= 0 && keepGoing) {
|
|
BandwidthMeter.add(length);
|
|
writeSegment(buffer, 0, length);
|
|
keepGoing = running && !Thread.interrupted() && model.isOnline(true);
|
|
if (livestreamDownload) {
|
|
splitRecordingIfNecessary();
|
|
}
|
|
}
|
|
} else {
|
|
throw new HttpException(response.code(), response.message());
|
|
}
|
|
}
|
|
}
|
|
} catch (HttpException e) {
|
|
if (e.getResponseCode() == 404) {
|
|
LOG.debug("Playlist not found (404). Model {} probably went offline", model);
|
|
} else if (e.getResponseCode() == 403) {
|
|
LOG.debug("Playlist access forbidden (403). Model {} probably went private or offline", model);
|
|
} else {
|
|
LOG.info("Unexpected error while downloading {}", model, e);
|
|
}
|
|
running = false;
|
|
} catch (Exception e) {
|
|
LOG.info("Unexpected error while downloading {}", model, e);
|
|
running = false;
|
|
}
|
|
|
|
ffmpegThread.interrupt();
|
|
}
|
|
}
|