Stabilizza live YouTube/RTMP e fix crash rotazione mobile.
Pipeline YouTube con relay, overlay e publisher sync lato backend; fix GL pauseGlDuringRotation su Android per evitare crash in rotazione durante lo streaming Flutter. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -19,32 +19,53 @@ class StreamingChannel {
|
||||
return ok ?? false;
|
||||
}
|
||||
|
||||
/// Dopo rotazione: riallinea preview/stream senza fermare RTMP.
|
||||
static Future<void> syncOrientation() async {
|
||||
await _channel.invokeMethod<void>('syncOrientation');
|
||||
}
|
||||
|
||||
static Future<void> stopPreview() async {
|
||||
await _channel.invokeMethod('stopPreview');
|
||||
}
|
||||
|
||||
static Future<void> startStream({
|
||||
required String rtmpUrl,
|
||||
int targetBitrate = 2500000,
|
||||
int targetBitrate = 3000000,
|
||||
int targetFps = 30,
|
||||
int width = 1280,
|
||||
int height = 720,
|
||||
bool portrait = false,
|
||||
int rotation = 0,
|
||||
}) async {
|
||||
await _channel.invokeMethod('startStream', {
|
||||
'rtmpUrl': rtmpUrl,
|
||||
'videoBitrate': targetBitrate,
|
||||
'fps': targetFps,
|
||||
'width': width,
|
||||
'height': height,
|
||||
'portrait': portrait,
|
||||
'rotation': rotation,
|
||||
});
|
||||
}
|
||||
|
||||
/// Ripresa dopo pausa: resetta stati RTMP residui (CONNECTING/RECONNECTING).
|
||||
static Future<void> resumeStream({
|
||||
required String rtmpUrl,
|
||||
int targetBitrate = 2500000,
|
||||
int targetBitrate = 3000000,
|
||||
int targetFps = 30,
|
||||
int width = 1280,
|
||||
int height = 720,
|
||||
bool portrait = false,
|
||||
int rotation = 0,
|
||||
}) async {
|
||||
await _channel.invokeMethod('resumeStream', {
|
||||
'rtmpUrl': rtmpUrl,
|
||||
'videoBitrate': targetBitrate,
|
||||
'fps': targetFps,
|
||||
'width': width,
|
||||
'height': height,
|
||||
'portrait': portrait,
|
||||
'rotation': rotation,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
/// Preview camera nativa (OpenGL) o placeholder su altre piattaforme.
|
||||
/// Preview camera nativa (OpenGL) integrata nel layout Flutter.
|
||||
class NativeStreamingPreview extends StatelessWidget {
|
||||
const NativeStreamingPreview({
|
||||
super.key,
|
||||
@@ -23,7 +23,7 @@ class NativeStreamingPreview extends StatelessWidget {
|
||||
key: key,
|
||||
viewType: 'match_live_tv/streaming_preview',
|
||||
layoutDirection: TextDirection.ltr,
|
||||
creationParamsCodec: StandardMessageCodec(),
|
||||
creationParamsCodec: const StandardMessageCodec(),
|
||||
),
|
||||
if (showGrid) CameraPreviewOverlay(platformLabel: platformLabel),
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user