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:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user