Skip to content

Commit 6b707c4

Browse files
author
liuchuancong
committed
fix(*)
1 parent b3378bf commit 6b707c4

6 files changed

Lines changed: 19 additions & 22 deletions

File tree

lib/modules/live_play/live_play_controller.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ class LivePlayController extends StateController with GetSingleTickerProviderSta
325325
success.value = false;
326326
return;
327327
}
328+
log(playUrl.toString(), name: "play_url");
328329
playUrls.value = playUrl;
329330
setPlayer();
330331
}
@@ -361,6 +362,7 @@ class LivePlayController extends StateController with GetSingleTickerProviderSta
361362
GlobalPlayerState().setCurrentRoom(room.roomId!);
362363
videoController.value = VideoController(
363364
room: detail.value!,
365+
playUrs: playUrls.value,
364366
datasource: playUrls.value[currentLineIndex.value],
365367
allowScreenKeepOn: settings.enableScreenKeepOn.value,
366368
headers: headers,

lib/modules/live_play/widgets/video_player/video_controller.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import 'package:pure_live/pkg/canvas_danmaku/models/danmaku_content_item.dart';
2222
class VideoController with ChangeNotifier {
2323
final LiveRoom room;
2424
String datasource;
25+
List<String> playUrs;
2526
final bool allowScreenKeepOn;
2627
final bool allowFullScreen;
2728
final Map<String, String> headers;
@@ -91,6 +92,7 @@ class VideoController with ChangeNotifier {
9192
required this.room,
9293
required this.datasource,
9394
required this.headers,
95+
required this.playUrs,
9496
this.allowScreenKeepOn = false,
9597
this.allowFullScreen = true,
9698
BoxFit fitMode = BoxFit.contain,
@@ -142,7 +144,7 @@ class VideoController with ChangeNotifier {
142144
FlutterVolumeController.updateShowSystemUI(false);
143145
registerVolumeListener();
144146
}
145-
globalPlayer.setDataSource(datasource, headers, room);
147+
globalPlayer.setDataSource(datasource, playUrs, headers, room);
146148
globalPlayer.onError.listen((error) {
147149
if (error != null) {
148150
log("An error occured while loading the stream: $error", error: error, name: "VideoController");

lib/player/fijk_adapter.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class FijkPlayerAdapter implements UnifiedPlayer {
8787
}
8888

8989
@override
90-
Future<void> setDataSource(String url, Map<String, String> headers) async {
90+
Future<void> setDataSource(String url, List<String> playUrls, Map<String, String> headers) async {
9191
if (_disposed) return;
9292
final SettingsService settings = Get.find<SettingsService>();
9393
await _player.reset();

lib/player/media_kit_adapter.dart

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,13 @@ class MediaKitPlayerAdapter implements UnifiedPlayer {
5252
await pp.setProperty('force-seekable', 'yes');
5353
}
5454
if (_player.platform is NativePlayer) {
55-
if (_player.platform is NativePlayer) {
56-
final native = _player.platform as dynamic;
57-
58-
// 1. 设置协议白名单
59-
await native.setProperty('protocol_whitelist', 'httpproxy,udp,rtp,tcp,tls,data,file,http,https,crypto');
60-
61-
// 2. 合并设置 demuxer 参数 (用逗号分隔,不要分两次 set)
62-
// 这样同时开启了重连和 5 秒超时
63-
// Optimized reconnection parameters
64-
await native.setproperty(
65-
'demuxer-lavf-o',
66-
'reconnect=1,reconnect_at_eof=1,reconnect_streamed=1,reconnect_on_network_error=1,reconnect_on_http_error=4xx,5xx,timeout=5000000',
67-
);
68-
await native.setproperty('stream-lavf-o', 'reconnect_streamed=1,reconnect_delay_max=5');
69-
}
55+
await (_player.platform as dynamic).setProperty(
56+
'protocol_whitelist',
57+
'httpproxy,udp,rtp,tcp,tls,data,file,http,https,crypto',
58+
);
59+
await (_player.platform as NativePlayer).setProperty('network-timeout', '30'); // 给 mpv 30秒的总容忍时间
60+
await (_player.platform as NativePlayer).setProperty('demuxer-lavf-probsize', '1048576'); // 减半探测大小
61+
await (_player.platform as NativePlayer).setProperty('demuxer-lavf-analyzeduration', '3'); // 减少解析时间
7062
}
7163

7264
// Initialize controller based on settings
@@ -141,10 +133,11 @@ class MediaKitPlayerAdapter implements UnifiedPlayer {
141133
}
142134

143135
@override
144-
Future<void> setDataSource(String url, Map<String, String> headers) async {
136+
Future<void> setDataSource(String url, List<String> playUrls, Map<String, String> headers) async {
145137
if (_disposed) return;
146138
await _player.stop();
147-
await _player.open(Media(url, httpHeaders: headers));
139+
Playlist playlist = Playlist(playUrls.map((playUrl) => Media(playUrl, httpHeaders: headers)).toList());
140+
await _player.open(playlist);
148141
}
149142

150143
@override

lib/player/switchable_global_player.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class SwitchableGlobalPlayer {
9595
playerHasInit = true;
9696
}
9797

98-
Future<void> setDataSource(String url, Map<String, String> headers, LiveRoom room) async {
98+
Future<void> setDataSource(String url, List<String> playUrls, Map<String, String> headers, LiveRoom room) async {
9999
if (_currentPlayer != null || playerHasInit) {
100100
_currentPlayer!.stop();
101101
_cleanup();
@@ -120,7 +120,7 @@ class SwitchableGlobalPlayer {
120120
try {
121121
await _currentPlayer!.init();
122122
await Future.delayed(const Duration(milliseconds: 100));
123-
await _currentPlayer!.setDataSource(url, headers);
123+
await _currentPlayer!.setDataSource(url, playUrls, headers);
124124
if (PlatformUtils.isAndroid) {
125125
BackgroundService.startService(room.nick!, room.title!);
126126
}

lib/player/unified_player_interface.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ abstract class UnifiedPlayer {
66
Future<void> init();
77

88
// 设置播放源
9-
Future<void> setDataSource(String url, Map<String, String> headers);
9+
Future<void> setDataSource(String url, List<String> playUrls, Map<String, String> headers);
1010

1111
// 播放 / 暂停
1212
Future<void> play();

0 commit comments

Comments
 (0)