Merge branch 'develop_liyi' of http://code.star-lock.cn/StarlockTeam/app-starlock into develop_liyi
This commit is contained in:
commit
fe00a366c7
@ -250,6 +250,7 @@ class _StarLockLoginPageState extends State<StarLockLoginPage> {
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
SizedBox(height: 50.w),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
|
||||
@ -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';
|
||||
|
||||
@ -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';
|
||||
|
||||
@ -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';
|
||||
|
||||
@ -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 传递给解码器,或将视频帧渲染到屏幕上
|
||||
}
|
||||
}
|
||||
|
||||
@ -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');
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user