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.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.BaseBean; import com.yutou.okhttp.FileCallback; import com.yutou.okhttp.HttpCallback; import com.yutou.okhttp.HttpLoggingInterceptor; import jakarta.xml.bind.DatatypeConverter; import okhttp3.Headers; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; import java.util.HashMap; public class Main { public static void main(String[] args) { HttpLoggingInterceptor.setLog(false); HttpLoggingInterceptor.setLog(true); getPlayUrl(); //testSocket(); } public static void testSocket() { try { JSONObject json = new JSONObject(); json.put("roomid", "13246789"); json.put("protover", "3"); json.put("platform", "web"); json.put("type", 2); json.put("key", "aaaabbb"); 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() { @Override public void onSuccess(LiveApi api) { String roomId = "22689676"; 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() { @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() { @Override public void onSuccess(UserApi api) { api.getUserInfo().enqueue(new HttpCallback() { @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); } }); } }