Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3d4a517

Browse files
committed
Removal of TikTokRoomDataResponseEvent.java as its included in TikTokPreConnectionEvent.java
Added ListUser#toString Changed TikTokLiveHttpClient.getStartingPayload and TikTokLiveHttpClient.getByteResponse to protected Altered DownloadData to be dynamic to declare request values or append them instead!
1 parent ee0b559 commit 3d4a517

File tree

6 files changed

+56
-79
lines changed

6 files changed

+56
-79
lines changed

API/src/main/java/io/github/jwdeveloper/tiktok/data/events/http/TikTokRoomDataResponseEvent.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

API/src/main/java/io/github/jwdeveloper/tiktok/data/models/users/ListUser.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,19 @@ public enum LinkType {
5353
AUDIO,
5454
VIDEO
5555
}
56+
57+
@Override
58+
public String toString() {
59+
return "ListUser{" +
60+
"user=" + user +
61+
", linkType=" + linkType +
62+
", linkMicId=" + linkMicId +
63+
", linkStatus=" + linkStatus +
64+
", modifyTime=" + modifyTime +
65+
", linkerId=" + linkerId +
66+
", userPosition=" + userPosition +
67+
", silenceStatus=" + silenceStatus +
68+
", roleType=" + roleType +
69+
"}";
70+
}
5671
}

Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveClient.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import io.github.jwdeveloper.tiktok.data.events.*;
2727
import io.github.jwdeveloper.tiktok.data.events.common.TikTokEvent;
2828
import io.github.jwdeveloper.tiktok.data.events.control.*;
29-
import io.github.jwdeveloper.tiktok.data.events.http.TikTokRoomDataResponseEvent;
3029
import io.github.jwdeveloper.tiktok.data.events.room.TikTokRoomInfoEvent;
3130
import io.github.jwdeveloper.tiktok.data.requests.*;
3231
import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings;
@@ -89,8 +88,7 @@ public void connect() {
8988
if (e instanceof TikTokLiveOfflineHostException && clientSettings.isRetryOnConnectionFailure()) {
9089
try {
9190
Thread.sleep(clientSettings.getRetryConnectionTimeout().toMillis());
92-
} catch (Exception ignored) {
93-
}
91+
} catch (Exception ignored) {}
9492
logger.info("Reconnecting");
9593
tikTokEventHandler.publish(this, new TikTokReconnectingEvent());
9694
this.connect();
@@ -133,8 +131,6 @@ public void tryConnect() {
133131
if (liveData.getLiveStatus() == LiveData.LiveStatus.HostOffline)
134132
throw new TikTokLiveOfflineHostException("LiveStream for " + roomInfo.getHostName() + " not found, is the Host offline?");
135133

136-
tikTokEventHandler.publish(this, new TikTokRoomDataResponseEvent(liveData));
137-
138134
roomInfo.setTitle(liveData.getTitle());
139135
roomInfo.setViewersCount(liveData.getViewers());
140136
roomInfo.setTotalViewersCount(liveData.getTotalViewers());

Client/src/main/java/io/github/jwdeveloper/tiktok/TikTokLiveHttpClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ public LiveConnectionData.Response fetchLiveConnectionData(LiveConnectionData.Re
203203
}
204204
}
205205

206-
private ActionResult<HttpResponse<byte[]>> getStartingPayload(LiveConnectionData.Request request) {
206+
protected ActionResult<HttpResponse<byte[]>> getStartingPayload(LiveConnectionData.Request request) {
207207
var proxyClientSettings = clientSettings.getHttpSettings().getProxyClientSettings();
208208
if (proxyClientSettings.isEnabled()) {
209209
while (proxyClientSettings.hasNext()) {
@@ -215,7 +215,7 @@ private ActionResult<HttpResponse<byte[]>> getStartingPayload(LiveConnectionData
215215
return getByteResponse(request.getRoomId());
216216
}
217217

218-
private ActionResult<HttpResponse<byte[]>> getByteResponse(String room_id) {
218+
protected ActionResult<HttpResponse<byte[]>> getByteResponse(String room_id) {
219219
HttpClientBuilder builder = httpFactory.client(TIKTOK_SIGN_API)
220220
.withParam("client", "ttlive-java")
221221
.withParam("uuc", "1") //MAGIC NUMBER!

extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/RecorderListener.java

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import com.google.gson.JsonParser;
2626
import io.github.jwdeveloper.tiktok.annotations.TikTokEventObserver;
2727
import io.github.jwdeveloper.tiktok.data.events.*;
28-
import io.github.jwdeveloper.tiktok.data.events.http.TikTokRoomDataResponseEvent;
28+
import io.github.jwdeveloper.tiktok.data.events.control.TikTokPreConnectionEvent;
2929
import io.github.jwdeveloper.tiktok.data.settings.LiveClientSettings;
3030
import io.github.jwdeveloper.tiktok.extension.recorder.api.LiveRecorder;
3131
import io.github.jwdeveloper.tiktok.extension.recorder.impl.data.*;
@@ -34,28 +34,29 @@
3434
import io.github.jwdeveloper.tiktok.live.LiveClient;
3535
import io.github.jwdeveloper.tiktok.models.ConnectionState;
3636

37-
import javax.net.ssl.HttpsURLConnection;
3837
import java.io.*;
39-
import java.net.URL;
40-
import java.util.function.*;
38+
import java.net.URI;
39+
import java.net.http.*;
40+
import java.time.Duration;
41+
import java.util.function.BiConsumer;
4142

4243
public class RecorderListener implements LiveRecorder {
4344

4445
private final BiConsumer<RecorderSettings, LiveClient> consumer;
45-
private RecorderSettings settings;
46+
private final RecorderSettings settings;
4647
private DownloadData downloadData;
4748
private Thread liveDownloadThread;
4849

4950
public RecorderListener(BiConsumer<RecorderSettings, LiveClient> consumer) {
5051
this.consumer = consumer;
52+
this.settings = RecorderSettings.DEFAULT();
5153
}
5254

5355
@TikTokEventObserver
54-
private void onResponse(LiveClient liveClient, TikTokRoomDataResponseEvent event) {
55-
settings = RecorderSettings.DEFAULT();
56+
private void onResponse(LiveClient liveClient, TikTokPreConnectionEvent event) {
5657
consumer.accept(settings, liveClient);
5758

58-
var json = event.getLiveData().getJson();
59+
var json = event.getUserData().getJson();
5960

6061
liveClient.getLogger().info("Searching for live download url");
6162
downloadData = settings.getPrepareDownloadData() != null ?
@@ -70,26 +71,26 @@ private void onResponse(LiveClient liveClient, TikTokRoomDataResponseEvent event
7071

7172
@TikTokEventObserver
7273
private void onConnected(LiveClient liveClient, TikTokConnectedEvent event) {
73-
if (isConnected())
74+
if (isConnected() || downloadData.getDownloadLiveUrl().isEmpty())
7475
return;
7576

7677
liveDownloadThread = new Thread(() -> {
7778
try {
7879
liveClient.getLogger().info("Recording started "+liveClient.getRoomInfo().getHostName());
79-
var url = new URL(downloadData.getFullUrl());
80-
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
81-
var headers = LiveClientSettings.DefaultRequestHeaders();
82-
for (var entry : headers.entrySet()) {
83-
connection.setRequestProperty(entry.getKey(), entry.getValue());
84-
}
80+
81+
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder(URI.create(downloadData.getFullUrl())).GET();
82+
for (var entry : LiveClientSettings.DefaultRequestHeaders().entrySet())
83+
requestBuilder.header(entry.getKey(), entry.getValue());
84+
HttpResponse<InputStream> serverResponse = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.NORMAL)
85+
.connectTimeout(Duration.ofSeconds(10)).build().send(requestBuilder.build(), HttpResponse.BodyHandlers.ofInputStream());
8586

8687
var file = settings.getOutputFile();
8788
file.getParentFile().mkdirs();
8889
file.createNewFile();
8990

9091
try (
91-
var in = connection.getInputStream();
92-
var fos = new FileOutputStream(file)
92+
var in = serverResponse.body();
93+
var fos = new FileOutputStream(file, true)
9394
) {
9495
byte[] dataBuffer = new byte[1024];
9596
int bytesRead;
@@ -128,35 +129,38 @@ private void onLiveEnded(LiveClient liveClient, TikTokLiveEndedEvent event) {
128129

129130

130131
private DownloadData mapToDownloadData(String json) {
131-
132-
var parsedJson = JsonParser.parseString(json);
133-
var jsonObject = parsedJson.getAsJsonObject();
134-
var streamDataJson = jsonObject.getAsJsonObject("data")
135-
.getAsJsonObject("stream_url")
136-
.getAsJsonObject("live_core_sdk_data")
132+
try {
133+
var parsedJson = JsonParser.parseString(json);
134+
var jsonObject = parsedJson.getAsJsonObject();
135+
var streamDataJson = jsonObject.getAsJsonObject("data")
136+
.getAsJsonObject("liveRoom")
137+
.getAsJsonObject("streamData")
137138
.getAsJsonObject("pull_data")
138139
.get("stream_data")
139140
.getAsString();
140141

141-
var streamDataJsonObject = JsonParser.parseString(streamDataJson).getAsJsonObject();
142+
var streamDataJsonObject = JsonParser.parseString(streamDataJson).getAsJsonObject();
142143

143-
var urlLink = streamDataJsonObject.getAsJsonObject("data")
144+
var urlLink = streamDataJsonObject.getAsJsonObject("data")
144145
.getAsJsonObject(LiveQuality.origin.name())
145146
.getAsJsonObject("main")
146147
.get("flv")
147148
.getAsString();
148149

149-
var sessionId = streamDataJsonObject.getAsJsonObject("common")
150+
var sessionId = streamDataJsonObject.getAsJsonObject("common")
150151
.get("session_id")
151152
.getAsString();
152153

153-
//main
154-
//https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/stage/stream-3284937501738533765.flv?session_id=136-20240109000954BF818F1B3A8E5E39E238&_webnoredir=1
155-
//Working
156-
//https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/game/stream-3284937501738533765_sd5.flv?_session_id=136-20240109001052D91FDBC00143211020C8.1704759052997&_webnoredir=1
157-
//https://pull-f5-tt02.fcdn.eu.tiktokcdn.com/stage/stream-3861399216374940610_uhd5.flv?_session_id=136-20240109000223D0BAA1A83974490EE630.1704758544391&_webnoredir=1
154+
//main
155+
//https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/stage/stream-3284937501738533765.flv?session_id=136-20240109000954BF818F1B3A8E5E39E238&_webnoredir=1
156+
//Working
157+
//https://pull-f5-tt03.fcdn.eu.tiktokcdn.com/game/stream-3284937501738533765_sd5.flv?_session_id=136-20240109001052D91FDBC00143211020C8.1704759052997&_webnoredir=1
158+
//https://pull-f5-tt02.fcdn.eu.tiktokcdn.com/stage/stream-3861399216374940610_uhd5.flv?_session_id=136-20240109000223D0BAA1A83974490EE630.1704758544391&_webnoredir=1
158159

159-
return new DownloadData(urlLink, sessionId);
160+
return new DownloadData(urlLink, sessionId);
161+
} catch (Exception e) {
162+
return new DownloadData("", "");
163+
}
160164
}
161165

162166
private boolean isConnected() {

extension-recorder/src/main/java/io/github/jwdeveloper/tiktok/extension/recorder/impl/data/DownloadData.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,6 @@ public class DownloadData {
3434
private String sessionId;
3535

3636
public String getFullUrl() {
37-
return downloadLiveUrl + "&_webnoredir=1&session_id=" + sessionId;
38-
}
37+
return downloadLiveUrl + (downloadLiveUrl.contains("?") ? "&" : "?") + "_webnoredir=1&session_id=" + sessionId;
38+
}
3939
}

0 commit comments

Comments
 (0)