组播屏幕共享、Android屏幕共享开发小结

           因近期项目需要,实现了一套多种网络拓扑、多种应用场景的多平台屏幕共享系统,包括组播屏幕共享、服务器转发屏幕共享、P2P屏幕共享,暂支持Windows屏幕共享给Windows,Windows屏幕共享给Android等,后续加入android、IOS的相互共享。下文进行简单的总结,具体细节请参考 www.mediapro.cc

  • 应用场景

   1、一对一屏幕共享

                                      

同一局域网内,发送端将自身屏幕和音频共享给指定的接收端,常用于办公会议、游戏电影投屏等场合。

系统通过集成QOS-FEC-NACK传输库点对点版SDK实现对弱网的支持(SDK支持Windows\Android\嵌入式Linux\IOS),系统总体延时可控制在120ms以内。注意SDK支持全双工通讯,本应用场景中仅使用到单向的传输。

      2、一对多组播屏幕共享

同一局域网内,发送端将自身屏幕和音频共享给一组接收端,常用于教学等场合。

优点:通过组播技术的使用,无需架设转发服务器即可实现一对多分发。

缺点:由于WIFI(802.11)网络对于组播和广播在数据链路层无法提供类似单播的保障,WIFI下的组播容易出现较高的丢包率,因此本方案更适合有线网络。

                               

       系统通过集成QOS-FEC传输库点对点版SDK实现对弱网的支持(SDK支持Windows\Android\嵌入式Linux\IOS),系统总体延时可控制在120ms以内。因为数据流是单向因此无法使用NACK丢包重传机制。

       3、一对多公网屏幕共享

        当需要实现异地跨公网一对多屏幕共享时,就需要在公网上架设媒体转发服务器。SRTP-Server是在RTP-FEC-QOS传输层基础上建立了一套轻量级RTP直播转发服务器集群,可用于一对多、多对多等场合的音视频实时互动,客户端支持全平台包括PC客户端、浏览器、Android、IOS、嵌入式Linux,关于SRTP-Server更详细介绍请移步:www.mediapro.cc

        SRTP-Server有集群版本和非集群版本,集群版本用于同一房间大规模的公开课等场合,非集群版本则用于同一个房间数十人规模的屏幕共享(房间数目、总的接收端数目受限于服务器带宽、内存、CPU)。

                        

       客户端(包括发送端和接收端)通过集成SRTP-Server配套的SDK可实现同一房间多路流直播,比如发送屏幕共享的同时发送摄像头数据。SRTP-Server基于房间模式,不同的房间相互隔离。

                                      

      通过公网服务器转发的方式可实现异地多人屏幕共享,但也存在无法避免的缺点:

      A、系统延时受网络线路影响较大,网络条件较好的阿里云服务器上,延时可以控制在300ms内。

      B、服务器带宽成本随用户数、视频码率而增长。

      当然本系统也可部署到内网,实现一对多的WIFI屏幕共享,解决组播对WIFI支持不佳的问题。

       4、一对一公网P2P屏幕共享

       公网上当仅需要一对一的屏幕共享时,我们可以使用P2P技术来节省服务器带宽成本。SRTP-Server-P2P版转发服务器支持客户端一对一P2P双向传输。SDK在P2P不成功或者丢包率较高的情况下会自动切换回服务器转发模式,实现了STUN和TURN的功能。

                                   

      P2P方式大幅节省了服务器带宽成本,但也对服务质量产生了一定影响,体现在以下几点:

      A、不同运营商的客户端之间P2P即便可以打通,或许可以承载低码率的视频通话业务,但无法承载高码率的屏幕共享业务。

      B、因网络原因在P2P和转发之间切换对用户的使用体验产生影响。

  • 一些注意事项

  • 组播需要关闭发送端的本地回环模式,降低发送端开销。
  • 对于内网两台机器走P2P时应使用内网地址通讯而不用对方的出口IP,虽然二者均可以互通,但内网IP效率更高。
  • 由于屏幕共享码率较高,尽量使用非阻塞的socket,设置socket的系统缓存到512KB以上,避免因socket缓存原因引入系统丢包。
  • 使用微软WASAPI采集扬声器音频时,会出现无音频播放时,采集回调无调用的情况,这对于直播没有影响,但会影响录制的TS素材。比如录制文件一开始没有音频数据仅有视频数据,则某些播放器会直接跳到存在音频的部分播放。解决的方法是:发送端自行输出静音数据。
  • 因为屏幕共享对于分辨率要求较高,高分辨率编码将对发送端机器形成压力,建议优先使用硬编码,若不支持再使用X264。PC上目前主流硬编码有Intel CPU自带的核心显卡QsvEncode和英伟达显卡带的NviEncode。高版本的ffmpeg对二者提供了支持,不过采集到的编码码流需要进行统一过滤处理,比如过滤直播中无用的NAL_AUD和NAL_FILLER_DATA,前者因为我们UDP自身加入了边界,后者纯属冗余数据,经过这样处理可以大幅节省带宽。
  • 由于屏幕共享码率较高,FEC处理需要开启动态Group模式,在不增加冗余度的情况下增强连续丢包的抵抗力。
  • 屏幕画面变化相比摄像头画面变化来得剧烈,使用硬编码时码率波动更大,发送端可开启Smooth平滑发送,接收端视业务情况开启接收缓存。

  组播接收端启动界面:

        

  发送端启动界面:

                                    

  屏幕共享客户端、服务器相关执行程序、硬编码封装源码等可从github获取:https://github.com/waterfoxfox

https://github.com/waterfoxfox/MulticastSDK​​​​​​​

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
作者简介   杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件行业协会游戏软件分会(CGIA)认证及国际游戏开发教育联合会国际认证。曾经领导和参与《三国群英传说》、《大航海传奇》、《美少女养成计划》等经典游戏的开发。 编辑本段 图书目录   前言   第一部分 准备篇   第1章 Android开发简介   1.1 Android基本概念   1.1.1 Android简介   1.1.2 Android的系统构架   1.1.3 Android应用程序框架   1.2 OMS介绍   1.2.1 OPhone介绍   1.2.2 Widget介绍   1.3 小结   第2章 Android开发环境搭建   2.1 Android开发准备工作   2.2 开发包及其工具的安装和配置   2.2.1 安装JDK和配置Java开发环境   2.2.2 Eclipse的安装与汉化   2.2.3 SDK和ADT的安装和配置   2.3 创建第一个Android项目——HeUoAndroid   2.3.1 创建HelloAndroid项目   2.3.2 运行HelloAndroid及模拟器的使用   2.3.3 调试HelloAndroid   2.4 小结   第二部分 基础篇   第3章 Android程序设计基础   3.1 Android程序框架   3.1.1 Android项目目录结构   3.1.2 Android应用解析   3.2 Android的生命周期   3.3 Android程序U设计   3.4 小结   第4章 用户界面开发   4.1 用户界面开发详解   4.1.1 用户界面简介   4.1.2 事件处理   4.2 常用控件应用   4.2.1 文本框(Textiew)   4.2.2 列表(ListView)   4.2.3 提示(T0ast)   4.2.4 编辑框(EditText)   4.2.5 单项选择(RadioGroup、RadioButton   4.2.6 多项选择(CheckBox)   4.2.7 下拉列表(Spinner)   4.2.8 自动提示(AutoComplete.TextⅥew)   4.2.9 日期和时间(DatePicker、TimePicker)   4.2.10 按钮(Button)   4.2.1l 菜单(Menu)   4.2.12 对话框(Dialog)   4.2.13 图片视图(ImageView)   4.2.14 带图标的按钮(ImageButton)   4.2.15 拖动效果(Gallery)   4.2.16 切换图片(hmgeSwilcher)   4.2.17 网格视图(GridView)   4.2.18 卷轴视图(ScrollView)   4.2.19 进度条(ProgressBar)   4.2.20 拖动条(SeekBar)   4.2.21 状态栏提示(Notification、NotificationManager)   4.2.22 对话框中的进度条(ProgressDialog)   4.3 界面布局   4.3.1 垂直线性布局   4.3.2 水平线性布局   4.3.3.相对布局(RelativeLayout)   4.3.4 表单布局(TableLayout)   4.3.5 切换卡(TabWidget)   4,4 小结   第5章 Android游戏开发   5.1 Android游戏开发框架   5.1.1 View类开发框架   5.1.2 SurfaceView类开发框架   5.2 Graphics类开发   5.5.1 Paint和Color类介绍   5.2.2 Canvas类介绍   5.2.3 几何图形绘制   5.2.4 字符串绘制   5.2.5 图像绘制   5.2.6 图像旋转   5.2.7 图像缩放   5.2.8 图像像素操作   5.2.9 Shader类介绍   5.2.10 双缓冲技术   5.2.11 全屏显示   5.2.12 获得屏幕属性   5.3 动画实现   5.3.1 Tween动画   5.3.2 Frame动画   5.3.3 GIF动画放   5.4 小结   第6章 Android数据存储   6.1 Android数据存储初探   6.2 数据存储之Shared Preferences   6.3 数据存储之Files   6.4 数据存储之Network   6.5 Android数据库编程   6.5.1 SQLite简介   6.5.2 SQLite编程详解   6.5.3 SQLiteOpenHelper应用   6.6 数据共享(ContentProviders)   6.7 小结   第7 章多媒体开发   7.1 多媒体开发详解   7.1.1 Open Core   7.1.2 MediaPlayer   7.1.3 MediaRecorder   7.2 放音乐   7.3 放视频   7.4 录制歌曲   7.5 相机设置   7.6 闹钟设置   7.7 铃声设置   7.8 小结   第8章 网络与通信   8.1 网络通信基础   8.1.1 无线网络技术   8.1.2 Android网络基础   8.2 HTTP通信   8.2.1 HttpURLConnection接口   8.2.2 HttpClient接口   8.2.3 实时更新   8.3 Socket通信   8.3.1 Socket基础   8.3.2 Socket应用(简易聊天室)   8.4 网络通信的中文乱码问题   8.5 WebKit应用   8.5.1 WebKjt概述   8.5.2 WebView浏览网页   8.5.3 WebView与Javascript   8.6 WtFi介绍   8.7 蓝牙   8.8 小结   第9章 Android特色开发   9.1 传感器   9.2 语音识别   9.3 GoogleMap   9.3.1 GoogleMap概述   9.3.2 准备工作   9.3.3 GoogleMapAPI的使用   9.3.4 定位系统   9.4 桌面组件   9.4.1 快捷方式   9.4.2 实时文件夹   9.4.3 Widget开发   9.5 账户管理   9.6 小结   第三部分 实例篇   第10章 Android应用开发实例   10.1 情境模式   10.2 文件管理器   10.3 通讯录   10.4 音乐放器   10.5 天气预报   10.6 个人地图   10.7 Widget日历   10.8 小结   第11 章Android游戏开发实例   11.1 手机游戏开发简介   11.2 游戏框架设计   11.3 地图设计   11.4 主角设计   11.5 图层管理器   11.6 游戏音效   11.7 游戏存档   11.8 小结   第四部分 高级篇   第12章 AndroidOpenGL开发基础   12.1 OpenGL简介   12.2 多边形   12.3 颜色   12.4 旋转   12.5 3D 空间   12.6 纹理映射   12.7 光照和事件   12.8 混合   12.9 小结   第13章 AndroidOpenGL综合应用   13.1 移动图像   13.2.3D 世界   13.3 飘动的旗帜   13.4 显示列表   13.5 雾   13.6 粒子系统   13.7 蒙版   13.8 变形   13.9 小结   第14章 游戏引擎实现   14.1 游戏引擎介绍   14.1.1 什么是引擎   14.1.2 引擎的进化   14.1.3 常见的游戏引擎   14.1.4 Android游戏引擎   14.2 游戏引擎结构   14.2.1 游戏引擎原理   14.2.2 游戏引擎定位   14.2.3 游戏引擎框架   14.3 游戏引擎设计   14.3.1 游戏引擎结构和功能设计   14.3.2 游戏引擎设计注意事项   14.4 游戏引擎实现   14.4.1 Activity类实现   14.4.2 流程控制和线程   14.4.3 游戏对象与对象管理   14.4.4 图形引擎   14.4.5 物理引擎   14.4.6 事件模块   14.4.7 工具模块   14.4.8 脚本引擎、音效模块、网络模块   14.5 小结   第15章 优化技术   15.1 优化的基本知识   15.1.1 如何书写出优秀代码   15.1.2 编程规范   15.2 程序性能测试   15.2.1 计算性能测试   15.2.2 内存消耗测试   15.3 初级优化   15.4 高级优化   15.5 Android高效开发   15.6 AndroidUI优化   15.7 其他优化   15.7.1 zipalign   15.7.2 图片优化   15.8 小结   第五部分 扩展篇   第16章 Android NDK开发   16.1 AndroidNDK简介   16.2 安装和配置NDK开发环境   16.2.1 系统和软件需求   16.2.2 NDK开发环境搭建   16.2.3 编译第一个NDK程序   16.3 AndroidNDK开发   16.3.1 JNI接口设计   16.3.2 使用C\C++实现本地方法   16.3 编译C\C++代码   16.4 AndroidNDK中使用0penGL   16.5小结   第17章 Android脚本环境   17.1 Android脚本环境简介   17.2 Android脚本环境安装   17.3如何编写Android脚本程序   17.4小结
Web屏幕共享语音是指在Web上进行屏幕共享的同时进行语音通信。这种技术使得人们可以远程协作和交流,无论他们身处何地。通过屏幕共享,用户可以将他们的计算机屏幕直接显示在其他用户的屏幕上,使得其他用户能够实时看到他们所做的操作。 与此同时,语音通信可以让用户通过麦克风和扬声器或耳机与其他参与者进行实时语音交流。这样一来,用户不仅可以看到其他人的屏幕,还可以直接与他们进行对话和讨论。这对于远程工作、远程教育、团队协作和远程技术支持等应用场景都非常有用。 Web屏幕共享语音技术的优势在于它的便捷性和易用性。无需下载额外的软件或应用程序,只需通过Web浏览器即可实现屏幕共享和语音通话功能。这种技术使得参与者之间的沟通更加方便快捷,节省了安装和设置软件的时间和精力。 与此同时,Web屏幕共享语音也可以提高工作效率。通过远程屏幕共享,用户可以直接演示和展示自己的工作内容,无论是产品演示、报告展示还是技术教学。同时,语音通信可以实时解答问题、交流意见和进行实时协作,提高团队合作的效率和质量。 总之,Web屏幕共享语音是一种通过Web浏览器进行屏幕共享和语音通信的技术。它的便捷性和易用性使得远程协作和交流变得更加便捷和高效,可以广泛应用于远程工作、远程教育、团队协作和远程技术支持等场景中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mediapro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值