Merge branch 'develop_liyi' of http://code.star-lock.cn/StarlockTeam/app-starlock into develop_liyi

This commit is contained in:
“DaisyWu” 2024-12-09 15:59:03 +08:00
commit fe00a366c7
7 changed files with 124 additions and 17 deletions

View File

@ -250,6 +250,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
);
},
),
SizedBox(height: 50.w),
Row(
mainAxisAlignment: MainAxisAlignment.center,

View File

@ -2,9 +2,6 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:crc/crc.dart';
import 'package:crclib/catalog.dart';
import 'package:crypto/crypto.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bugly/flutter_bugly.dart';

View File

@ -1,7 +1,6 @@
import 'dart:convert';
import 'dart:typed_data';
import 'package:crc32_checksum/crc32_checksum.dart';
import 'package:star_lock/talk/startChart/constant/message_type_constant.dart';
import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart';
import 'package:star_lock/talk/startChart/constant/protocol_flag_constant.dart';

View File

@ -1,7 +1,4 @@
import 'dart:convert';
import 'package:crc32_checksum/crc32_checksum.dart';
import 'package:crypto/crypto.dart';
import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/talk/startChart/constant/message_type_constant.dart';
import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart';

View File

@ -1,3 +1,5 @@
import 'dart:typed_data';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:star_lock/talk/startChart/entity/scp_message.dart';
@ -5,6 +7,8 @@ import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart';
import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart';
import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart';
import 'package:star_lock/talk/startChart/proto/generic.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart';
import 'package:star_lock/talk/startChart/proto/talk_data.pbserver.dart';
import '../../start_chart_manage.dart';
@ -21,8 +25,117 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle
@override
void handleRealTimeData(ScpMessage scpMessage) {
print('收到音视频数据回复:$scpMessage');
//
talkDataOverTimeTimerManager.receiveMessage();
print('收到音视频数据:$scpMessage');
if (scpMessage.Payload != null) {
final TalkData talkData = scpMessage.Payload;
//
_handleTalkData(talkData: talkData);
//
talkDataOverTimeTimerManager.receiveMessage();
}
}
void _handleTalkData({required TalkData talkData}) {
if (talkData == null) return;
final contentType = talkData.contentType;
switch (contentType) {
case TalkData_ContentTypeE.H264:
_handleVideoH264(talkData);
break;
case TalkData_ContentTypeE.Image:
_handleVideoImage(talkData);
break;
case TalkData_ContentTypeE.G711:
_handleVideoG711(talkData);
break;
default:
print('❌未知的TalkData--->contentType类型');
break;
}
}
void _handleVideoH264(TalkData talkData) {
final List<int> content = talkData.content;
// H.264 NALU
_parseH264Nalus(content);
}
void _handleVideoImage(TalkData talkData) {}
void _handleVideoG711(TalkData talkData) {}
// H.264 NALU
void _parseH264Nalus(List<int> h264Stream) {
print('开始解析 H.264 NALU...');
int index = 0;
while (index < h264Stream.length) {
// NALU
int nextStartCodeIndex = findNextStartCode(h264Stream, index);
if (nextStartCodeIndex == -1) {
//
break;
}
// NALU
Uint8List naluData =
Uint8List.fromList(h264Stream.sublist(index, nextStartCodeIndex));
// NALU
int naluType = naluData[0] & 0x1F; // NALU 5
print('找到 NALU类型: $naluType,长度: ${naluData.length}');
// NALU
handleNalu(naluType, naluData);
// NALU
index = nextStartCodeIndex;
}
}
// NALU
int findNextStartCode(List<int> data, int startIndex) {
for (int i = startIndex; i < data.length - 3; i++) {
// 3
if (data[i] == 0x00 && data[i + 1] == 0x00 && data[i + 2] == 0x01) {
return i;
}
// 4
if (i < data.length - 4 &&
data[i] == 0x00 &&
data[i + 1] == 0x00 &&
data[i + 2] == 0x00 &&
data[i + 3] == 0x01) {
return i;
}
}
// -1
return -1;
}
// NALU
void handleNalu(int naluType, Uint8List naluData) {
switch (naluType) {
case 5:
print('IDR 帧 (关键帧)');
break;
case 1:
print('非 IDR 帧 (P 帧)');
break;
case 7:
print('SPS (序列参数集)');
break;
case 8:
print('PPS (图像参数集)');
break;
default:
print('其他 NALU 类型: $naluType');
}
// NALU
// SPS PPS
}
}

View File

@ -653,9 +653,9 @@ class StartChartManage {
//
_handleUdpResultData(deserialize);
}
if (deserialize.PayloadType != PayloadTypeConstant.heartbeat) {
_log(text: 'Udp收到结构体数据---》$deserialize');
}
// if (deserialize.PayloadType != PayloadTypeConstant.heartbeat) {
// _log(text: 'Udp收到结构体数据---》$deserialize');
// }
}
} catch (e) {
_log(text: '❌ Udp result data error ----> $e');

View File

@ -211,7 +211,7 @@ dependencies:
jpush_flutter: ^2.5.1
#视频播放器
video_player: ^2.8.5
video_player: ^2.9.2
#控制横竖屏控件
auto_orientation: ^2.3.1
audioplayers: ^5.2.1
@ -247,13 +247,13 @@ dependencies:
flutter_bugly: ^1.0.2
open_filex: ^4.4.0
crc32_checksum: ^0.0.2
cryptography: ^2.7.0
asn1lib: ^1.0.0
fast_rsa: ^3.6.6
crc: ^0.0.2
crclib: ^3.0.0
protobuf: ^3.1.0
better_player: ^0.0.63
dependency_overrides: