Video optimizations (#18)

* use events for `VideoTrackRenderer`

* logger

* implemented visibility detection

* optimize code with 1 param debounce func

* stop pending visibility event when disposed

* clean up

* mark internal

* report to track

* call dispose on pub and track

* use internal events to receive visibility events

* clean up visibility for disposed track

* listen to track visibility events on pub

* re-design

* quickly re-enable

* clean up

* clean up
This commit is contained in:
Hiroshi Horie
2021-10-25 18:34:02 +09:00
committed by GitHub
parent bf1322642b
commit 16910cae25
18 changed files with 314 additions and 95 deletions
+12 -8
View File
@@ -27,6 +27,7 @@ class _ParticipantWidgetState extends State<ParticipantWidget> {
//
TrackPublication? firstVideoPub;
TrackPublication? firstAudioPub;
bool _visible = true;
@override
void initState() {
@@ -79,14 +80,17 @@ class _ParticipantWidgetState extends State<ParticipantWidget> {
child: Stack(
children: [
// Video
if (firstVideoPub?.subscribed == true &&
firstVideoPub?.muted == false)
VideoTrackRenderer(
firstVideoPub!.track as VideoTrack,
fit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover,
)
else
const NoVideoWidget(),
InkWell(
onTap: () => setState(() => _visible = !_visible),
child: (firstVideoPub?.subscribed == true &&
firstVideoPub?.muted == false &&
_visible)
? VideoTrackRenderer(
firstVideoPub!.track as VideoTrack,
fit: RTCVideoViewObjectFit.RTCVideoViewObjectFitCover,
)
: const NoVideoWidget(),
),
Align(
alignment: Alignment.bottomCenter,
+7
View File
@@ -406,6 +406,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
visibility_detector:
dependency: transitive
description:
name: visibility_detector
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.2"
win32:
dependency: transitive
description:
+3
View File
@@ -21,6 +21,9 @@ dependencies:
livekit_client:
path: ../
# git:
# url: https://github.com/livekit/client-sdk-flutter
# ref: main
dev_dependencies:
flutter_test: