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:
@@ -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
@@ -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})';
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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].
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user