播放暂存

This commit is contained in:
Daisy 2023-12-27 13:59:11 +08:00
parent 1806c15c2f
commit 9848852f9f

View File

@ -1,8 +1,10 @@
import 'dart:typed_data';
import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';
import 'package:flutter_sound/flutter_sound.dart';
import 'package:star_lock/talk/call/g711.dart';
import 'package:star_lock/talk/call/iFrameInfo.dart';
import 'package:star_lock/talk/udp/udp_talkClass.dart';
import '../../tools/eventBusEventManage.dart';
class CallTalk {
@ -21,7 +23,8 @@ class CallTalk {
var growableList;
bool getFirstFrame = false; //
final FlutterSoundPlayer _audioPlayer = FlutterSoundPlayer();
List<int>? allPcmData = [];
List<int> allPcmData = [];
int _bufferSize = 400; //
CallTalk._init() {
iframe = IframeInfo();
@ -40,35 +43,16 @@ class CallTalk {
if (bb[61] == 1) {
Uint8List g711Data = bb.sublist(77, bb.length);
// // PCM
// Uint8List pcmData = G711Decoder().g711Decode(g711Data, G711Type.uLaw);
// // 使 pcmData
// print('得到的pcmData:$pcmData');
// allPcmData!.addAll(pcmData);
// await Future.delayed(const Duration(seconds: 3));
// _playRawData(allPcmData!);
print('dinglingling bb.length:${g711Data.length} 音频数据来:$g711Data ');
List<int> pcmBytes = Uint8List.fromList([]);
List<int> pcmBytes;
try {
// ALaw Linear
pcmBytes = G711().convertList(g711Data);
allPcmData.addAll(pcmBytes);
// await Future.delayed(const Duration(seconds: 1));
_initializeAudioPlayer(allPcmData);
} catch (e) {
print('Error decoding G.711 to PCM: $e');
}
allPcmData!.addAll(pcmBytes!);
await Future.delayed(const Duration(seconds: 1));
print('PCM decoded data: $pcmBytes');
if (pcmBytes != null) {
_initializeAudioPlayer();
_playRawData(Uint8List.fromList(allPcmData!));
} else {
print('Error decoding G.711 to PCM');
}
}
//
else {
@ -150,23 +134,60 @@ class CallTalk {
}
//
Future<void> _initializeAudioPlayer() async {
await _audioPlayer.openPlayer();
Future<void> _initializeAudioPlayer(List<int> audioData) async {
// _audioPlayer.closePlayer();
_audioPlayer.openPlayer();
// await _audioPlayer
// .setSubscriptionDuration(const Duration(milliseconds: 10));
if (audioData.isNotEmpty) {
//
print('转换pcmBytes数据长度为:${audioData.length}');
_playRawData(audioData);
// _playAudioStream(audioData);
} else {
print('Failed to read audio data.');
}
}
Future<void> _playRawData(List<int> rawData) async {
print(
'啊啦啦啦啦啦数据长度为:${G711().convertToInt8ListLittleEndian(rawData).length}, 数据为 ${G711().convertToInt8ListLittleEndian(rawData)}');
await _audioPlayer.startPlayer(
fromDataBuffer: Uint8List.fromList(rawData),
fromDataBuffer: G711().convertToInt8ListLittleEndian(rawData),
codec: Codec.pcm16,
numChannels: 1,
sampleRate: 8000,
whenFinished: () {
print('Finished playing');
},
numChannels: 1,
);
}
Future<void> stopLocalAudio() async {
Future<void> _playAudioStream(List<int> audioData) async {
await _audioPlayer.startPlayer(
codec: Codec.pcm16,
sampleRate: 8000,
numChannels: 1,
);
int totalLength = audioData.length;
int offset = 0;
while (offset < totalLength) {
int chunkSize = _bufferSize;
if (offset + chunkSize > totalLength) {
chunkSize = totalLength - offset;
}
List<int> chunk = audioData.sublist(offset, offset + chunkSize);
await _audioPlayer.feedFromStream(Uint8List.fromList(chunk));
offset += chunkSize;
}
await _audioPlayer.stopPlayer();
}
Future<void> stopAudioPlayer() async {
await _audioPlayer.stopPlayer();
}
}