Skip to content

Commit

Permalink
测试虎牙Tup协议
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaoyaocz committed Dec 2, 2024
1 parent 4eb1846 commit 00314b3
Show file tree
Hide file tree
Showing 33 changed files with 2,886 additions and 126 deletions.
Binary file added simple_live_core/demo/getCdnTokenInfoReq.bin
Binary file not shown.
Binary file added simple_live_core/demo/getCdnTokenInfoResp.bin
Binary file not shown.
129 changes: 93 additions & 36 deletions simple_live_core/example/simple_live_core_example.dart
Original file line number Diff line number Diff line change
@@ -1,39 +1,96 @@
import 'package:simple_live_core/simple_live_core.dart';
import 'dart:io';

import 'package:dio/dio.dart';
import 'package:simple_live_core/src/model/tars/get_cdn_token_req.dart';
import 'package:simple_live_core/src/model/tars/get_cdn_token_resp.dart';
import 'package:tars_dart/tars/net/base_tars_http.dart';
import 'package:tars_dart/tars/tup/uni_packet.dart';

void main() async {
CoreLog.enableLog = true;
CoreLog.requestLogType = RequestLogType.short;
LiveSite site = BiliBiliSite();
var danmaku = site.getDanmaku();
danmaku.onMessage = (event) {
if (event.type == LiveMessageType.chat) {
print("[${event.color}]${event.userName}:${event.message}");
} else if (event.type == LiveMessageType.online) {
print("-----人气:${event.data}-----");
} else if (event.type == LiveMessageType.superChat) {
var scMessage = event.data as LiveSuperChatMessage;
print("[SC]${scMessage.userName}:${scMessage.message}");
}
};
danmaku.onClose = (event) {
print(event);
};

//var search = await site.searchRooms("东方");

//var categores = await site.getCategores();
//print(categores.length);
var detail = await site.getRoomDetail(roomId: '7734200');
// var playQualites = await site.getPlayQualites(detail: detail);
// print(playQualites);
// var playUrls =
// await site.getPlayUrls(detail: detail, quality: playQualites.first);
// for (var element in playUrls) {
// print(element);
// }
//print(detail);

danmaku.start(detail.danmakuData);

await Future.wait({});
// CoreLog.enableLog = true;
// CoreLog.requestLogType = RequestLogType.short;
// LiveSite site = BiliBiliSite();
// var danmaku = site.getDanmaku();
// danmaku.onMessage = (event) {
// if (event.type == LiveMessageType.chat) {
// print("[${event.color}]${event.userName}:${event.message}");
// } else if (event.type == LiveMessageType.online) {
// print("-----人气:${event.data}-----");
// } else if (event.type == LiveMessageType.superChat) {
// var scMessage = event.data as LiveSuperChatMessage;
// print("[SC]${scMessage.userName}:${scMessage.message}");
// }
// };
// danmaku.onClose = (event) {
// print(event);
// };

// //var search = await site.searchRooms("东方");

// //var categores = await site.getCategores();
// //print(categores.length);
// var detail = await site.getRoomDetail(roomId: '7734200');
// // var playQualites = await site.getPlayQualites(detail: detail);
// // print(playQualites);
// // var playUrls =
// // await site.getPlayUrls(detail: detail, quality: playQualites.first);
// // for (var element in playUrls) {
// // print(element);
// // }
// //print(detail);

// danmaku.start(detail.danmakuData);

// await Future.wait({});
sendReq();
}

void testHuyaReq() async {
var reqBytes = await File('demo/getCdnTokenInfoReq.bin').readAsBytes();
// RequestPacket req = RequestPacket();
// req.readFrom(TarsInputStream(reqBytes));
// print(req.iVersion);

UniPacket uniPacket = UniPacket();
//uniPacket.readFrom(TarsInputStream(reqBytes));
uniPacket.decode(reqBytes);
var value = uniPacket.get<GetCdnTokenReq>('tReq', GetCdnTokenReq());
// GetCdnTokenReq reqData = GetCdnTokenReq();
// reqData.readFrom(TarsInputStream(req.sBuffer));
print(value.toString());
}

void sendReq() async {
var req = GetCdnTokenReq();
req.cdnType = "HW";
req.streamName =
"1199637826638-1199637826638-5763635889762729984-2399275776732-10057-A-0-1";

BaseTarsHttp http = BaseTarsHttp("http://wup.huya.com", "liveui");

var data = await http.tupRequest("getCdnTokenInfo", req, GetCdnTokenResp());

var url =
'http://hw.flv.huya.com/src/${data.streamName}.flv?${data.flvAntiCode}&codec=264';
print(url);
await Dio().download(
url,
'live-stream.flv',
options: Options(
responseType: ResponseType.bytes,
headers: {"user-agent": "HYSDK(Windows, 20000308)"},
),
onReceiveProgress: (count, total) {
var downBytes = count / 1024 / 1024;
print('downloading: $downBytes MB');
},
);
}

void testHuyaResp() async {
var respBytes = await File('demo/getCdnTokenInfoResp.bin').readAsBytes();
UniPacket uniPacket = UniPacket();
uniPacket.decode(respBytes);
var value = uniPacket.get<GetCdnTokenResp>('tRsp', GetCdnTokenResp());
print(value.toString());
}
1 change: 0 additions & 1 deletion simple_live_core/lib/src/common/core_log.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ class CoreLog {
lineLength: 120,
colors: true,
printEmojis: true,
printTime: false,
),
);

Expand Down
90 changes: 3 additions & 87 deletions simple_live_core/lib/src/danmaku/huya_danmaku.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
// ignore_for_file: no_leading_underscores_for_local_identifiers

import 'dart:async';
import 'dart:convert';
import 'dart:typed_data';

import 'package:simple_live_core/simple_live_core.dart';
import 'package:simple_live_core/src/common/web_socket_util.dart';
import 'package:dart_tars_protocol/tars_input_stream.dart';
import 'package:dart_tars_protocol/tars_output_stream.dart';
import 'package:dart_tars_protocol/tars_struct.dart';
import 'package:simple_live_core/src/model/tars/huya_danmaku.dart';
import 'package:tars_dart/tars/codec/tars_input_stream.dart';
import 'package:tars_dart/tars/codec/tars_output_stream.dart';

class HuyaDanmakuArgs {
final int ayyuid;
Expand Down Expand Up @@ -160,85 +158,3 @@ class HuyaDanmaku implements LiveDanmaku {
}
}
}

class HYPushMessage extends TarsStruct {
int pushType = 0;
int uri = 0;
List<int> msg = <int>[];
int protocolType = 0;

@override
void readFrom(TarsInputStream _is) {
pushType = _is.read(pushType, 0, false);
uri = _is.read(uri, 1, false);
msg = _is.readBytes(2, false);
protocolType = _is.read(protocolType, 3, false);
}

@override
void display(StringBuffer sb, int level) {}

@override
void writeTo(TarsOutputStream _os) {}
}

class HYSender extends TarsStruct {
int uid = 0;
int lMid = 0;
String nickName = "";
int gender = 0;

@override
void readFrom(TarsInputStream _is) {
uid = _is.read(uid, 0, false);
lMid = _is.read(lMid, 0, false);
nickName = _is.read(nickName, 2, false);
gender = _is.read(gender, 3, false);
}

@override
void display(StringBuffer sb, int level) {}

@override
void writeTo(TarsOutputStream _os) {}
}

class HYMessage extends TarsStruct {
HYSender userInfo = HYSender();
String content = "";
HYBulletFormat bulletFormat = HYBulletFormat();

@override
void readFrom(TarsInputStream _is) {
userInfo = _is.readTarsStruct(userInfo, 0, false) as HYSender;
content = _is.read(content, 3, false);
bulletFormat = _is.readTarsStruct(bulletFormat, 6, false) as HYBulletFormat;
}

@override
void display(StringBuffer sb, int level) {}

@override
void writeTo(TarsOutputStream _os) {}
}

class HYBulletFormat extends TarsStruct {
int fontColor = 0;
int fontSize = 4;
int textSpeed = 0;
int transitionType = 1;

@override
void readFrom(TarsInputStream _is) {
fontColor = _is.read(fontColor, 0, false);
fontSize = _is.read(fontSize, 1, false);
textSpeed = _is.read(textSpeed, 2, false);
transitionType = _is.read(transitionType, 3, false);
}

@override
void display(StringBuffer sb, int level) {}

@override
void writeTo(TarsOutputStream _os) {}
}
50 changes: 50 additions & 0 deletions simple_live_core/lib/src/model/tars/get_cdn_token_req.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// ignore_for_file: no_leading_underscores_for_local_identifiers

import 'package:tars_dart/tars/codec/tars_displayer.dart';
import 'package:tars_dart/tars/codec/tars_input_stream.dart';
import 'package:tars_dart/tars/codec/tars_output_stream.dart';
import 'package:tars_dart/tars/codec/tars_struct.dart';

class GetCdnTokenReq extends TarsStruct {
String url = "";

String cdnType = "";

String streamName = "";

int presenterUid = 0;

@override
void readFrom(TarsInputStream _is) {
url = _is.read(url, 0, false);
cdnType = _is.read(cdnType, 1, false);
streamName = _is.read(streamName, 2, false);
presenterUid = _is.read(presenterUid, 3, false);
}

@override
void writeTo(TarsOutputStream _os) {
_os.write(url, 0);
_os.write(cdnType, 1);
_os.write(streamName, 2);
_os.write(presenterUid, 3);
}

@override
Object deepCopy() {
return GetCdnTokenReq()
..url = url
..cdnType = cdnType
..streamName = streamName
..presenterUid = presenterUid;
}

@override
void displayAsString(StringBuffer sb, int level) {
TarsDisplayer _ds = TarsDisplayer(sb, level: level);
_ds.DisplayString(url, "url");
_ds.DisplayString(cdnType, "cdnType");
_ds.DisplayString(streamName, "streamName");
_ds.DisplayInt(presenterUid, "presenterUid");
}
}
74 changes: 74 additions & 0 deletions simple_live_core/lib/src/model/tars/get_cdn_token_resp.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// ignore_for_file: no_leading_underscores_for_local_identifiers

import 'package:tars_dart/tars/codec/tars_displayer.dart';
import 'package:tars_dart/tars/codec/tars_input_stream.dart';
import 'package:tars_dart/tars/codec/tars_output_stream.dart';
import 'package:tars_dart/tars/codec/tars_struct.dart';

class GetCdnTokenResp extends TarsStruct {
String url = "";

String cdnType = "";

String streamName = "";

int presenterUid = 0;

String antiCode = "";

String sTime = "";

String flvAntiCode = "";

String hlsAntiCode = "";

@override
void readFrom(TarsInputStream _is) {
url = _is.read(url, 0, false);
cdnType = _is.read(cdnType, 1, false);
streamName = _is.read(streamName, 2, false);
presenterUid = _is.read(presenterUid, 3, false);
antiCode = _is.read(antiCode, 4, false);
sTime = _is.read(sTime, 5, false);
flvAntiCode = _is.read(flvAntiCode, 6, false);
hlsAntiCode = _is.read(hlsAntiCode, 7, false);
}

@override
void writeTo(TarsOutputStream _os) {
_os.write(url, 0);
_os.write(cdnType, 1);
_os.write(streamName, 2);
_os.write(presenterUid, 3);
_os.write(antiCode, 4);
_os.write(sTime, 5);
_os.write(flvAntiCode, 6);
_os.write(hlsAntiCode, 7);
}

@override
Object deepCopy() {
return GetCdnTokenResp()
..url = url
..cdnType = cdnType
..streamName = streamName
..presenterUid = presenterUid
..antiCode = antiCode
..sTime = sTime
..flvAntiCode = flvAntiCode
..hlsAntiCode = hlsAntiCode;
}

@override
void displayAsString(StringBuffer sb, int level) {
TarsDisplayer _ds = TarsDisplayer(sb, level: level);
_ds.DisplayString(url, "url");
_ds.DisplayString(cdnType, "cdnType");
_ds.DisplayString(streamName, "streamName");
_ds.DisplayInt(presenterUid, "presenterUid");
_ds.DisplayString(antiCode, "antiCode");
_ds.DisplayString(sTime, "sTime");
_ds.DisplayString(flvAntiCode, "flvAntiCode");
_ds.DisplayString(hlsAntiCode, "hlsAntiCode");
}
}
Loading

0 comments on commit 00314b3

Please sign in to comment.