diff --git a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java index 46bdb5d..25cb954 100644 --- a/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java +++ b/Client/src/main/java/io/github/jwdeveloper/tiktok/common/ActionResult.java @@ -100,8 +100,8 @@ public class ActionResult { public JsonObject toJson() { JsonObject map = new JsonObject(); map.addProperty("success", success); - map.add("content", gson.toJsonTree(content)); map.addProperty("message", message); + map.add("content", gson.toJsonTree(content)); map.add("previous", hasPrevious() ? previous.toJson() : null); return map; } diff --git a/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java b/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java index 50b05de..9c10e7b 100644 --- a/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java +++ b/Examples/src/main/java/io/github/jwdeveloper/tiktok/RecorderExample.java @@ -26,6 +26,8 @@ package io.github.jwdeveloper.tiktok; import io.github.jwdeveloper.tiktok.extension.recorder.TikTokLiveRecorder; import io.github.jwdeveloper.tiktok.extension.recorder.impl.event.TikTokLiveRecorderStartedEvent; +import java.io.File; + public class RecorderExample { public static void main(String[] args) { @@ -39,11 +41,10 @@ public class RecorderExample { { event.getException().printStackTrace(); }) - .addListener(TikTokLiveRecorder.use(recorderSettings -> + .addListener(TikTokLiveRecorder.use((recorderSettings, liveClient) -> { recorderSettings.setFfmpegPath("C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\extension-recorder\\libs\\ffmpeg.exe"); - recorderSettings.setOutputPath("C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\extension-recorder\\out"); - recorderSettings.setOutputFileName("test.flv"); + recorderSettings.setOutputFile(new File("C:\\Users\\ja\\IdeaProjects\\TikTokLiveJava\\extension-recorder\\out", "test.flv")); })) .onEvent(TikTokLiveRecorderStartedEvent.class, (liveClient, event) -> { @@ -52,4 +53,4 @@ public class RecorderExample { .buildAndConnect(); } -} +} \ No newline at end of file diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/TikTokLiveRecorder.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/TikTokLiveRecorder.java index 4db5f38..a54e786 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/TikTokLiveRecorder.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/TikTokLiveRecorder.java @@ -25,18 +25,19 @@ package io.github.jwdeveloper.tiktok.extension.recorder; import io.github.jwdeveloper.tiktok.extension.recorder.api.LiveRecorder; import io.github.jwdeveloper.tiktok.extension.recorder.impl.RecorderListener; import io.github.jwdeveloper.tiktok.extension.recorder.impl.data.RecorderSettings; +import io.github.jwdeveloper.tiktok.live.LiveClient; -import java.util.function.Consumer; +import java.util.function.*; public class TikTokLiveRecorder { - public static LiveRecorder use(Consumer consumer) + public static LiveRecorder use(BiConsumer consumer) { return new RecorderListener(consumer); } public static LiveRecorder use() { - return use(x ->{}); + return use((x,y) ->{}); } } \ No newline at end of file diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java index 7d0de49..b88cd5a 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java @@ -37,26 +37,23 @@ import io.github.jwdeveloper.tiktok.models.ConnectionState; import javax.net.ssl.HttpsURLConnection; import java.io.*; import java.net.URL; -import java.util.concurrent.TimeUnit; -import java.util.function.Consumer; - -import static java.nio.charset.StandardCharsets.UTF_8; +import java.util.function.*; public class RecorderListener implements LiveRecorder { - private final Consumer consumer; + private final BiConsumer consumer; private RecorderSettings settings; private DownloadData downloadData; private Thread liveDownloadThread; - public RecorderListener(Consumer consumer) { + public RecorderListener(BiConsumer consumer) { this.consumer = consumer; } @TikTokEventObserver private void onResponse(LiveClient liveClient, TikTokRoomDataResponseEvent event) { settings = RecorderSettings.DEFAULT(); - consumer.accept(settings); + consumer.accept(settings, liveClient); var json = event.getLiveData().getJson(); @@ -76,10 +73,9 @@ public class RecorderListener implements LiveRecorder { if (isConnected()) return; - liveDownloadThread = new Thread(() -> { try { - liveClient.getLogger().info("Recording started"); + liveClient.getLogger().info("Recording started "+liveClient.getRoomInfo().getHostName()); var url = new URL(downloadData.getFullUrl()); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); var headers = LiveClientSettings.DefaultRequestHeaders(); @@ -87,18 +83,17 @@ public class RecorderListener implements LiveRecorder { connection.setRequestProperty(entry.getKey(), entry.getValue()); } - var path = settings.getOutputPath() + File.separator + settings.getOutputFileName(); - var file = new File(path); + var file = settings.getOutputFile(); file.getParentFile().mkdirs(); file.createNewFile(); try ( - var in = connection.getInputStream(); - var fos = new FileOutputStream(file) + var in = connection.getInputStream(); + var fos = new FileOutputStream(file) ) { byte[] dataBuffer = new byte[1024]; int bytesRead; - while (liveClient.getRoomInfo().getConnectionState() == ConnectionState.CONNECTED && (bytesRead = in.read(dataBuffer)) != -1) { + while ((!settings.isStopOnDisconnect() || liveClient.getRoomInfo().getConnectionState() == ConnectionState.CONNECTED) && (bytesRead = in.read(dataBuffer)) != -1) { fos.write(dataBuffer, 0, bytesRead); fos.flush(); } @@ -113,11 +108,10 @@ public class RecorderListener implements LiveRecorder { var recordingStartedEvent = new TikTokLiveRecorderStartedEvent(downloadData); liveClient.publishEvent(recordingStartedEvent); - if (recordingStartedEvent.isCanceled()) { - liveClient.getLogger().info("Recording cancelled"); - return; - } - liveDownloadThread.start(); + if (recordingStartedEvent.isCanceled()) + liveClient.getLogger().info("Recording cancelled"); + else + liveDownloadThread.start(); } @TikTokEventObserver diff --git a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java index 2b04f01..c27de1b 100644 --- a/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java +++ b/extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/RecorderSettings.java @@ -27,6 +27,7 @@ import io.github.jwdeveloper.tiktok.extension.recorder.impl.enums.LiveFormat; import lombok.Getter; import lombok.Setter; +import java.io.File; import java.util.function.Function; @Getter @@ -36,10 +37,8 @@ public class RecorderSettings { private String ffmpegPath; private String quality; private String format; - private String outputPath; - private String outputFileName; + private File outputFile; private Function prepareDownloadData; - private boolean startOnConnected; private boolean stopOnDisconnect = true; public static RecorderSettings DEFAULT() {