我将服务器安装在C#(Windows窗体)中,从中记录系统声音并通过websocket将声音作为字节数组段发送。我创建了一个客户端,用来播放从websocket服务器接收的数据, 当我打印从服务器接收的数据时,它会给我类似的东西
[44、208、240、11、78、112、62、234、159、35、145、128、240、99、91, 123、252、181、56、44、222、214、137、206、45、55、59、114、199、206, 47、230、77、154、200、12、218、187、187、100、219、225、6、82、123, 75、133、251、105、44、243、232、69、24、31、95、39、136、43、152, 121、233、56、22、197、141、44、213、47、182、77、59、171、201、37, 101、125、203、126、113、131、175、194、244、7、158、154、138、25, 223、217、123、112、225、133、139、59、230、31、227、110、92、4、187, 187、99、222、217、173、153、185、54、145、63、128、102、34、148、64, 242、188、131、4、127、49、217、38、41、58、39、53、209、46、216、160, 164、142、102、226、151、223、133、150、201、66、131、133、89、216, 69、174、181、117、114、23、188、73、1、180、156、179、254、119、219, 231、142、139、40、214、75、187、97、126、85、2、86、178、7、33、112, 4,121,242,39,185,155,27,173,24,185,226,167,141,105,58, 104、202、47]
当我打印数据的运行时类型时,结果是
_uint8arrayView
我在网上冲浪时没有发现任何与扑朔迷离的箱子相似的东西,所以我不知道该怎么办。我想使用soundpool package或AssetAudioPlayer package播放它。任何想法将不胜感激。提前谢谢!。
这是我到目前为止所做的主要逻辑
Future client() async {
Random r = new Random();
String key = base64.encode(List<int>.generate(8, (_) => r.nextInt(255)));
HttpClient client = HttpClient(/* optional security context here */);
Uri uri = new Uri(
scheme: "http",
host: _controller.text.trim(),
port: int.parse("5970", radix: 10),
path: "");
HttpClientRequest request = await client.getUrl(uri);
// HttpClientRequest request = await client.get(
// 'ws://${_controller.text.trim()}',
// int.parse("5970", radix: 10),
// 'chat'); // form the correct url here
request.headers.add('Connection', 'upgrade');
request.headers.add('Upgrade', 'websocket');
request.headers
.add('sec-websocket-version', '13'); // insert the correct version here
request.headers.add('sec-websocket-key', key);
HttpClientResponse response = await request.close();
// todo check the status code, key etc
Socket socket = await response.detachSocket();
WebSocket ws = WebSocket.fromUpgradedSocket(
socket,
serverSide: false,
);
ws.listen(
(event) {
connected = true;
var bytes = File.fromRawPath(event);
var s = openBytesStream(event);
//streamController.addStream(event);
//stream(s);
print(event.runtimeType);
//soudpool();
},
onError: (error) {
connected = false;
},
onDone: () {
connected = false;
},
cancelOnError: false,
);
}
final assetsAudioPlayer = AssetsAudioPlayer();
Future stream(String url) async {
try {
await assetsAudioPlayer.open(
Audio.liveStream(url),
showNotification: true,
autoStart: true,
);
} catch (t) {
//stream unreachable
print(t);
}
}
Future<void> soudpool(Uint8List soundData) async {
Soundpool pool = Soundpool(streamType: StreamType.notification);
int soundId = await pool.loadAndPlayUint8List(soundData);
int streamId = await pool.play(soundId);
}