Flutter媒体管理插件ant_media_flutter的使用
Flutter媒体管理插件ant_media_flutter的使用
简介
ant_media_flutter
是一个用于WebRTC的Flutter插件。要使用它,你需要先有一个Ant Media Server实例。更多信息可以查看 Ant Media Server的网站。
如果你使用的是Ant Media Server社区版,你只能使用WebRTC发布功能。WebRTC播放、会议和数据通道功能在Ant Media Server企业版中可用。
使用方法
AntMediaFlutter.connect
以下是一个使用 AntMediaFlutter.connect
的示例:
import 'package:flutter/material.dart';
import 'package:ant_media_flutter/ant_media_flutter.dart';
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _inCalling = false;
RTCVideoRenderer _localRenderer = RTCVideoRenderer();
RTCVideoRenderer _remoteRenderer = RTCVideoRenderer();
@override
void initState() {
super.initState();
_localRenderer.initialize();
_remoteRenderer.initialize();
}
@override
void dispose() {
_localRenderer.dispose();
_remoteRenderer.dispose();
super.dispose();
}
void _connectToServer() {
AntMediaFlutter.connect(
// host
'wss://<domain>:<port>/<application_name>/websocket',
// streamID
'stream1',
// roomID
'',
// token
'',
// type
AntMediaType.Publish,
// userScreen
true,
// onStateChange
(HelperState state) {
switch (state) {
case HelperState.CallStateNew:
setState(() {
_inCalling = true;
});
break;
case HelperState.CallStateBye:
setState(() {
_localRenderer.srcObject = null;
_remoteRenderer.srcObject = null;
_inCalling = false;
Navigator.pop(context);
});
break;
case HelperState.ConnectionOpen:
break;
case HelperState.ConnectionClosed:
break;
case HelperState.ConnectionError:
break;
}
},
// onLocalStream
((stream) {
setState(() {
_remoteRenderer.srcObject = stream;
});
}),
// onAddRemoteStream
((stream) {
setState(() {
_remoteRenderer.srcObject = stream;
});
}),
// onDataChannel
(datachannel) {
print(datachannel.id);
print(datachannel.state);
},
// onDataChannelMessage
(channel, message, isReceived) {
print("Message Received: ${message.received}");
},
// onupdateConferencePerson
(streams) {},
// onRemoveRemoteStream
((stream) {
setState(() {
_remoteRenderer.srcObject = null;
});
}),
// ice servers
[
{'url': 'stun:stun.l.google.com:19302'},
],
// callbacks
(command, mapData) {},
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Ant Media Flutter Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _connectToServer,
child: Text('Connect to Server'),
),
SizedBox(height: 20),
_inCalling
? Expanded(
child: AspectRatio(
aspectRatio: 16 / 9,
child: RTCVideoView(_remoteRenderer),
),
)
: Container(),
],
),
),
);
}
}
连接函数的部分说明
Host
Host
是你的Ant Media Server实例的WebSocket URL。
Stream ID
Stream ID
用于标识每个流,以便进行发布和播放。
Room ID
Room ID
用于WebRTC多轨道会议模式。
Type
Type
用于确定不同的模式。可能的选项:
AntMediaType.Publish
AntMediaType.Play
AntMediaType.Peer
AntMediaType.Conference
AntMediaType.DataChannelOnly
User Screen
User Screen
用于在初始化时切换屏幕和摄像头发布模式。
On State Change
On State Change
是设备与Ant Media Server之间的WebSocket连接状态。可能的选项:
HelperState.CallStateNew
HelperState.CallStateBye
HelperState.ConnectionOpen
HelperState.ConnectionClosed
HelperState.ConnectionError
On Local Stream
On Local Stream
在我们开始向Ant Media Server发送流时触发。
On Add Remote Stream
On Add Remote Stream
在我们从Ant Media Server接收新的远程流时触发。
On Data Channel
On Data Channel
在数据通道状态改变时触发。
On Data Channel Message
On Data Channel Message
在我们接收到新的数据通道消息时触发。
On Update Conference Person
On Update Conference Person
在会议房间中有人加入或离开时触发。
On Remove Remote Stream
On Remove Remote Stream
在你停止发布自己或你正在播放的流停止发布时触发。
Ice Servers
Ice Servers
是你可以定义自己的turn/stun服务器列表的地方。
Callbacks
Callbacks
你可以监听从Ant Media Server侧发送的所有回调。
其他功能
切换摄像头
AntMediaFlutter.anthelper?.switchCamera();
静音/取消静音麦克风
AntMediaFlutter.anthelper?.muteMic(bool mute);
打开/关闭摄像头
AntMediaFlutter.anthelper?.toggleCam(bool state);
断开对等连接
AntMediaFlutter.anthelper?.disconnectPeer();
获取发送者轨道
AntMediaFlutter.anthelper?.getSender(streamId, type);
设置最大比特率
AntMediaFlutter.anthelper?.setMaxBitrate(streamId, type, maxBitrateKbps);
创建本地流
AntMediaFlutter.anthelper?.createStream(media, userScreen);
设置本地流
AntMediaFlutter.anthelper?.setStream(MediaStream? media);
开始发布
AntMediaFlutter.anthelper?.startStreamingAntMedia(streamId, token);
强制流质量
AntMediaFlutter.anthelper?.forceStreamQuality(streamId, resolution);
加入会议房间(作为播放器)
AntMediaFlutter.anthelper?.join(streamId);
加入会议房间(作为参与者)
AntMediaFlutter.anthelper?.joinroom(streamId);
发送数据通道消息
AntMediaFlutter.anthelper?.sendMessage(RTCDataChannelMessage message);
获取流信息
AntMediaFlutter.anthelper?.getStreamInfo(streamId);
关闭对等连接
AntMediaFlutter.anthelper?.closePeerConnection(streamId);
停止发布
AntMediaFlutter.anthelper?.bye();
关闭所有连接
AntMediaFlutter.anthelper?.close();
示例项目
- Conference Sample App - 使用Ant Media Server Flutter SDK创建WebRTC多轨道会议应用的示例。
- Data Channel Sample App - 使用Ant Media Server Flutter SDK创建基于数据通道的文本消息应用的示例。
- Peer Sample App - 使用Ant Media Server Flutter SDK创建点对点应用的示例。
- Play Sample App - 使用Ant Media Server Flutter SDK创建WebRTC播放器的示例。
- Publish Sample App - 使用Ant Media Server Flutter SDK创建WebRTC发布应用的示例。
- Sample Project - 包含上述所有示例的完整示例项目。
集成
要将Flutter SDK集成到你的项目中,请参考 此链接。
支持
有关Flutter SDK的任何问题,请访问我们的 社区平台。
问题
在 Ant-Media-Server 上创建问题。
Dart 版本
- Dart 2: >= 2.12
希望这些信息对你有所帮助!如果有任何问题,请随时提问。
更多关于Flutter媒体管理插件ant_media_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html