### start Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-recorder Starts recording the media. On Android, use the audioChannel parameter; on iOS, use the audioTrack parameter. ```APIDOC ## start ### Description Starts recording the media. For Android use audioChannel param. For iOS use audioTrack. ### Signature `void start(String filePath, {MediaStreamTrack videoTrack, RecorderAudioChannel audioChannel})` ``` -------------------------------- ### startWeb Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-recorder Starts recording the media specifically for Flutter Web. ```APIDOC ## startWeb ### Description Starts recording the media in the web. Only for flutter web. ### Signature `void startWeb(MediaStream stream, Function(dynamic blob, bool isLastOne) onDataChunk, String mimeType, int timeSlice)` ``` -------------------------------- ### Start recording on Flutter Web Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-recorder Starts recording specifically for Flutter Web, providing a callback for data chunks. ```dart void startWeb() async { mediaRecorder = MediaRecorder(); setState(() {}); mediaRecorder.startWeb(stream,onDataChunk:(data){ // do something with data dynamic blob, bool isLastOne } ,'video/webm', 1000); } ``` -------------------------------- ### Start the development server Source: https://flutter-webrtc.org/docs/intro Navigates to the project directory and launches the local development server for live previewing. ```bash cd my-website npx docusaurus start ``` -------------------------------- ### Start recording on mobile platforms Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-recorder Initializes recording to a local file path. Requires storage permissions and platform-specific track handling. ```dart void start() async { if (Platform.isIOS) { print('Recording is not available on iOS'); return; } // TODO(rostopira): request write storage permission final storagePath = await getExternalStorageDirectory(); if (storagePath == null) throw Exception('Can\'t find storagePath'); final filePath = storagePath.path + '/webrtc_sample/test.mp4'; mediaRecorder = MediaRecorder(); setState(() {}); final videoTrack = stream .getVideoTracks().first; await mediaRecorder.start( filePath, videoTrack: videoTrack, audioChannel: RecorderAudioChannel.INPUT, ); } ``` -------------------------------- ### Video Device Constraints Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/get-user-media Example of a dictionary object specifying video device ID and resolution settings. ```dart { 'deviceId': 'video_device_id', 'facingMode': 'user', // or 'environment' for mobile devices 'width': 1280, 'height': 720, 'frameRate': 30,} ``` -------------------------------- ### Audio Device Constraints Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/get-user-media Example of a dictionary object specifying an audio device ID. ```dart { 'deviceId': 'audio_device_id',} ``` -------------------------------- ### Get Local Description Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Retrieves the current local RTCSessionDescription, or null if not set. ```dart var localDescription = await pc.getLocalDescription(); ``` -------------------------------- ### Get Remote Description Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Retrieves the current remote RTCSessionDescription, or null if not set. ```dart var remoteDescription = await pc.getRemoteDescription(); ``` -------------------------------- ### Get RTP Transceivers Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Returns an array of RTCRtpTransceiver objects for the connection. ```dart var transceivers = pc.getTransceivers(); ``` -------------------------------- ### Get RTP Receivers Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Returns an array of RTCRtpReceiver objects for the connection. ```dart var receivers = pc.getReceivers(); ``` -------------------------------- ### Get RTP Senders Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Returns an array of RTCRtpSender objects for the connection. ```dart var senders = pc.getSenders(); ``` -------------------------------- ### Get Remote Streams Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Returns an array of MediaStream objects currently being received. ```dart var remoteStreams = await pc.getRemoteStreams(); ``` -------------------------------- ### Get RTP Sender Capabilities Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-factory Retrieves the sender capabilities for a specified media kind, such as 'video' or 'audio'. ```dart RTCRtpCapabilities capabilities = getRtpSenderCapabilities('video'); // or 'audio' ``` -------------------------------- ### Get Local Streams Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Returns an array of MediaStream objects currently being sent. ```dart var localStreams = await pc.getLocalStreams(); ``` -------------------------------- ### Get direction attribute Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-transceiver Retrieves the configured direction attribute of the transceiver. ```dart var direction =await transcreiver.getDirection(); ``` -------------------------------- ### Get RTP Receiver Capabilities Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-factory Retrieves the receiver capabilities for a specified media kind, such as 'video' or 'audio'. ```dart RTCRtpCapabilities capabilities = getRtpReceiverCapabilities('video'); // or 'audio' ``` -------------------------------- ### Get RTCRTPSender statistics Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Retrieves an RTCStatsReport for the outgoing traffic of the sender. ```dart var sender = pc.getSenders().firstWhere((s) => s.track.kind == 'video');sender.getStats().then((stats) => { print('statsId is+ ${stats.id}');}); ``` -------------------------------- ### Get Connection Stats Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Retrieves statistics for the connection, optionally filtered by a specific track. ```dart var someTrack = pc.getSenders()[0].track;var stats = await pc.getStats(someTrack); ``` -------------------------------- ### Get track by ID Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream Retrieves a specific track using its unique identifier. ```dart var track = mediaStream.getTrackById('some-track-id'); ``` -------------------------------- ### Get current direction of transceiver Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-transceiver Retrieves the current directionality of the transceiver as an asynchronous operation. ```dart var currentDirection = await transceiver.getCurrentDirection(); ``` -------------------------------- ### Initialize Flutter Project Source: https://flutter-webrtc.org/docs/flutter-webrtc/first-app Create a new Flutter project using the command line interface. ```bash flutter create myapp ``` -------------------------------- ### Generate a new Docusaurus site Source: https://flutter-webrtc.org/docs/intro Initializes a new project directory using the classic template via npx. ```bash npx @docusaurus/init@latest init my-website classic ``` -------------------------------- ### enumerateDevices Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-devices Lists all available media input and output devices. ```APIDOC ## enumerateDevices ### Description Returns a Promise that resolves to an array of MediaDeviceInfo objects, each representing a media input or output device. ### Signature `Future> enumerateDevices()` ### Example ```dart List devices = await mediaDevices.enumerateDevices(); ``` ``` -------------------------------- ### Create Offer Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Generates an offer SDP for initiating a WebRTC peer connection negotiation. ```dart var offer = await pc.createOffer(); ``` -------------------------------- ### Accessing MediaDevices and Streams Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-devices Initializes the MediaDevices interface and demonstrates common methods for capturing media and listing devices. ```dart MediaDevices mediaDevices = await navigator.mediaDevices; MediaStream stream = await mediaDevices.getUserMedia({ 'audio': true, 'video': true,}); MediaStream displayStream = await mediaDevices.getDisplayMedia({ 'video': true, 'audio': true,}); List devices = await mediaDevices.enumerateDevices(); ``` -------------------------------- ### Configure iOS and macOS Permissions Source: https://flutter-webrtc.org/docs/flutter-webrtc/project-settings Add these keys to Info.plist to grant the application access to the camera and microphone. ```xml NSCameraUsageDescription$(PRODUCT_NAME) Camera Usage!NSMicrophoneUsageDescription$(PRODUCT_NAME) Microphone Usage! ``` -------------------------------- ### Initialize Renderer Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-video-renderer Call initialize to allocate necessary resources and textures before assigning a media stream. ```dart var RTCVideoRenderer renderer = RTCVideoRenderer();Future initRenderers() async { await renderer.initialize();} ``` -------------------------------- ### Access Camera with getUserMedia Source: https://flutter-webrtc.org/docs/flutter-webrtc/first-app Initialize an RTCVideoRenderer and request camera access using navigator.mediaDevices.getUserMedia. ```dart class _MyHomePageState extends State { RTCVideoRenderer? _renderer; MediaStream? _stream; void _openCamera() async { // create and initialize renderer _renderer ??= RTCVideoRenderer(); await _renderer!.initialize(); // try { _stream = await navigator.mediaDevices .getUserMedia({'audio': false, 'video': true}); } catch (e) { //if you get an error, please check the permissions in the project settings. print(e.toString()); } // set the MediaStream to the video renderer _renderer!.srcObject = _stream; setState(() {}); } ``` -------------------------------- ### RTCVideoRenderer.initialize Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-video-renderer Initializes the renderer by creating textures and allocating necessary resources. This must be called before setting the srcObject. ```APIDOC ## initialize() ### Description Initializes the renderer (such as creating textures, allocating resources). It needs to be called before setting the srcObject. ### Signature `Future initialize()` ``` -------------------------------- ### Create RTCPeerConnection Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-factory Initializes a new RTCPeerConnection with a provided configuration, such as STUN server URLs. ```dart RTCPeerConnection pc = await createPeerConnection({ 'iceServers': [ {'urls': 'stun:stun.l.google.com:19302'}, ]}); ``` -------------------------------- ### Create Answer Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Generates an answer SDP in response to an offer for WebRTC peer connection negotiation. ```dart var answer = await pc.createAnswer(); ``` -------------------------------- ### Initialize and add track to MediaStream Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream Creates a new MediaStream instance and adds a track to it. ```dart var mediaStream = MediaStream( id: 'audio-stream', ownerTag: 'audio-tag', active: true,/// The active attribute return true if this [MediaStream] is active and false otherwise./// [MediaStream] is considered active if at least one of its [MediaStreamTracks] is not in the [MediaStreamTrack.ended] state./// Once every track has ended, the stream's active property becomes false. onAddTrack: (MediaStreamTrack track) { print('Track added: ${track.id}'); }, onRemoveTrack: (MediaStreamTrack track) { print('Track removed: ${track.id}'); },);mediaStream.addTrack(track, {addToNative: true}); ``` -------------------------------- ### Basic getUserMedia Usage Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/get-user-media Requests access to both audio and video streams using default settings. ```dart await navigator.mediaDevices.getUserMedia({'audio': true, 'video': true}); ``` -------------------------------- ### Configure Android Release Build Settings Source: https://flutter-webrtc.org/docs/flutter-webrtc/project-settings Update the build.gradle file to configure signing and ProGuard settings for release builds. ```gradle buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug+ minifyEnabled true+ useProguard true++ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } ``` -------------------------------- ### navigator.mediaDevices.getDisplayMedia Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/get-display-media Prompts the user to select and grant permission to capture the contents of a display or portion thereof as a MediaStream. ```APIDOC ## navigator.mediaDevices.getDisplayMedia ### Description The `getDisplayMedia` method prompts the user to select and grant permission to capture the contents of a display or portion thereof (such as a window or screen) as a `MediaStream`. ### Parameters - **audio** (Boolean) - Optional - Indicates whether the MediaStream should include an audio track. Default is false. Note: Only Chrome tabs support audio capture. - **video** (Boolean) - Optional - Indicates whether the MediaStream should include a video track. Default is true. ### Usage Example ```dart MediaStream stream = await navigator.mediaDevices.getDisplayMedia({ 'video': true, 'audio': true, }); ``` ``` -------------------------------- ### navigator.mediaDevices.getUserMedia Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/get-user-media Requests access to media input devices using specified constraints. ```APIDOC ## navigator.mediaDevices.getUserMedia(mediaConstraints) ### Description Requests access to media input devices such as cameras and microphones. Returns a Promise that resolves to a MediaStream object. ### Parameters - **mediaConstraints** (Object) - Required - A dictionary object specifying media constraints (audio/video). Refer to MediaStreamConstraints for details. - **audio** (Boolean|Object) - Optional - Indicates if audio is required or provides specific constraints like 'deviceId'. - **video** (Boolean|Object) - Optional - Indicates if video is required or provides specific constraints like 'deviceId', 'facingMode', 'width', 'height', or 'frameRate'. ### Return Value - **Promise** - Resolves to a MediaStream object containing the requested media tracks. ``` -------------------------------- ### Define Android ProGuard Rules Source: https://flutter-webrtc.org/docs/flutter-webrtc/project-settings Create a proguard-rules.pro file to ensure Flutter and WebRTC classes are not obfuscated during the build process. ```text ## Flutter wrapper-keep class io.flutter.app.** { *; }-keep class io.flutter.plugin.** { *; }-keep class io.flutter.util.** { *; }-keep class io.flutter.view.** { *; }-keep class io.flutter.** { *; }-keep class io.flutter.plugins.** { *; }-dontwarn io.flutter.embedding.** ## Flutter WebRTC-keep class com.cloudwebrtc.webrtc.** { *; }-keep class org.webrtc.** { *; } ``` -------------------------------- ### Enumerating Media Devices Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-devices Retrieves a list of all available media input and output devices. ```dart List devices = await mediaDevices.enumerateDevices(); ``` -------------------------------- ### getDisplayMedia Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-devices Requests access to screen capture and returns a MediaStream object. ```APIDOC ## getDisplayMedia ### Description Returns a Promise that resolves to a MediaStream object representing a stream of screen content. ### Signature `Future getDisplayMedia(Map constraints)` ### Example ```dart MediaStream stream = await mediaDevices.getDisplayMedia({'video': true, 'audio': true}); ``` ``` -------------------------------- ### Add flutter_webrtc Dependency Source: https://flutter-webrtc.org/docs/flutter-webrtc/first-app Add the flutter_webrtc package to your project dependencies. ```bash flutter pub add flutter_webrtc ``` -------------------------------- ### Handle Incoming Messages Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-data-channel Demonstrates receiving messages via a callback or a stream listener. ```dart dataChannel.onMessage(data) { print('Received data: $data.text');};/// ordataChannel.messageStream.listen((data) { print('Received data: $data.text');}); ``` -------------------------------- ### Configure Android Manifest Permissions Source: https://flutter-webrtc.org/docs/flutter-webrtc/project-settings Include these permissions in AndroidManifest.xml to enable hardware access and network state management. ```xml ``` ```xml ``` -------------------------------- ### getUserMedia Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-devices Requests access to media input devices and returns a MediaStream object. ```APIDOC ## getUserMedia ### Description Returns a Promise that resolves to a MediaStream object representing a stream of media content, typically including both audio and video. ### Signature `Future getUserMedia(Map constraints)` ### Example ```dart MediaStream stream = await mediaDevices.getUserMedia({'audio': true, 'video': true}); ``` ``` -------------------------------- ### Capturing Display with getDisplayMedia Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-devices Requests access to screen sharing capabilities to obtain a MediaStream. ```dart MediaStream stream = await mediaDevices.getDisplayMedia({ 'video': true, 'audio': true,}); ``` -------------------------------- ### setConfiguration Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Sets the ICE server configuration for the peer connection. ```APIDOC ### setConfiguration(configuration) ### Description Sets the ICE server configuration for the RTCPeerConnection. ### Parameters - **configuration** (Map) - Required - An object containing iceServers configuration. ``` -------------------------------- ### Capturing Media with getUserMedia Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-devices Requests access to audio and video input devices to obtain a MediaStream. ```dart MediaStream stream = await mediaDevices.getUserMedia({ 'audio': true, 'video': true,}); ``` -------------------------------- ### Capture Display Media Stream Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/get-display-media Requests permission to capture screen or window contents with both video and audio tracks enabled. ```dart MediaStream stream = await navigator.mediaDevices.getDisplayMedia({ 'video': true, 'audio': true,}); ``` -------------------------------- ### Configure ICE servers for RTCPeerConnection Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Sets the ICE server configuration and triggers a renegotiation of the connection. ```dart var configuration = { "iceServers": [ { "urls": "turn:asia.turn-server.net", "username": "allie@oopcode.com", "credential": "topsecretpassword", }, ],};pc.setConfiguration(configuration);/// renegotiate connection after configuration is set.var offer = await pc.createOffer(); ``` -------------------------------- ### Add Stream Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Connects a MediaStream to the peer connection. ```dart pc.addStream(stream); ``` -------------------------------- ### Set codec preferences Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-transceiver Configures the allowed codecs for decoding received data, ordered by preference. ```dart var transceiver = await pc.getTransceivers()[0];var acaps = await getRtpSenderCapabilities('audio');var codecs = acaps.codecs.where((c) => c.mimeType == 'audio/opus').toList();await transceiver.setCodecPreferences(codecs); ``` -------------------------------- ### Advanced getUserMedia Usage Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/get-user-media Configures specific video constraints such as resolution, frame rate, and camera facing mode. ```dart await navigator.mediaDevices.getUserMedia({ 'audio': true, 'video': { 'facingMode': 'user', // or 'environment' for mobile devices 'width': 1280, 'height': 720, 'frameRate': 30, }}); ``` -------------------------------- ### Create Data Channel Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Initializes a new RTCDataChannel with specific configuration parameters. ```dart var dataChannelDict = RTCDataChannelInit(); dataChannelDict.id = 1; dataChannelDict.ordered = true; dataChannelDict.maxRetransmitTime = -1; dataChannelDict.maxRetransmits = -1; dataChannelDict.protocol = 'sctp';///sctp or quicvar sendChannel = await pc.createDataChannel( 'dataChannel', dataChannelDict, ); ``` -------------------------------- ### RTCPeerConnection Methods Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection A collection of methods available on the RTCPeerConnection object for managing connections, media streams, and data channels. ```APIDOC ## createOffer Creates an offer SDP for negotiations for WebRTC peer connection. ## createAnswer Creates an answer SDP for negotiations for WebRTC peer connection. ## addStream Connects a MediaStream to the peer connection. ## removeStream Disconnects a MediaStream from the peer connection. ## getLocalDescription Returns an RTCSessionDescription describing the session for the local end of the connection. ## setLocalDescription Changes the local description associated with the connection. ## getRemoteDescription Returns an RTCSessionDescription describing the session for the remote end of the connection. ## setRemoteDescription Changes the remote description associated with the connection. ## addCandidate Adds a candidate to the ICE agent. ## getStats Returns a Promise that resolves with an RTCStatsReport object containing statistics for the connection. ## getLocalStreams Returns an array of MediaStream objects representing the local streams being sent to the remote peer. ## getRemoteStreams Returns an array of MediaStream objects representing the remote streams being received from the remote peer. ## getSenders Returns an array of RTCRtpSender objects. ## getReceivers Returns an array of RTCRtpReceiver objects. ## getTransceivers Returns an array of RTCRtpTransceiver objects. ## createDataChannel Creates a new RTCDataChannel object with the given label. ## restartIce Restarts the ICE agent for the connection. ## close Closes the RTCPeerConnection. ## createDtmfSender Creates a new RTCDtmfSender object to send DTMF tones to the remote peer. ## addTrack Adds a new MediaStreamTrack to the set of tracks which will be transmitted to the remote peer. ## removeTrack Removes a MediaStreamTrack from the set of tracks which will be transmitted to the remote peer. ``` -------------------------------- ### Set Local Description Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Updates the local description and triggers ICE candidate collection. ```dart var offer = await pc.createOffer();await pc.setLocalDescription(offer); ``` -------------------------------- ### RTCPeerConnection Events Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection List of event handlers available on the RTCPeerConnection instance. ```APIDOC ### Events - **onIceCandidate**: Fired when a new ICE candidate is generated. - **onSignalingState**: Fired when the signaling state changes. - **onIceConnectionState**: Fired when the ICE connection state changes. - **onConnectionState**: Fired when the connection state changes. - **onTrack**: Fired when a new track is added to the connection. - **onDataChannel**: Fired when a new data channel is added to the connection. - **onRenegotiationNeeded**: Fired when a negotiation is needed. - **onIceGatheringState**: Fired when the ICE gathering state changes. ``` -------------------------------- ### createPeerConnection Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-factory Creates a new RTCPeerConnection object with the specified RTCConfiguration. ```APIDOC ### createPeerConnection(RTCConfiguration configuration) Creates a new `RTCPeerConnection` object with the specified `RTCConfiguration`. #### Parameters - **configuration** (RTCConfiguration) - Required - The configuration object containing iceServers and other connection settings. #### Example ```dart RTCPeerConnection pc = await createPeerConnection({ 'iceServers': [ {'urls': 'stun:stun.l.google.com:19302'}, ]}); ``` ``` -------------------------------- ### createLocalMediaStream Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-factory Creates a new MediaStream object with the specified label. ```APIDOC ### createLocalMediaStream(String label) Creates a new `MediaStream` object with the specified `label`. #### Parameters - **label** (String) - Required - The identifier for the new media stream. #### Example ```dart MediaStream stream = factory.createLocalMediaStream('new_stream_label'); ``` ``` -------------------------------- ### Handle onRenegotiationNeeded event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Triggered when a negotiation is required; typically involves creating an offer and setting the local description. ```dart pc.onRenegotiationNeeded = () async { var offer = await pc.createOffer(); await pc.setLocalDescription(offer); signaling.send(offer.toMap());}; ``` -------------------------------- ### Render Video in Widget Tree Source: https://flutter-webrtc.org/docs/flutter-webrtc/first-app Display the video stream using the RTCVideoView widget within the build method. ```dart @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: Text(widget.title), ), body: Center( child: SizedBox( width: 320, height: 240, // render the video renderer in the widget tree child: _renderer != null ? RTCVideoView(_renderer!) : Container(), ), ), floatingActionButton: FloatingActionButton( onPressed: _setup, tooltip: 'open camera', child: const Icon(Icons.camera_alt), ), ); } ``` -------------------------------- ### Access RTCRTPSender parameters Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Retrieves the current configuration for media encoding and transmission. ```dart var sender = pc.getSenders().firstWhere((s) => s.track.kind == 'video');var parameters = sender.parameters;print('transactionId is ${parameters.transactionId}'); ``` -------------------------------- ### Listen to RTCDataChannel State Changes Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-data-channel Shows how to monitor state changes using either a callback or a stream listener. ```dart var dc = await pc.createDataChannel('dataChannel');dataChannel.onDataChannelState(state) { print('Data channel state is: $state');};/// ordataChannel.stateChangeStream.listen((state) { print('Data channel state is: $state');}); ``` -------------------------------- ### RTCIceCandidate Constructor Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-ice-candidate The RTCIceCandidate() constructor creates and returns a new RTCIceCandidate object, which can be configured to represent a single ICE candidate. ```APIDOC ## RTCIceCandidate() ### Description Creates and returns a new RTCIceCandidate object. ### Properties - **candidate** (String) - A string representing the transport address for the candidate that can be used for connectivity checks. - **sdpMid** (String) - A string specifying the candidate's media stream identification tag which uniquely identifies the media stream within the component with which the candidate is associated, or null if no such association exists. - **sdpMLineIndex** (int) - If not null, sdpMLineIndex indicates the zero-based index number of the media description in the SDP with which the candidate is associated. ``` -------------------------------- ### getRtpSenderCapabilities Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-factory Returns an RTCRtpCapabilities object representing the capabilities of the sender for the given kind. ```APIDOC ### getRtpSenderCapabilities(String kind) Returns a `RTCRtpCapabilities` object that represents the capabilities of the sender for the given `kind`. #### Parameters - **kind** (String) - Required - The media kind, typically 'audio' or 'video'. #### Example ```dart RTCRtpCapabilities capabilities = getRtpSenderCapabilities('video'); ``` ``` -------------------------------- ### Handle onConnectionState event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Triggered when the overall connection state changes. ```dart pc.onConnectionState = (state) { print('Connection state changed to $state');}; ``` -------------------------------- ### Add flutter_webrtc dependency Source: https://flutter-webrtc.org/docs/flutter-webrtc/get-stared Add this line to the dependencies section of your pubspec.yaml file, replacing x.y.z with the desired version. ```yaml flutter_webrtc: ^x.y.z ``` -------------------------------- ### Set Remote Description Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Updates the remote description and triggers ICE candidate collection. ```dart var remoteDescription = await pc.getRemoteDescription();await pc.setRemoteDescription(remoteDescription); ``` -------------------------------- ### Switch Audio Output Device Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-video-renderer Use the audioOutput method to route audio to a specific device ID. ```dart var RTCVideoRenderer renderer = RTCVideoRenderer();///deviceId is The ID of the target audio output deviceFuture selectAudioOutput(String? deviceId) async { await renderer.audioOutput(deviceId);} ``` -------------------------------- ### insertDTMF(String tones, {int duration, int interToneGap}) Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-dtmf-sender Sends DTMF tones over the audio track. The tones parameter is a string of DTMF codes, where ',' inserts a two-second delay. ```APIDOC ## insertDTMF(String tones, {int duration, int interToneGap}) ### Description Sends a sequence of DTMF tones. The duration of each tone and the gap between them can be configured. ### Parameters - **tones** (String) - Required - The DTMF codes to be transmitted. - **duration** (int) - Optional - The duration of each tone in ms (40-6000ms, default 100ms). - **interToneGap** (int) - Optional - The time to wait between tones in ms (minimum 30ms, default 70ms). ``` -------------------------------- ### stop() Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-transceiver Stops the transceiver. ```APIDOC ## stop() ### Description Stops the transceiver, ceasing all sending and receiving of media. ### Usage ```dart await transceiver.stop(); ``` ``` -------------------------------- ### Handle Low Buffer Amount Events Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-data-channel Listens for events triggered when the buffered amount falls below a set threshold. ```dart dataChannel.onBufferedAmountLow(int currentAmount) { print('Buffered amount low: $currentAmount');}; ``` -------------------------------- ### MediaStream Methods Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream Methods available on the MediaStream object to manipulate and query media tracks. ```APIDOC ## addTrack(MediaStreamTrack track, {bool addToNative}) ### Description Adds the given MediaStreamTrack to this MediaStream. ### Usage ```dart mediaStream.addTrack(track, {addToNative: true}); ``` ## removeTrack(MediaStreamTrack track, {bool removeFromNative}) ### Description Removes the given MediaStreamTrack object from this MediaStream. ### Usage ```dart mediaStream.removeTrack(track, {removeFromNative: true}); ``` ## getTracks() ### Description Returns a List of MediaStreamTrack objects representing all the tracks in this stream. ### Usage ```dart var tracks = mediaStream.getTracks(); ``` ## getAudioTracks() ### Description Returns a List of MediaStreamTrack objects representing the audio tracks in this stream. ### Usage ```dart var audioTracks = mediaStream.getAudioTracks(); ``` ## getVideoTracks() ### Description Returns a List of MediaStreamTrack objects representing the video tracks in this stream. ### Usage ```dart var videoTracks = mediaStream.getVideoTracks(); ``` ## getTrackById(String trackId) ### Description Returns a MediaStreamTrack object from this stream's track set whose id is equal to trackId, or throws StateError if no such track exists. ### Usage ```dart var track = mediaStream.getTrackById('some-track-id'); ``` ## dispose() ### Description Dispose the MediaStream. ### Usage ```dart await mediaStream.dispose(); ``` ``` -------------------------------- ### Set Media Stream Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-video-renderer Assign a MediaStream to the srcObject property to begin rendering the video and audio. ```dart var RTCVideoRenderer renderer = RTCVideoRenderer();renderer.srcObject = mediaStream; ``` -------------------------------- ### stop Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-recorder Stops the current media recording session. ```APIDOC ## stop ### Description Stops recording the media. ### Signature `void stop()` ``` -------------------------------- ### Send Data via RTCDataChannel Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-data-channel Demonstrates creating a data channel and sending a text message. ```dart var sendChannel = await pc.createDataChannel( 'dataChannel', dataChannelDict, );sendChannel.send('Hello, world!'); ``` -------------------------------- ### Handle onIceConnectionState event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Triggered when the ICE connection state changes. ```dart pc.onIceConnectionState = (state) { print('ICE connection state changed to $state');}; ``` -------------------------------- ### Create Local MediaStream Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-factory Generates a new MediaStream object identified by a specific label. ```dart MediaStream stream = factory.createLocalMediaStream('new_stream_label'); ``` -------------------------------- ### Handle First Packet Received Event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-receiver Assign a callback to onFirstPacketReceived to detect when the first data packet is received by the receiver. ```dart var receiver = pc.getReceivers().firstWhere((s) => s.track.kind == 'video');receiver.onFirstPacketReceived = (RTCRtpReceiver rtpReceiver, RTCRtpMediaType mediaType) { print('first packet received');}; ``` -------------------------------- ### Handle onTrack event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Triggered when a new track is added to the connection. ```dart pc.onTrack = (event) { print('Track added: ${event.track.id}');}; ``` -------------------------------- ### getRtpReceiverCapabilities Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-factory Returns an RTCRtpCapabilities object representing the capabilities of the receiver for the given kind. ```APIDOC ### getRtpReceiverCapabilities(String kind) Returns a `RTCRtpCapabilities` object that represents the capabilities of the receiver for the given `kind`. #### Parameters - **kind** (String) - Required - The media kind, typically 'audio' or 'video'. #### Example ```dart RTCRtpCapabilities capabilities = getRtpReceiverCapabilities('video'); ``` ``` -------------------------------- ### setCodecPreferences(List codecs) Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-transceiver Sets the codecs allowed for decoding received data. ```APIDOC ## setCodecPreferences(List codecs) ### Description Configures the codecs that the transceiver allows for decoding received data, ordered by decreasing preference. ### Usage ```dart await transceiver.setCodecPreferences(codecs); ``` ``` -------------------------------- ### getStats() Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-receiver Asynchronously requests an RTCStatsReport object providing statistics about incoming traffic on the owning RTCPeerConnection. ```APIDOC ### Method `Future getStats()` ### Description Requests an RTCStatsReport object which provides statistics about incoming traffic on the owning RTCPeerConnection. ### Example ```dart var receiver = pc.getReceivers().firstWhere((s) => s.track.kind == 'video'); receiver.getStats().then((stats) => { print('statsId is+ ${stats.id}'); }); ``` ``` -------------------------------- ### Handle onIceCandidate event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Triggered when a new ICE candidate is generated; typically used to send candidates to the remote peer via signaling. ```dart pc.onIceCandidate = (candidate) { /// send ICE candidates to remote peer. signaling.send(candidate.toMap());}; ``` -------------------------------- ### onFirstPacketReceived Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-receiver Callback function triggered when the first data packet is received by the RTCRtpReceiver. ```APIDOC ### Description The callback function of the first data packet received by RTCRtpReceiver. ### Example ```dart var receiver = pc.getReceivers().firstWhere((s) => s.track.kind == 'video'); receiver.onFirstPacketReceived = (RTCRtpReceiver rtpReceiver, RTCRtpMediaType mediaType) { print('first packet received'); }; ``` ``` -------------------------------- ### Add Track Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Adds a MediaStreamTrack to be transmitted to the remote peer. ```dart var track = await stream.getTracks().forEach((track) { pc.addTrack(track, [stream]);}); ``` -------------------------------- ### Handle onSignalingState event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Triggered when the signaling state of the connection changes. ```dart pc.onSignalingState = (state) { print('Signaling state changed to $state');}; ``` -------------------------------- ### Handle onIceGatheringState event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Triggered when the ICE gathering state changes. ```dart pc.onIceGatheringState = (state) { print('ICE gathering state changed to $state');}; ``` -------------------------------- ### Create DTMF Sender Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Creates an RTCDtmfSender for sending DTMF tones via an audio track. ```dart var track = pc.getAudioTracks()[0];var dtmfSender = await pc.createDtmfSender(track); ``` -------------------------------- ### Insert DTMF tones using RTCDTMFSender Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-dtmf-sender Access the DTMF sender from the audio track and queue a sequence of tones for transmission. ```dart var dtmfSender = pc.getSenders().firstWhere((s) => s.track.kind == 'audio');dtmfSender.insertDTMF('1234#', duration: 100, interToneGap: 70); ``` -------------------------------- ### Restart ICE Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Triggers a restart of the ICE agent to request new candidates. ```dart await pc.restartIce(); ``` -------------------------------- ### RTCVideoRenderer.audioOutput Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-video-renderer Switches the audio output device to the specified device ID. ```APIDOC ## audioOutput(String? deviceId) ### Description Switch audio output devices (such as speakers, headphones). Returning true indicates a successful switch. ### Parameters - **deviceId** (String?) - The ID of the target audio output device. ``` -------------------------------- ### Monitor Buffered Amount Changes Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-data-channel Tracks changes in the amount of data queued for transmission. ```dart dataChannel.onBufferedAmountChange(int currentAmount, int changedAmount) { print('Buffered amount change: $changedAmount');}; ``` -------------------------------- ### Dispose Renderer Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-video-renderer Invoke dispose to release resources when the renderer is no longer needed. ```dart var RTCVideoRenderer renderer = RTCVideoRenderer();Future dispose() async { await renderer.dispose();} ``` -------------------------------- ### MediaStreamTrack Properties Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream-track Properties available on the MediaStreamTrack object to inspect its state and metadata. ```APIDOC ## Properties - **id** (String): Returns the unique identifier of the track. - **label** (String): Returns the label of the source (e.g., 'Internal microphone'). - **kind** (String): Returns the type of track ('audio' or 'video'). - **enabled** (bool): Returns or sets the enable state of the track. - **muted** (bool): Returns true if the track is muted. ``` -------------------------------- ### RTCSessionDescription Interface Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-session-description The RTCSessionDescription interface describes one end of a connection or potential connection and how it is configured. ```APIDOC ## RTCSessionDescription ### Description The RTCSessionDescription interface describes one end of a connection—or potential connection—and how it's configured. It is used during the offer/answer negotiation process. ### Properties - **type** (String): Indicates the type of session description, which is either "offer" or "answer". - **sdp** (String): Contains the SDP descriptor of the session. ``` -------------------------------- ### Replace RTCRTPSender track Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Swaps the current MediaStreamTrack with a new one. ```dart /// Example usage:var stream = await navigator.mediaDevices.getUserMedia({video: true});var videoTrack = stream.getVideoTracks()[0];var sender = pc.getSenders().firstWhere((s) => s.track.kind == 'video');/// Replace the video track with a new video tracksender.replaceTrack(sender, newVideoTrack); ``` -------------------------------- ### Handle onDataChannel event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Triggered when a new data channel is added to the connection. ```dart pc.onDataChannel = (dc) { print('Data channel added: ${dc.label}');}; ``` -------------------------------- ### setParameters Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Sets the encoding parameters for the MediaStreamTrack associated with this RTCRtpSender. ```APIDOC ## setParameters(RTCRtpParameters parameters) ### Description Sets the encoding parameters for the MediaStreamTrack associated with this RTCRtpSender. ### Example ```dart var sender = pc.getSenders().firstWhere((s) => s.track.kind == 'video'); var params = sender.parameters; params.degradationPreference = RTCDegradationPreference.MAINTAIN_RESOLUTION; await sender.setParameters(params); ``` ``` -------------------------------- ### Check DTMF capability Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-dtmf-sender Verify if the current sender supports DTMF tone transmission. ```dart dtmfSender.canInsertDtmf(); /// Return true or false ``` -------------------------------- ### Set RTCRTPSender parameters Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Configures encoding parameters for the sender's associated track. ```dart var sender = pc.getSenders().firstWhere((s) => s.track.kind == 'video');var params = sender.parameters; params.degradationPreference = RTCDegradationPreference.MAINTAIN_RESOLUTION;await sender.setParameters(params); ``` -------------------------------- ### Add a transceiver to RTCPeerConnection Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Adds a new transceiver with specified media type and direction initialization. ```dart var transceiver = await pc.addTransceiver( kind: RTCRtpMediaType.RTCRtpMediaTypeAudio, init: RTCRtpTransceiverInit(direction: TransceiverDirection.RecvOnly)); ``` -------------------------------- ### RTCVideoRenderer.dispose Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-video-renderer Releases the resources used by the renderer. ```APIDOC ## dispose() ### Description Release the resources used by the renderer. ### Signature `Future dispose()` ``` -------------------------------- ### Handle MediaStream events Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream Assigns callbacks for when tracks are added or removed from the stream. ```dart var mediaStream = MediaStream( id: 'audio-stream', ownerTag: 'audio-tag', active: true,);mediaStream.onAddTrack = (MediaStreamTrack track) { print('Track added: ${track.id}');}; ``` ```dart var mediaStream = MediaStream( id: 'audio-stream', ownerTag: 'audio-tag', active: true,);mediaStream.onRemoveTrack = (MediaStreamTrack track) { print('Track removed: ${track.id}');}; ``` -------------------------------- ### Retrieve tracks from MediaStream Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream Methods to retrieve all tracks, audio tracks, or video tracks from the stream. ```dart var tracks = mediaStream.getTracks(); ``` ```dart var audioTracks = mediaStream.getAudioTracks(); ``` ```dart var videoTracks = mediaStream.getVideoTracks(); ``` -------------------------------- ### setStreams Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Associates the sender's track with the specified MediaStream objects. ```APIDOC ## setStreams(MediaStream stream) ### Description Associates the sender's track with the specified MediaStream objects. ### Example ```dart var stream = await navigator.mediaDevices.getUserMedia({video: true}); var sender = pc.getSenders().firstWhere((s) => s.track.kind == 'video'); sender.setStreams(stream); ``` ``` -------------------------------- ### canInsertDtmf() Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-dtmf-sender Checks if the current sender is capable of transmitting DTMF tones. ```APIDOC ## canInsertDtmf() ### Description Returns a boolean indicating whether the DTMF sender can send DTMF tones. ### Returns - **bool** - True if DTMF can be sent, false otherwise. ``` -------------------------------- ### Add ICE Candidate Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Adds a remote ICE candidate received from the signaling server to the ICE agent. ```dart /// receive ICE candidates from signaling server. /// and convert to RTCIceCandidate object. var json = ws.receive(); var candidate = new RTCIceCandidate(candidate: json['candidate'], sdpMid: json['sdpMid'], sdpMLineIndex: json['sdpMLineIndex']); await pc.addCandidate(candidate); ``` -------------------------------- ### Retrieve RTCRtpReceiver Statistics Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-receiver Use getStats to asynchronously request an RTCStatsReport for incoming traffic on the peer connection. ```dart var receiver = pc.getReceivers().firstWhere((s) => s.track.kind == 'video');receiver.getStats().then((stats) => { print('statsId is+ ${stats.id}');}); ``` -------------------------------- ### replaceTrack Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Replaces the MediaStreamTrack associated with this RTCRtpSender with a new MediaStreamTrack. ```APIDOC ## replaceTrack(MediaStreamTrack track) ### Description Replaces the MediaStreamTrack associated with this RTCRtpSender with a new MediaStreamTrack. ### Example ```dart var stream = await navigator.mediaDevices.getUserMedia({video: true}); var videoTrack = stream.getVideoTracks()[0]; var sender = pc.getSenders().firstWhere((s) => s.track.kind == 'video'); sender.replaceTrack(sender, newVideoTrack); ``` ``` -------------------------------- ### getStats Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Asynchronously requests an RTCStatsReport object which provides statistics about outgoing traffic on the RTCPeerConnection which owns the sender. ```APIDOC ## getStats() ### Description Asynchronously requests an RTCStatsReport object which provides statistics about outgoing traffic on the RTCPeerConnection which owns the sender, returning a Promise which is fulfilled when the results are available. ### Example ```dart var sender = pc.getSenders().firstWhere((s) => s.track.kind == 'video'); sender.getStats().then((stats) => { print('statsId is+ ${stats.id}'); }); ``` ``` -------------------------------- ### MediaStreamTrack.stop() Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream-track Stops the media track, effectively ending the stream of data for this track. ```APIDOC ## void stop() ### Description Stops the track, releasing the underlying media source. ``` -------------------------------- ### RTCTrackEvent Interface Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-track-event The RTCTrackEvent interface provides access to the track, receiver, streams, and transceiver associated with a WebRTC track event. ```APIDOC ## RTCTrackEvent ### Description Represents an event triggered when a new MediaStreamTrack is added to an RTCRtpReceiver. ### Properties - **track** (MediaStreamTrack) - The media track (audio or video) that has been added. - **receiver** (RTCRtpReceiver) - The receiver object responsible for receiving the media track. - **streams** (List) - An array of MediaStream objects associated with the track. - **transceiver** (RTCRtpTransceiver) - The transceiver object managing the media for this track. ``` -------------------------------- ### Dispose MediaStream Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream Releases resources associated with the MediaStream. ```dart await mediaStream.dispose(); ``` -------------------------------- ### Handle MediaStreamTrack Mute Event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream-track Registers a callback for when a track is muted due to temporary data unavailability. ```dart track.onMute = (event) { print("Track ${track.id} is muted");}; ``` -------------------------------- ### dispose Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Closes the RTCRtpSender and releases any associated resources. ```APIDOC ## dispose() ### Description Closes the RTCRtpSender and releases any associated resources. ### Example ```dart sender.dispose(); ``` ``` -------------------------------- ### MediaStreamTrack Events Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream-track Events emitted by the MediaStreamTrack to notify about state changes. ```APIDOC ## Events - **onMute**: Triggered when the track is muted. - **onUnMute**: Triggered when the track is unmuted. - **onEnded**: Triggered when the track playback ends. ``` -------------------------------- ### Set RTCRTPSender track Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Associates a new MediaStreamTrack with the sender. ```dart var stream = await navigator.mediaDevices.getUserMedia({video: true});var videoTrack = stream.getVideoTracks()[0];sender.setTrack(videoTrack,{takeOwnership: true}); ``` -------------------------------- ### Stop recording Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-recorder Stops the active recording session and cleans up the recorder instance. ```dart void stop() async { await mediaRecorder.stop(); setState(() { mediaRecorder = null; }); } ``` -------------------------------- ### setTrack Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Associates the sender's track with the specified MediaStreamTrack objects. ```APIDOC ## setTrack(MediaStreamTrack track, {bool takeOwnership}) ### Description Associates the sender's track with the specified MediaStreamTrack objects. ### Example ```dart var stream = await navigator.mediaDevices.getUserMedia({video: true}); var videoTrack = stream.getVideoTracks()[0]; sender.setTrack(videoTrack, {takeOwnership: true}); ``` ``` -------------------------------- ### Close Connection Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Closes the RTCPeerConnection instance. ```dart await pc.close(); ``` -------------------------------- ### Handle MediaStreamTrack Ended Event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream-track Registers a callback for when track playback ends, excluding manual stops. ```dart track.onEnded = (event) { print("Track ${track.id} has ended");}; ``` -------------------------------- ### RTCDataChannel.send Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-data-channel Sends a message through the data channel. Supports both text and binary data via RTCDataChannelMessage. ```APIDOC ## send(RTCDataChannelMessage message) ### Description Sends a message to the peer over the data channel. Use the default constructor for text messages or `RTCDataChannelMessage.fromBinary` for binary data. ### Example ```dart sendChannel.send('Hello, world!'); ``` ``` -------------------------------- ### addTransceiver Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-peerconnection Adds a new transceiver to the set of transceivers associated with the connection. ```APIDOC ### addTransceiver(kind, init) ### Description Adds a new transceiver to the set of transceivers associated with the connection. ### Parameters - **kind** (RTCRtpMediaType) - Required - The media type of the transceiver. - **init** (RTCRtpTransceiverInit) - Optional - Initialization parameters for the transceiver. ``` -------------------------------- ### setDirection(String direction) Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-transceiver Sets the direction attribute of the transceiver. ```APIDOC ## setDirection(String direction) ### Description Sets the preferred directionality for the transceiver. ### Usage ```dart await transceiver.setDirection("sendrecv"); ``` ``` -------------------------------- ### Handle MediaStreamTrack Unmute Event Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/media-stream-track Registers a callback for when a track resumes providing data after being muted. ```dart track.onUnMute = (event) { print("Track ${track.id} is unmuted");}; ``` -------------------------------- ### RTCDataChannel.close Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-data-channel Closes the data channel connection. ```APIDOC ## close() ### Description Closes the data channel, terminating the connection. ### Example ```dart sendChannel.close(); ``` ``` -------------------------------- ### Set RTCRTPSender streams Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-sender Associates the sender's track with specific MediaStream objects. ```dart var stream = await navigator.mediaDevices.getUserMedia({video: true});var sender = pc.getSenders().firstWhere((s) => s.track.kind == 'video');sender.setStreams(stream); ``` -------------------------------- ### getCurrentDirection() Source: https://flutter-webrtc.org/docs/flutter-webrtc/api-docs/rtc-rtp-transceiver Retrieves the current directionality of the transceiver. ```APIDOC ## getCurrentDirection() ### Description Returns the current direction attribute of the transceiver, indicating its preferred directionality (e.g., SendRecv, SendOnly, RecvOnly, Inactive, or Stopped). ### Usage ```dart var currentDirection = await transceiver.getCurrentDirection(); ``` ```