fix: add name to AudioPublishOptions. (#302)

* fix: add name to AudioPublishOptions.

* remove name for Track.

* remove name for Track.

* update.

* fix flutter analyzer.

* update.

* add Deprecated declaration for Track.name.

* update.
This commit is contained in:
CloudWebRTC
2023-06-14 15:31:21 +08:00
committed by GitHub
parent 4a6694cc3b
commit 193f89806f
13 changed files with 44 additions and 51 deletions
+2
View File
@@ -145,6 +145,8 @@ class _ConnectPageState extends State<ConnectPage> {
roomOptions: RoomOptions( roomOptions: RoomOptions(
adaptiveStream: _adaptiveStream, adaptiveStream: _adaptiveStream,
dynacast: _dynacast, dynacast: _dynacast,
defaultAudioPublishOptions:
const AudioPublishOptions(name: 'custom_audio_track_name'),
defaultVideoPublishOptions: VideoPublishOptions( defaultVideoPublishOptions: VideoPublishOptions(
simulcast: _simulcast, simulcast: _simulcast,
), ),
+17 -5
View File
@@ -139,6 +139,9 @@ class RoomOptions {
/// Options used when publishing video. /// Options used when publishing video.
class VideoPublishOptions { class VideoPublishOptions {
static const defaultCameraName = 'camera';
static const defaultScreenShareName = 'screenshare';
/// The video codec to use. /// The video codec to use.
final String videoCodec; final String videoCodec;
@@ -152,6 +155,9 @@ class VideoPublishOptions {
/// Defaults to true. /// Defaults to true.
final bool simulcast; final bool simulcast;
/// Name of the video track.
final String? name;
final List<VideoParameters> videoSimulcastLayers; final List<VideoParameters> videoSimulcastLayers;
final List<VideoParameters> screenShareSimulcastLayers; final List<VideoParameters> screenShareSimulcastLayers;
@@ -162,6 +168,7 @@ class VideoPublishOptions {
this.simulcast = true, this.simulcast = true,
this.videoSimulcastLayers = const [], this.videoSimulcastLayers = const [],
this.screenShareSimulcastLayers = const [], this.screenShareSimulcastLayers = const [],
this.name,
}); });
VideoPublishOptions copyWith({ VideoPublishOptions copyWith({
@@ -194,6 +201,8 @@ class AudioPreset {
/// Options used when publishing audio. /// Options used when publishing audio.
class AudioPublishOptions { class AudioPublishOptions {
static const defaultMicrophoneName = 'microphone';
/// Whether to enable DTX (Discontinuous Transmission) or not. /// Whether to enable DTX (Discontinuous Transmission) or not.
/// https://en.wikipedia.org/wiki/Discontinuous_transmission /// https://en.wikipedia.org/wiki/Discontinuous_transmission
/// Defaults to true. /// Defaults to true.
@@ -207,11 +216,14 @@ class AudioPublishOptions {
@Deprecated('Mic indicator will always turn off now when muted.') @Deprecated('Mic indicator will always turn off now when muted.')
final bool stopMicTrackOnMute; final bool stopMicTrackOnMute;
const AudioPublishOptions({ /// Name of the audio track.
this.dtx = true, final String? name;
this.audioBitrate = AudioPreset.music,
this.stopMicTrackOnMute = true, const AudioPublishOptions(
}); {this.dtx = true,
this.audioBitrate = AudioPreset.music,
this.stopMicTrackOnMute = true,
this.name});
@override @override
String toString() => '${runtimeType}(dtx: ${dtx})'; String toString() => '${runtimeType}(dtx: ${dtx})';
+5 -2
View File
@@ -57,7 +57,7 @@ class LocalParticipant extends Participant<LocalTrackPublication> {
final trackInfo = await room.engine.addTrack( final trackInfo = await room.engine.addTrack(
cid: track.getCid(), cid: track.getCid(),
name: track.name, name: publishOptions.name ?? AudioPublishOptions.defaultMicrophoneName,
kind: track.kind, kind: track.kind,
source: track.source.toPBType(), source: track.source.toPBType(),
dtx: publishOptions.dtx, dtx: publishOptions.dtx,
@@ -159,7 +159,10 @@ class LocalParticipant extends Participant<LocalTrackPublication> {
final trackInfo = await room.engine.addTrack( final trackInfo = await room.engine.addTrack(
cid: track.getCid(), cid: track.getCid(),
name: track.name, name: publishOptions.name ??
(track.source == TrackSource.screenShareVideo
? VideoPublishOptions.defaultScreenShareName
: VideoPublishOptions.defaultCameraName),
kind: track.kind, kind: track.kind,
source: track.source.toPBType(), source: track.source.toPBType(),
dimensions: dimensions, dimensions: dimensions,
+3 -7
View File
@@ -10,7 +10,6 @@ import '../managers/event.dart';
import '../proto/livekit_models.pb.dart' as lk_models; import '../proto/livekit_models.pb.dart' as lk_models;
import '../publication/track_publication.dart'; import '../publication/track_publication.dart';
import '../support/disposable.dart'; import '../support/disposable.dart';
import '../track/track.dart';
import '../types/other.dart'; import '../types/other.dart';
import '../types/participant_permissions.dart'; import '../types/participant_permissions.dart';
@@ -248,14 +247,11 @@ abstract class Participant<T extends TrackPublication>
(source == TrackSource.microphone && (source == TrackSource.microphone &&
e.kind == lk_models.TrackType.AUDIO) || e.kind == lk_models.TrackType.AUDIO) ||
(source == TrackSource.camera && (source == TrackSource.camera &&
e.kind == lk_models.TrackType.VIDEO && e.kind == lk_models.TrackType.VIDEO) ||
e.name != Track.screenShareName) ||
(source == TrackSource.screenShareVideo && (source == TrackSource.screenShareVideo &&
e.kind == lk_models.TrackType.VIDEO && e.kind == lk_models.TrackType.VIDEO) ||
e.name == Track.screenShareName) ||
(source == TrackSource.screenShareAudio && (source == TrackSource.screenShareAudio &&
e.kind == lk_models.TrackType.AUDIO && e.kind == lk_models.TrackType.AUDIO));
e.name == Track.screenShareName));
} }
/// (Equality operator) [Participant.hashCode] is same as [sid.hashCode]. /// (Equality operator) [Participant.hashCode] is same as [sid.hashCode].
+4 -4
View File
@@ -116,12 +116,12 @@ class RemoteParticipant extends Participant<RemoteTrackPublication> {
final RemoteTrack track; final RemoteTrack track;
if (pub.kind == lk_models.TrackType.VIDEO) { if (pub.kind == lk_models.TrackType.VIDEO) {
// video track // video track
track = RemoteVideoTrack(pub.name, pub.source, stream, mediaTrack, track =
receiver: receiver); RemoteVideoTrack(pub.source, stream, mediaTrack, receiver: receiver);
} else if (pub.kind == lk_models.TrackType.AUDIO) { } else if (pub.kind == lk_models.TrackType.AUDIO) {
// audio track // audio track
track = RemoteAudioTrack(pub.name, pub.source, stream, mediaTrack, track =
receiver: receiver); RemoteAudioTrack(pub.source, stream, mediaTrack, receiver: receiver);
var listener = track.createListener(); var listener = track.createListener();
listener.on<AudioPlaybackStarted>((event) { listener.on<AudioPlaybackStarted>((event) {
+3 -2
View File
@@ -62,9 +62,10 @@ abstract class TrackPublication<T extends Track> extends Disposable {
updateFromInfo(info); updateFromInfo(info);
} }
/// True when the track is published with name [Track.screenShareName]. /// True when the track is published with source [TrackSource.screenShareVideo].
bool get isScreenShare => bool get isScreenShare =>
kind == lk_models.TrackType.VIDEO && name == Track.screenShareName; kind == lk_models.TrackType.VIDEO &&
source == TrackSource.screenShareVideo;
void updateFromInfo(lk_models.TrackInfo info) { void updateFromInfo(lk_models.TrackInfo info) {
_simulcasted = info.simulcast; _simulcasted = info.simulcast;
-3
View File
@@ -83,13 +83,11 @@ class LocalAudioTrack extends LocalTrack
// private constructor // private constructor
@internal @internal
LocalAudioTrack( LocalAudioTrack(
String name,
TrackSource source, TrackSource source,
rtc.MediaStream stream, rtc.MediaStream stream,
rtc.MediaStreamTrack track, rtc.MediaStreamTrack track,
this.currentOptions, this.currentOptions,
) : super( ) : super(
name,
lk_models.TrackType.AUDIO, lk_models.TrackType.AUDIO,
source, source,
stream, stream,
@@ -104,7 +102,6 @@ class LocalAudioTrack extends LocalTrack
final stream = await LocalTrack.createStream(options); final stream = await LocalTrack.createStream(options);
return LocalAudioTrack( return LocalAudioTrack(
'',
TrackSource.microphone, TrackSource.microphone,
stream, stream,
stream.getAudioTracks().first, stream.getAudioTracks().first,
-2
View File
@@ -57,13 +57,11 @@ abstract class LocalTrack extends Track {
String? codec; String? codec;
LocalTrack( LocalTrack(
String name,
lk_models.TrackType kind, lk_models.TrackType kind,
TrackSource source, TrackSource source,
rtc.MediaStream mediaStream, rtc.MediaStream mediaStream,
rtc.MediaStreamTrack mediaStreamTrack, rtc.MediaStreamTrack mediaStreamTrack,
) : super( ) : super(
name,
kind, kind,
source, source,
mediaStream, mediaStream,
+2 -12
View File
@@ -7,7 +7,6 @@ import '../../proto/livekit_models.pb.dart' as lk_models;
import '../../types/other.dart'; import '../../types/other.dart';
import '../options.dart'; import '../options.dart';
import '../stats.dart'; import '../stats.dart';
import '../track.dart';
import 'audio.dart'; import 'audio.dart';
import 'local.dart'; import 'local.dart';
@@ -113,13 +112,11 @@ class LocalVideoTrack extends LocalTrack with VideoTrack {
// Private constructor // Private constructor
LocalVideoTrack._( LocalVideoTrack._(
String name,
TrackSource source, TrackSource source,
rtc.MediaStream stream, rtc.MediaStream stream,
rtc.MediaStreamTrack track, rtc.MediaStreamTrack track,
this.currentOptions, this.currentOptions,
) : super( ) : super(
name,
lk_models.TrackType.VIDEO, lk_models.TrackType.VIDEO,
source, source,
stream, stream,
@@ -134,7 +131,6 @@ class LocalVideoTrack extends LocalTrack with VideoTrack {
final stream = await LocalTrack.createStream(options); final stream = await LocalTrack.createStream(options);
return LocalVideoTrack._( return LocalVideoTrack._(
Track.cameraName,
TrackSource.camera, TrackSource.camera,
stream, stream,
stream.getVideoTracks().first, stream.getVideoTracks().first,
@@ -153,7 +149,6 @@ class LocalVideoTrack extends LocalTrack with VideoTrack {
final stream = await LocalTrack.createStream(options); final stream = await LocalTrack.createStream(options);
return LocalVideoTrack._( return LocalVideoTrack._(
Track.screenShareName,
TrackSource.screenShareVideo, TrackSource.screenShareVideo,
stream, stream,
stream.getVideoTracks().first, stream.getVideoTracks().first,
@@ -175,7 +170,6 @@ class LocalVideoTrack extends LocalTrack with VideoTrack {
List<LocalTrack> tracks = [ List<LocalTrack> tracks = [
LocalVideoTrack._( LocalVideoTrack._(
Track.screenShareName,
TrackSource.screenShareVideo, TrackSource.screenShareVideo,
stream, stream,
stream.getVideoTracks().first, stream.getVideoTracks().first,
@@ -184,12 +178,8 @@ class LocalVideoTrack extends LocalTrack with VideoTrack {
]; ];
if (stream.getAudioTracks().isNotEmpty) { if (stream.getAudioTracks().isNotEmpty) {
tracks.add(LocalAudioTrack( tracks.add(LocalAudioTrack(TrackSource.screenShareAudio, stream,
Track.screenShareName, stream.getAudioTracks().first, const AudioCaptureOptions()));
TrackSource.screenShareAudio,
stream,
stream.getAudioTracks().first,
const AudioCaptureOptions()));
} }
return tracks; return tracks;
} }
+2 -3
View File
@@ -16,11 +16,10 @@ import '../web/_audio_api.dart' if (dart.library.html) '../web/_audio_html.dart'
class RemoteAudioTrack extends RemoteTrack class RemoteAudioTrack extends RemoteTrack
with AudioTrack, RemoteAudioManagementMixin { with AudioTrack, RemoteAudioManagementMixin {
String? _deviceId; String? _deviceId;
RemoteAudioTrack(String name, TrackSource source, rtc.MediaStream stream, RemoteAudioTrack(
rtc.MediaStreamTrack track, TrackSource source, rtc.MediaStream stream, rtc.MediaStreamTrack track,
{rtc.RTCRtpReceiver? receiver}) {rtc.RTCRtpReceiver? receiver})
: super( : super(
name,
lk_models.TrackType.AUDIO, lk_models.TrackType.AUDIO,
source, source,
stream, stream,
+1 -2
View File
@@ -9,11 +9,10 @@ import '../stats.dart';
import '../track.dart'; import '../track.dart';
abstract class RemoteTrack extends Track { abstract class RemoteTrack extends Track {
RemoteTrack(String name, lk_models.TrackType kind, TrackSource source, RemoteTrack(lk_models.TrackType kind, TrackSource source,
rtc.MediaStream stream, rtc.MediaStreamTrack track, rtc.MediaStream stream, rtc.MediaStreamTrack track,
{rtc.RTCRtpReceiver? receiver}) {rtc.RTCRtpReceiver? receiver})
: super( : super(
name,
kind, kind,
source, source,
stream, stream,
+2 -3
View File
@@ -10,11 +10,10 @@ import '../stats.dart';
import 'remote.dart'; import 'remote.dart';
class RemoteVideoTrack extends RemoteTrack with VideoTrack { class RemoteVideoTrack extends RemoteTrack with VideoTrack {
RemoteVideoTrack(String name, TrackSource source, rtc.MediaStream stream, RemoteVideoTrack(
rtc.MediaStreamTrack track, TrackSource source, rtc.MediaStream stream, rtc.MediaStreamTrack track,
{rtc.RTCRtpReceiver? receiver}) {rtc.RTCRtpReceiver? receiver})
: super( : super(
name,
lk_models.TrackType.VIDEO, lk_models.TrackType.VIDEO,
source, source,
stream, stream,
+3 -6
View File
@@ -17,10 +17,8 @@ import '../types/other.dart';
abstract class Track extends DisposableChangeNotifier abstract class Track extends DisposableChangeNotifier
with EventsEmittable<TrackEvent> { with EventsEmittable<TrackEvent> {
static const uuid = Uuid(); static const uuid = Uuid();
static const cameraName = 'camera'; @Deprecated('Use TrackPublication.name instead')
static const screenShareName = 'screenshare'; final String name = 'Deprecated, please use TrackPublication.name instead';
final String name;
final lk_models.TrackType kind; final lk_models.TrackType kind;
final TrackSource source; final TrackSource source;
@@ -47,8 +45,7 @@ abstract class Track extends DisposableChangeNotifier
rtc.RTCRtpReceiver? receiver; rtc.RTCRtpReceiver? receiver;
Track(this.name, this.kind, this.source, this._mediaStream, Track(this.kind, this.source, this._mediaStream, this._mediaStreamTrack,
this._mediaStreamTrack,
{this.receiver}) { {this.receiver}) {
// Any event emitted will trigger ChangeNotifier // Any event emitted will trigger ChangeNotifier
events.listen((event) { events.listen((event) {