Fixed bug, added final, removed not needed initialization, and minor improvements.

This commit is contained in:
kohlerpop1
2024-01-19 16:45:35 -05:00
parent 2385d1e75e
commit a0ac9e6d79
4 changed files with 33 additions and 94 deletions

View File

@@ -41,7 +41,7 @@ public class TikTokWebSocketClient implements SocketClient {
private final TikTokLiveEventHandler tikTokEventHandler; private final TikTokLiveEventHandler tikTokEventHandler;
private WebSocketClient webSocketClient; private WebSocketClient webSocketClient;
private TikTokWebSocketPingingTask pingingTask; private final TikTokWebSocketPingingTask pingingTask;
private boolean isConnected; private boolean isConnected;
public TikTokWebSocketClient( public TikTokWebSocketClient(

View File

@@ -11,24 +11,18 @@ public class TikTokWebSocketPingingTask
private final int MIN_TIMEOUT = 250; private final int MIN_TIMEOUT = 250;
private final int MAX_TIMEOUT = 500; private final int MAX_TIMEOUT = 500;
public void run(WebSocket webSocket) public void run(WebSocket webSocket)
{ {
stop(); stop();
thread = new Thread(() -> thread = new Thread(() -> pingTask(webSocket));
{ isRunning = true;
pingTask(webSocket);
});
isRunning =true;
thread.start(); thread.start();
} }
public void stop() public void stop()
{ {
if(thread != null) if (thread != null)
{
thread.interrupt(); thread.interrupt();
}
isRunning = false; isRunning = false;
} }
@@ -36,12 +30,9 @@ public class TikTokWebSocketPingingTask
private void pingTask(WebSocket webSocket) private void pingTask(WebSocket webSocket)
{ {
var random = new Random(); var random = new Random();
while (isRunning) while (isRunning) {
{ try {
try if (!webSocket.isOpen()) {
{
if(!webSocket.isOpen())
{
Thread.sleep(100); Thread.sleep(100);
continue; continue;
} }
@@ -50,11 +41,10 @@ public class TikTokWebSocketPingingTask
var timeout = random.nextInt(MAX_TIMEOUT)+MIN_TIMEOUT; var timeout = random.nextInt(MAX_TIMEOUT)+MIN_TIMEOUT;
Thread.sleep(timeout); Thread.sleep(timeout);
} }
catch (Exception e) catch (Exception e) {
{
isRunning = false; isRunning = false;
} }
} }
} }
} }

View File

@@ -24,24 +24,18 @@ package io.github.jwdeveloper.tiktok.extension.recorder.impl;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import io.github.jwdeveloper.tiktok.annotations.TikTokEventObserver; import io.github.jwdeveloper.tiktok.annotations.TikTokEventObserver;
import io.github.jwdeveloper.tiktok.data.events.TikTokLiveEndedEvent; import io.github.jwdeveloper.tiktok.data.events.*;
import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings;
import io.github.jwdeveloper.tiktok.extension.recorder.api.LiveRecorder;
import io.github.jwdeveloper.tiktok.data.events.TikTokConnectedEvent;
import io.github.jwdeveloper.tiktok.data.events.TikTokDisconnectedEvent;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
import io.github.jwdeveloper.tiktok.extension.recorder.impl.data.DownloadData;
import io.github.jwdeveloper.tiktok.extension.recorder.impl.data.RecorderSettings;
import io.github.jwdeveloper.tiktok.data.events.http.TikTokRoomDataResponseEvent; import io.github.jwdeveloper.tiktok.data.events.http.TikTokRoomDataResponseEvent;
import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings;
import io.github.jwdeveloper.tiktok.exceptions.TikTokLiveException;
import io.github.jwdeveloper.tiktok.extension.recorder.api.LiveRecorder;
import io.github.jwdeveloper.tiktok.extension.recorder.impl.data.*;
import io.github.jwdeveloper.tiktok.extension.recorder.impl.enums.LiveQuality; import io.github.jwdeveloper.tiktok.extension.recorder.impl.enums.LiveQuality;
import io.github.jwdeveloper.tiktok.extension.recorder.impl.event.TikTokLiveRecorderStartedEvent;
import io.github.jwdeveloper.tiktok.http.HttpClientFactory;
import io.github.jwdeveloper.tiktok.live.LiveClient; import io.github.jwdeveloper.tiktok.live.LiveClient;
import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.HttpsURLConnection;
import java.io.*; import java.io.*;
import java.net.URL; import java.net.URL;
import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -86,13 +80,11 @@ public class RecorderListener implements LiveRecorder {
throw new TikTokLiveException("Unable to find download live url!"); throw new TikTokLiveException("Unable to find download live url!");
} }
liveClient.getLogger().info("Live download url found!"); liveClient.getLogger().info("Live download url found!");
} }
@TikTokEventObserver @TikTokEventObserver
private void onConnected(LiveClient liveClient, TikTokConnectedEvent event) { private void onConnected(LiveClient liveClient, TikTokConnectedEvent event) {
liveDownloadThread = new Thread(() -> liveDownloadThread = new Thread(() -> {
{
try { try {
var bufferSize = 1024; var bufferSize = 1024;
var url = new URL(downloadData.getFullUrl()); var url = new URL(downloadData.getFullUrl());
@@ -102,40 +94,33 @@ public class RecorderListener implements LiveRecorder {
socksConnection.setRequestProperty(entry.getKey(), entry.getValue()); socksConnection.setRequestProperty(entry.getKey(), entry.getValue());
} }
try (var in = new BufferedInputStream(socksConnection.getInputStream())) { var in = new BufferedInputStream(socksConnection.getInputStream());
var path = settings.getOutputPath() + File.separator + settings.getOutputFileName(); var path = settings.getOutputPath() + File.separator + settings.getOutputFileName();
var file = new File(path); var file = new File(path);
file.getParentFile().mkdirs(); file.getParentFile().mkdirs();
var fileOutputStream = new FileOutputStream(file); var fileOutputStream = new FileOutputStream(file);
byte dataBuffer[] = new byte[bufferSize]; byte[] dataBuffer = new byte[bufferSize];
int bytesRead; int bytesRead;
while ((bytesRead = in.read(dataBuffer, 0, bufferSize)) != -1) { while ((bytesRead = in.read(dataBuffer, 0, bufferSize)) != -1) {
fileOutputStream.write(dataBuffer, 0, bytesRead); fileOutputStream.write(dataBuffer, 0, bytesRead);
}
} catch (IOException e) {
throw e;
} }
} catch (Exception e) { in.close();
} catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
;
} }
}); });
liveDownloadThread.start(); liveDownloadThread.start();
} }
private static void downloadUsingStream(String urlStr, String file) throws IOException { private static void downloadUsingStream(String urlStr, String file) throws IOException {
URL url = new URL(urlStr); URL url = new URL(urlStr);
BufferedInputStream bis = new BufferedInputStream(url.openStream()); BufferedInputStream bis = new BufferedInputStream(url.openStream());
FileOutputStream fis = new FileOutputStream(file); FileOutputStream fis = new FileOutputStream(file);
byte[] buffer = new byte[1024]; byte[] buffer = new byte[1024];
int count = 0; int count;
while ((count = bis.read(buffer, 0, 1024)) != -1) { while ((count = bis.read(buffer, 0, 1024)) != -1)
fis.write(buffer, 0, count); fis.write(buffer, 0, count);
}
fis.close(); fis.close();
bis.close(); bis.close();
} }
@@ -153,15 +138,11 @@ public class RecorderListener implements LiveRecorder {
private int terminateFfmpeg(final Process process) { private int terminateFfmpeg(final Process process) {
if (!process.isAlive()) { if (!process.isAlive()) {
/* // ffmpeg -version, do nothing
* ffmpeg -version, do nothing
*/
return process.exitValue(); return process.exitValue();
} }
/* // ffmpeg -f x11grab
* ffmpeg -f x11grab
*/
System.out.println("About to destroy the child process..."); System.out.println("About to destroy the child process...");
try (final OutputStreamWriter out = new OutputStreamWriter(process.getOutputStream(), UTF_8)) { try (final OutputStreamWriter out = new OutputStreamWriter(process.getOutputStream(), UTF_8)) {
out.write('q'); out.write('q');
@@ -174,7 +155,7 @@ public class RecorderListener implements LiveRecorder {
process.waitFor(); process.waitFor();
} }
return process.exitValue(); return process.exitValue();
} catch (final InterruptedException ie) { } catch (InterruptedException ie) {
System.out.println("Interrupted"); System.out.println("Interrupted");
ie.printStackTrace(); ie.printStackTrace();
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
@@ -201,12 +182,10 @@ public class RecorderListener implements LiveRecorder {
.get("flv") .get("flv")
.getAsString(); .getAsString();
var sessionId = streamDataJsonObject.getAsJsonObject("common") var sessionId = streamDataJsonObject.getAsJsonObject("common")
.get("session_id") .get("session_id")
.getAsString(); .getAsString();
//main //main
//https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/stage/stream-3284937501738533765.flv?session_id=136-20240109000954BF818F1B3A8E5E39E238&_webnoredir=1 //https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/stage/stream-3284937501738533765.flv?session_id=136-20240109000954BF818F1B3A8E5E39E238&_webnoredir=1
//Working //Working
@@ -215,6 +194,4 @@ public class RecorderListener implements LiveRecorder {
return new DownloadData(urlLink, sessionId); return new DownloadData(urlLink, sessionId);
} }
}
}

View File

@@ -29,25 +29,6 @@ import lombok.Setter;
import java.util.function.Function; import java.util.function.Function;
/**
* self,
* path: str,
* duration: Optional[int] = None,
* quality: Optional[VideoQuality] = None,
* verbose: bool = True,
* loglevel: str = "error",
* global_options: Set[str] = set(),
* inputs: Dict[str, str] = dict(),
* outputs: Dict[str, str] = dict()
* :param loglevel: Set the FFmpeg log level
* :param outputs: Pass custom params to FFmpeg outputs
* :param inputs: Pass custom params to FFmpeg inputs
* :param global_options: Pass custom params to FFmpeg global options
* :param path: The path to download the livestream video to
* :param duration: If duration is None or less than 1, download will go forever
* :param quality: If quality is None, download quality will auto
* :param verbose: Whether to log info about the download in console
*/
@Getter @Getter
@Setter @Setter
public class RecorderSettings { public class RecorderSettings {
@@ -63,20 +44,11 @@ public class RecorderSettings {
return new RecorderSettings(); return new RecorderSettings();
} }
public void setQuality(String format) {
this.format = format;
}
public void setQuality(LiveQuality quality) { public void setQuality(LiveQuality quality) {
this.quality = quality.name(); this.quality = quality.name();
} }
public void setFormat(String format) {
this.format = format;
}
public void setFormat(LiveFormat format) { public void setFormat(LiveFormat format) {
this.format = format.name(); this.format = format.name();
} }
} }