自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(278)
  • 收藏
  • 关注

原创 Flutter技术文章索引

防采集标记:亢少军老师的课程和资料文章索引Flutter组件大全:Flutter组件-Slider-SliderTheme-滑块主题Flutter组件-Layout-Row-水平布局Flutter组件-Box-DecoratedBox-装饰容器Flutter组件-Button-RaisedButton-凸起按钮Flutter组件-Input-TextField-文本输入框Flutt...

2019-01-30 13:40:45 2430

原创 WebRTC视频会议案例-APP(Flutter+Golang)

WebRTC技术经过多年的发展,已经非常成熟,它提供了HTML5流媒体技术的一整套解决方案及API,可用来实现一对一视频通话,视频会议,远程教育以及远程会诊等应用。尤其现在5G时代已经到来,WebRTC技术为必备技能。本课程为WebRTC的实战案例课程,使用Flutter+Golang+WebRTC实现视频会议系统。使用Flutter实现APP Desktop Web跨平台会议终端,Golang实现房间管理及转发消息。流媒体采用RTC领域流行开源流媒体ion-sfu.讲师介绍讲师:亢少军资深开发者,

2021-08-03 11:34:30 2395 1

原创 GitHub双重认证问题

最近被GitHub双重认证问题搞的头疼。这里给大家分享点儿经验。1:双重认证设置成功后需要把那一串code保存好2:如果要恢复双重认证,点击two-factor recovery来恢复3:之前保存的这些code用一行即可,不要把整个复制进来4: 最后一招,实在不行就给Github发邮件,哈哈。如下图所示如果更换手机或者手机重新安装了身份验证器,可以点击下面按钮恢复。注意:重新安装身份验证器或换手机时,网页端的GitHub不要退出,以免后续恢复麻烦。请关注我的站点:https://ww

2021-07-29 18:20:41 3065

原创 WebRTC视频会议H5(React+Golang+ION-SFU)

WebRTC技术经过多年的发展,已经非常成熟,它提供了HTML5流媒体技术的一整套解决方案及API,可用来实现一对一视频通话,视频会议,远程教育以及远程会诊等应用。尤其现在5G时代已经到来,WebRTC技术为必备技能。本课程为WebRTC的实战案例课程,使用React+Golang+WebRTC实现视频会议系统。使用React实现浏览器PC Web,Golang实现房间管理及转发消息。流媒体采用RTC领域流行开源流媒体ion-sfu.讲师介绍讲师:亢少军资深开发者,创业者。专注于视频通讯技术领域。国

2021-07-13 11:13:19 2013

转载 ion-sfu架构与模块

上面给一个简单架构图,很多细节表示不出来,需要看代码。1、简介得益于GO,ion-sfu整体代码精简,拥有极高的开发效率。结合现有SDK使用,可以避免很多坑:ion-sdk-js等。ion-sfu基于pion/webrtc,所以代码风格偏标准webrtc,比如:PeerConnection因为是使用了标准API,熟悉了之后很容易看懂其他工程,比如:ion-sdk-go/js/flutter。这样从前到后,整体门槛都降低了。2、工程组织这里给出主要模块列表├── Makefile //用来.

2021-06-19 14:18:32 1716

转载 ION的来由和发展

ION的来由和发展项目地址:https://github.com/pion/ionstar 数量:2.5K一、行业发展作为ION的发起人之一,同时也是PION的核心开发者。作者一直从事互联网直播和在线教育行业的研发,一直在关注流媒体开源项目的发展,也一直关注LVS等行业论坛。行业内有个趋势:传统RTMP+FLV+FLASH的技术栈在逐渐向RTMP+FLV+RTC,甚至纯RTC发展。二、语言发展开发语言是底子,底子好才能发展好;语言决定项目的整体发展和方方面面的成本和效率;比如,CNCF里毕

2021-06-16 17:31:18 494

原创 如何运行PION/ION(分布式流媒体系统)

相信很多小伙伴不知道如何将PION/ION项目跑起来,这里整理了一些具体步骤,希望能帮助到大家。依赖基础环境nats.ioredisGolang (latest version)1. 安装 Nats.ioMacOS> brew update> brew install nats-serverWindows> choco install nats-serverLinux> curl -L https://github.com/nats-io/nats-s

2021-04-19 14:46:33 2215 14

原创 Flutter+Dart入门与实战套餐(含电子商城系统)

套餐(全): https://ke.qq.com/course/package/23970?tuin=2c77f7f0课程目标掌握Dart语言及Flutter跨平台开发技术适用人群零基础,小白,Dart,Flutter开发爱好者课程简介课程中包含大量应用示例,不仅可以学会理论知识还可以灵活应用。课程中的示例基于Flutter环境开发,在学习到Dart语言知识的同时还学会了Flutter框架技术。课程中通过接近商业的一个商城案例详细阐述了如何使用Flutter开发App,内容完整步骤清晰,提供

2021-03-26 14:19:10 879 2

原创 WebRTC通话原理-信令服务-连接建立

作者: 亢少军信令服务从上面我们知道了2个客户端协商媒体信息和网络信息,那怎么去交换?是不是需要一个中间商去做交换?所以我们需要一个信令服务器(Signal server)转发彼此的媒体信息和网络信息。我们在基于WebRTC API开发应用(App)时,可以将彼此的App连接到信令服务器(Signal Server,一般搭建在公网,或者两端都可以访问到的局域网),借助信令服务器,就可以实现SDP媒体信息及Candidate网络信息交换。信令服务器不只是交互媒体信息SDP和网络信息Candidate,

2021-03-24 13:43:10 802

原创 WebRTC通话原理-网络协商-NAT-ICE-STUN-TURN

作者: 亢少军彼此要了解对方的网络情况,这样才有可能找到一条相互通讯的链路。需要做以下两个处理。获取外网IP地址映射。通过信令服务器(signal server)交换“网络信息”。理想的网络情况是每个浏览器的电脑都是公网IP,可以直接进行点对点连接。如图所示。实际情况是我们的电脑和电脑之间都是在某个局域网中并且有防火墙,需要NAT(Network Address Translation,网络地址转换),如图所示。在解决WebRTC使用过程中的上述问题的时候,我们需要用到STUN和TURN

2021-03-24 13:38:51 819

原创 WebRTC通话原理-SDP协议

作者: 亢少军会话描述协议Session Description Protocol (SDP) 是一个描述多媒体连接内容的协议,例如分辨率,格式,编码,加密算法等。所以在数据传输时两端都能够理解彼此的数据。本质上,这些描述内容的元数据并不是媒体流本身。从技术上讲,SDP并不是一个真正的协议,而是一种数据格式,用于描述在设备之间共享媒体的连接。SDP包含内容非常多,如下面内容所示为一个SDP信息。//版本v=0//<username> <sess-id> <sess-v

2021-03-23 11:31:59 443

原创 WebRTC通话原理-媒体协商

作者: 亢少军首先两个客户端(Peer-A和Peer-B)想要创建连接,一般来说需要有一个双方都能访问的服务器来帮助它们交换连接所需要的信息。有了交换数据的中间人之后,它们首先要交换的数据是Session Description Protocol(SDP),这里面描述了连接双方想要建立怎样的连接。彼此要了解对方支持的媒体格式。比如,Peer­A端可支持VP8、H264多种编码格式,而Peer­B端支持VP9、H264,要保证二端都正确的编解码,最简单的办法就是取它们的交集H264。如下图所示。有一个

2021-03-22 11:10:56 655

原创 WebRTC通话原理-基本流程

WebRTC通话最典型的应用场景就是一对一音视频通话,如微信或QQ音视频聊天。通话的过程是比较复杂的,这里我们简化这个流程,把最主要的步骤提取出来,如图所示。通话原理基本流程假定通话的双方为Peer-A和Peer-B。双方要建立起通话,主要的步骤如下所示。1 PeerA与PeerB通过信令服务器进行媒体协商,如双方使用的音视频编码格式。双方交换的媒体数据由SDP协议描述。2 PeerA与PeerB通过STUN服务器获取到各自自己的网络信息,如IP和端口。然后通过信令服务器转发互相交换各种的网络信息

2021-03-20 09:32:43 1037

原创 RTMP视频直播系统(PC网页/微信小程序/播放器/流媒体)毕业设计

课程简介带领大家一步步搭建视频直播及文字聊天系统。学习地址:https://ke.qq.com/course/1708578?tuin=2c77f7f0所学知识:掌握RTMP协议理论掌握HLS协议理论掌握OBS推流工具使用掌握播放器配置及使用掌握流媒体Nginx-Rtmp安装配置及使用掌握流媒体集群配置方法理解连麦原理理解并掌握源服务器朝边缘服务分发技术掌握React实现IM客户端技术掌握Node实现IM服务端技术熟练使用WebSocket收发消息讲师介绍亢少军展翼科技联合

2021-03-18 10:25:05 957

原创 WebRTC一对一视频通话(Flutter+React+Go+WebRTC方案)

一对一视频通话学习: https://ke.qq.com/course/package/29474?tuin=2c77f7f0WebRTC交流学习群:425778886WebRTC技术经过多年的发展,已经非常成熟,它提供了HTML5流媒体技术的一整套解决方案及API,可用来实现一对一视频通话,视频会议,远程教育以及远程会诊等应用。尤其现在5G时代已经到来,WebRTC技术为必备技能。课程介绍:本课程为WebRTC音视频开发系列课程,包含了PC Web iOS Android终端以及中转及信令服务器的

2021-03-17 09:06:57 1989

原创 WebRTC音视频开发-多对多视频通话SFU方案(Flutter+React+Go+WebRTC)

学习地址:https://ke.qq.com/course/3134372?tuin=2c77f7f0WebRTC技术经过多年的发展,已经非常成熟,它提供了HTML5流媒体技术的一整套解决方案及API,可用来实现一对一视频通话,视频会议,远程教育以及远程会诊等应用。尤其现在5G时代已经到来,WebRTC技术为必备技能。本课程为WebRTC的实战案例课程,使用Flutter+React+Golang+WebRTC实现多对多通话的完整解决方案。使用React实现浏览器PC Web,Flutter实现移

2020-12-18 14:40:55 2002 3

原创 第11章对象-Dart-对象类型

防采集标记:亢少军老师的课程和资料//object_type_sample.dart文件void main(){ //声明并实例化person对象 Person person = Person(); print("person.runtimeType:" + person.runtimeType.toString()); //使用is判断是否为Person类 if(per...

2020-02-27 18:29:46 601 1

原创 第11章对象-Dart-对象为空示例

防采集标记:亢少军老师的课程和资料//object_null_sample.dart文件void main(){ //声明person对象 Person person = null; //实例化person对象 person = Person(); //判断对象是否为null if(person != null){ //调用成员方法 person.ru...

2020-02-27 18:29:46 2346

原创 第11章对象-Dart-工厂构建方法

防采集标记:亢少军老师的课程和资料//object_constructor_factory.dart文件void main(){ Logger logger = Logger('Dart'); logger.log('调用工厂构造方法');}//日志类class Logger { //日志名称 final String name; //日志缓存_cache用于存储...

2020-02-27 18:29:46 588

原创 第13章抽象类与接口-abstract_database_operate

防采集标记:亢少军老师的课程和资料//abstract_database_operate.dart文件void main() { //声明类型为DataBaseOperate 实例化类型为DataBaseOperateImpl DataBaseOperate db = DataBaseOperateImpl(); //调用成员方法 db.insert(); db.del...

2020-02-27 18:29:46 368

原创 第13章抽象类与接口-abstract_shape

防采集标记:亢少军老师的课程和资料//abstract_shape.dart文件void main(){ //创建正方形类对象 Square square = Square(5,4); print("正方形的面积为:"+square.area().toString()); //创建三角形类对象 Triangle triangle = Triangle(2,5); pr...

2020-02-27 18:29:46 702

原创 第18章异步编程-bloc-自定义状态管理示例-bloc_base

防采集标记:亢少军老师的课程和资料//stream_bloc_base.dart文件//定义Bloc抽象类abstract class BlocBase { //定义销毁方法,子类必需实现此方法 void dispose();}Dart交流群:1046954554Flutter开源项目请关注: https://github.com/kangshaojun @作者: 亢少军 ...

2020-02-27 18:29:45 298

原创 第10章面向对象基础-person

防采集标记:亢少军老师的课程和资料//person.dart文件void main(){}//类名为Person 继承Object//class Person extends Object {// //类体//}//Person.dart//类名为Person 继承Objectclass Person extends Object { //成员变量 Stri...

2020-02-27 18:29:45 292

原创 第11章对象-object_call_sample

防采集标记:亢少军老师的课程和资料//object_call_sample.dart文件void main(){ //声明person对象 Person person = null; //实例化person对象 person = Person(); //判断对象是否为null if(person != null){ //调用成员方法 print("成员...

2020-02-27 18:29:45 287

原创 第11章对象-object_constructor_redirect

防采集标记:亢少军老师的课程和资料//object_constructor_redirect.dart文件void main(){ //实例化对象 调用重定向构造方法 GoodInfo goodInfo = GoodInfo.redirect('000003'); //打印输出Json数据 print(goodInfo.toJson());}//商品信息class G...

2020-02-27 18:29:45 251

原创 第11章对象-object_named_constructor

防采集标记:亢少军老师的课程和资料//object_named_constructor.dart文件void main(){ //调用Person的命名构造方法 Person p = Person.run();}class Person{ //姓名 String name; //年龄 int age; //默认构造方法 Person(this.name,...

2020-02-27 18:29:45 249

原创 第11章对象-object_constructor_good_info

防采集标记:亢少军老师的课程和资料//object_constructor_good_info.dart文件void main(){ //调用构造方法GoodInfo实例化商品信息类 GoodInfo goodInfo = GoodInfo( '000001', 999, 'http://192.168.2.168/images/1.png', ...

2020-02-27 18:29:45 318

原创 第18章异步编程-stream_skip

防采集标记:亢少军老师的课程和资料//stream_skip.dart文件import 'dart:async';void main(){ //创建Stream,跳过指定个数元素 testSkip();}void testSkip() async { //时间间隔为1秒 Duration interval = Duration(seconds: 1); //每隔...

2020-02-27 18:29:44 278

原创 第18章异步编程-async_future_static_wait

防采集标记:亢少军老师的课程和资料//async_future_static_wait.dart文件import 'dart:async';void main() { print("main start"); //任务一 Future task1 = Future((){ print("task 1"); return 1; }); //任务二 ...

2020-02-27 18:29:44 464

原创 第18章异步编程-bloc-自定义状态管理示例-main

防采集标记:亢少军老师的课程和资料//stream_bloc_main.dart文件import 'package:flutter/material.dart';import 'blocs/bloc_counter.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget { @overr...

2020-02-27 18:29:44 342

原创 第18章异步编程-bloc_demo-blocs-bloc_base

防采集标记:亢少军老师的课程和资料//stream_bloc_base.dart文件//定义Bloc抽象类abstract class BlocBase { //定义销毁方法,子类必需实现此方法 void dispose();}Dart交流群:1046954554Flutter开源项目请关注: https://github.com/kangshaojun @作者: 亢少军 ...

2020-02-27 18:29:44 276

原创 第18章异步编程-bloc-自定义状态管理示例-counter

防采集标记:亢少军老师的课程和资料//stream_bloc_counter.dart文件import 'dart:async';import 'bloc_base.dart';//继承BlocBaseclass BlocCounter extends BlocBase { //初例化StreamController,数据类型为int final _controller =...

2020-02-27 18:29:44 285

原创 第18章异步编程-bloc-自定义状态管理示例-BlocProvider

防采集标记:亢少军老师的课程和资料//stream_bloc_provider.dart文件import 'package:flutter/widgets.dart';import 'bloc_base.dart';//返回类型Type _typeOf() => T;//BlocProvider是一个有状态的组件,泛型类型为BlocBase的子类class BlocProvi...

2020-02-27 18:29:44 1162

原创 第18章异步编程-stream_length

防采集标记:亢少军老师的课程和资料//stream_length.dart文件import 'dart:async';void main(){ //创建Stream,并统计事件的总数量 testStreamLength();}void testStreamLength() async { //时间间隔为1秒 Duration interval = Duration(...

2020-02-27 18:29:43 332

原创 第18章异步编程-stream_create_from_iterable

防采集标记:亢少军老师的课程和资料//stream_create_from_iterable.dart文件import 'dart:async';void main(){ //从一个集合创建Stream createStream();}createStream() async{ print("开始测试"); //从集合创建Stream Stream stream...

2020-02-27 18:29:43 287

原创 第18章异步编程-stream_to_list

防采集标记:亢少军老师的课程和资料//stream_to_list.dart文件import 'dart:async';void main(){ //创建Stream,将流中的数据放在List里 testToList();}void testToList() async { //时间间隔为1秒 Duration interval = Duration(seconds...

2020-02-27 18:29:43 354

原创 第18章异步编程-async_get_async_data

防采集标记:亢少军老师的课程和资料//async_get_async_data.dart文件import 'package:dio/dio.dart';import 'dart:io';import 'dart:async';void main(){ //网络请求参数 var params = {'id':'000001'}; //调用网络请求方法 Future fu...

2020-02-27 18:29:43 586

原创 第18章异步编程-stream_stream_builder

防采集标记:亢少军老师的课程和资料//stream_stream_builder.dart文件import 'dart:async';import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget { @override Wid...

2020-02-27 18:29:42 850

原创 第18章异步编程-async_list_refresh

防采集标记:亢少军老师的课程和资料//async_list_refresh.dart文件import 'package:flutter/material.dart';import 'dart:async';void main() => runApp(MyApp());class MyApp extends StatelessWidget { @override Widge...

2020-02-27 18:29:42 380

原创 第18章异步编程-async_delayed

防采集标记:亢少军老师的课程和资料//async_delayed.dart文件import 'dart:async';import 'dart:io';void main() { print("main start"); //延迟1秒后执行任务 Future.delayed(Duration(seconds:1),(){ print('延迟任务'); }...

2020-02-27 18:29:42 275

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除