2024-08-30 16:37:44 +08:00

192 lines
7.8 KiB
Java

package com.yutou;
import com.alibaba.fastjson2.JSONObject;
import com.yutou.bili.api.LiveApi;
import com.yutou.bili.api.UserApi;
import com.yutou.bili.bean.live.LiveRoomConfig;
import com.yutou.bili.bean.live.LiveRoomPlayInfo;
import com.yutou.bili.bean.live.SpiBean;
import com.yutou.bili.bean.login.LoginCookie;
import com.yutou.bili.bean.login.UserInfoBean;
import com.yutou.bili.enums.LiveProtocol;
import com.yutou.bili.enums.LiveVideoCodec;
import com.yutou.bili.enums.LiveVideoDefinition;
import com.yutou.bili.enums.LiveVideoFormat;
import com.yutou.bili.net.BiliLiveNetApiManager;
import com.yutou.bili.net.BiliLoginNetApiManager;
import com.yutou.bili.databases.BiliBiliLoginDatabase;
import com.yutou.bili.net.BiliUserNetApiManager;
import com.yutou.bili.net.WebSocketManager;
import com.yutou.inter.IHttpApiCheckCallback;
import com.yutou.okhttp.HttpCallback;
import com.yutou.okhttp.HttpLoggingInterceptor;
import com.yutou.utils.Log;
import jakarta.xml.bind.DatatypeConverter;
import okhttp3.Headers;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) {
HttpLoggingInterceptor.setLog(false);
HttpLoggingInterceptor.setLog(true);
// getPlayUrl();
LiveRoomConfig config=new LiveRoomConfig();
LoginCookie cookie = BiliBiliLoginDatabase.getInstance().get();
config.setLogin(true);
config.setUid(cookie.getDedeUserID());
config.setRoomId(String.valueOf(855204));
config.setRoomId(String.valueOf(22642754));
config.setRoomId(String.valueOf(81004));
WebSocketManager.getInstance().addRoom(config);
}
public static void testSocket(SpiBean spi) {
try {
JSONObject json = new JSONObject();
// json.put("roomid", "32805602");
json.put("roomid", "855204");
json.put("protover", "3");
json.put("platform", "web");
json.put("type", 2);
json.put("buvid",spi.getB_3());
json.put("key", "aaaabbb");
Log.i(json);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// outputStream.write(toLH(json.toString().length() + 16));
outputStream.write(new byte[]{0, 0, 1, 68, 0, 16, 0, 1, 0, 0, 0, 7, 0, 0, 0, 1});
outputStream.write(json.toJSONString().getBytes(StandardCharsets.UTF_8));
outputStream.flush();
System.out.println("\n\n\n");
String str = DatatypeConverter.printHexBinary(outputStream.toByteArray());
for (int i = 0; i < str.length(); i = i + 4) {
if (i % 32 == 0 && i != 0) {
System.out.println();
}
if (str.length() - i > 4) {
System.out.print(str.substring(i, i + 4) + " ");
} else {
System.out.println(str.substring(i));
}
}
System.out.println("\n\n\n");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getPlayUrl() {
BiliLiveNetApiManager
.getInstance()
.getApi(new IHttpApiCheckCallback<LiveApi>() {
@Override
public void onSuccess(LiveApi api) {
String roomId = "32805602";
String mid = "68057278";
// roomId="42062";
api.getLiveRoomPlayInfo(
roomId,
LiveProtocol.getAll(),
LiveVideoFormat.getAll(),
LiveVideoCodec.getAll(),
LiveVideoDefinition.ORIGINAL.getValue()
).enqueue(new HttpCallback<>() {
@Override
public void onResponse(Headers headers, int code, String status, LiveRoomPlayInfo response, String rawResponse) {
LiveRoomPlayInfo.Codec codec = response.getPlayurlInfo().getPlayurl().getStream().get(0).getFormat().get(0).getCodec().get(0);
LiveRoomConfig config = new LiveRoomConfig();
config.setUid("0");
config.setRoomId(roomId);
config.setMid(mid);
config.setLogin(false);
WebSocketManager.getInstance().addRoom(config);
/*String url = codec.getUrlInfo().get(0).getHost() + codec.getBaseUrl() + codec.getUrlInfo().get(0).getExtra();
System.out.println("下载url = " + url);
api.downloadLive(url).enqueue(new FileCallback<>(response) {
@Override
public void onStart(LiveRoomPlayInfo bean) {
System.out.println("开始下载");
}
@Override
public boolean onDownload(Headers headers, LiveRoomPlayInfo bean, long len, long total) {
System.out.println("下载中:"+len+"|"+total);
return true;
}
@Override
public void onFinish(LiveRoomPlayInfo bean) {
System.out.println("下载结束");
}
@Override
public void onFailure(LiveRoomPlayInfo bean, Throwable throwable) {
System.out.println("下载失败");
}
});*/
}
@Override
public void onFailure(Throwable throwable) {
}
});
}
@Override
public void onError(int code, String error) {
}
});
}
public static void login(String username, String password) {
BiliLoginNetApiManager.getInstance().login(new HttpCallback<LoginCookie>() {
@Override
public void onResponse(Headers headers, int code, String status, LoginCookie response, String rawResponse) {
System.out.println("headers = " + headers + ", code = " + code + ", status = " + status + ", response = " + response + ", rawResponse = " + rawResponse);
if (code == BiliLoginNetApiManager.LOGIN_SUCCESS) {
BiliBiliLoginDatabase.getInstance().initData(response).close();
}
}
@Override
public void onFailure(Throwable throwable) {
}
});
}
public static void getUserInfo() {
BiliUserNetApiManager.getInstance().getUserApi(new IHttpApiCheckCallback<UserApi>() {
@Override
public void onSuccess(UserApi api) {
api.getUserInfo().enqueue(new HttpCallback<UserInfoBean>() {
@Override
public void onResponse(Headers headers, int code, String status, UserInfoBean response, String rawResponse) {
System.out.println("response = " + rawResponse);
System.out.println(response);
}
@Override
public void onFailure(Throwable throwable) {
}
});
}
@Override
public void onError(int code, String error) {
System.out.println("code = " + code + ", error = " + error);
}
});
}
}