76 lines
2.3 KiB
Dart
76 lines
2.3 KiB
Dart
import 'dart:math';
|
|
|
|
import 'package:flutter/services.dart';
|
|
import 'package:star_lock/app_settings/app_settings.dart';
|
|
import 'package:star_lock/talk/starChart/proto/talk_data.pb.dart';
|
|
import 'package:star_lock/talk/starChart/star_chart_manage.dart';
|
|
import 'package:star_lock/talk/starChart/webView/h264_web_view_state.dart';
|
|
import 'package:star_lock/tools/baseGetXController.dart';
|
|
import 'package:webview_flutter/webview_flutter.dart';
|
|
|
|
class H264WebViewLogic extends BaseGetXController {
|
|
final H264WebViewState state = H264WebViewState();
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
// 初始化 WebView 控制器
|
|
state.webViewController = WebViewController()
|
|
..setJavaScriptMode(JavaScriptMode.unrestricted)
|
|
..enableZoom(false)
|
|
..addJavaScriptChannel(
|
|
'Flutter',
|
|
onMessageReceived: (message) {
|
|
print("来自 HTML 的消息: ${message.message}");
|
|
},
|
|
);
|
|
|
|
// 加载本地 HTML
|
|
_loadLocalHtml();
|
|
// 创建流数据监听
|
|
_createFramesStreamListen();
|
|
}
|
|
|
|
void _createFramesStreamListen() async {
|
|
state.talkDataRepository.talkDataStream.listen((TalkData event) async {
|
|
// 发送数据给js处理
|
|
_sendBufferedData(event.content);
|
|
});
|
|
}
|
|
|
|
/// 加载html文件
|
|
Future<void> _loadLocalHtml() async {
|
|
// 加载 HTML 文件内容
|
|
final String fileHtmlContent =
|
|
await rootBundle.loadString('assets/html/h264.html');
|
|
|
|
// 加载 JS 文件内容
|
|
final String jsContent =
|
|
await rootBundle.loadString('assets/html/jmuxer.min.js');
|
|
|
|
// 将 JS 文件内容嵌入到 HTML 中
|
|
final String htmlWithJs = fileHtmlContent.replaceAll(
|
|
'<script src="jmuxer.min.js"></script>', // 替换掉引用外部 JS 的标签
|
|
'<script>$jsContent</script>' // 使用内联方式嵌入 JS 内容
|
|
);
|
|
|
|
// 加载最终的 HTML 字符串到 WebView 中
|
|
if (state.webViewController != null) {
|
|
state.webViewController.loadHtmlString(htmlWithJs); // 设置 baseUrl 避免资源加载问题
|
|
}
|
|
}
|
|
|
|
// 修改后的发送方法
|
|
_sendBufferedData(List<int> buffer) async {
|
|
// 原始发送逻辑
|
|
String jsCode = "feedDataFromFlutter($buffer);";
|
|
await state.webViewController.runJavaScript(jsCode);
|
|
}
|
|
|
|
@override
|
|
void onClose() {
|
|
super.onClose();
|
|
StartChartManage().startTalkHangupMessageTimer();
|
|
}
|
|
}
|