基于智慧教室|无纸化会议的新选择:RTMP解决方案

基于智慧教室或是会议的技术方案,一般主要是涉及到屏幕采集和推送,整体技术方案这块,一般建议走RTMP,说到这里,好人开发者提到,市面上也有RTSP的技术方案,甚至RTSP组播方案,这块,大牛直播SDK Github 也做过相关对比,总的来说60人智慧教室或类似同屏场景下,最可靠的还是RTMP的解决方案(不赘述,具体可自行测试对比)。

有人说,RTMP延迟大,这种说法,相对片面,好多是由于推拉流模块本身问题导致(如果服务器系NIGNX或SRS,基本可排除服务器转发导致的大时延,不要再赖服务器了),从我们官方和实际场景来看,RTMP整体技术方案,延迟可做到1秒内,毫秒级。

整体设计方案如下

注意事项

1. 组网:无线组网,需要好的AP模块才能撑得住大的并发流量,推送端到AP,最好是有线网链接;

2. 服务器部署:如果Windows平台,可以考虑NGINX,如果是Linux,可以考虑SRS或NGINX,服务器可以和Windows平台的教师机部署在一台机器;

3. 教师端:如教师有移动的PAD,可以直接推到RTMP服务器,然后共享出去;

4. 学生端:直接拉取RTMP流播放即可;

5. 教师和学生互动:学生端如需作为示范案例,屏幕数据共享给其他同学,只需请求同屏,数据反推到RTMP服务器,其他学生查看即可。

6. 扩展监控:如果需要更进一步的技术方案,如教师端想监控学生端的屏幕情况,可以有两种方案,如学生端直接推RTMP过来,或者,学生端启动内置RTSP服务,教师端想看的时候,随时看即可(亦可轮询播放)。

以下分平台介绍相关配置选项

Windows平台RTMP推送端

对应DEMO:SmartPublisherDemo.exe

1. 如果采集屏幕,只要采集部分区域的话,可以点击“选取屏幕区域”按钮,选择需要采集的区域,采集推送过程中,可以移动采集区域;

2. 如果是高分屏(如有些采集设备,是4K屏,原始分辨率过高),用户又不想推这么高的分辨率的话,可以选中“缩放屏幕大小”,并指定缩放比例,可以先缩放,后编码推送数据;

3. 设置采集帧率:如果是PPT/Word文档类,一般8-12帧足矣,如果是电影之类,可以设置到20-30帧不等,关键帧间隔一般设置到帧率的2-4倍,屏幕推送的话,建议平均码率模式;

4. 如果需要采集电脑端输出的声音,可以选中“采集扬声器”,如果需要采集外部麦克风的音频,选择“采集麦克风”即可,并选择对应的采集设备;

5. 设置下推送的RTMP URL,然后,点击“推送”,就可以了;

6. 如果想预览推送出去的数据,点击“预览”即可,想停止预览的话,点击“停止预览”即可。

Android平台RTMP屏幕推送端

对应工程:SmartServicePublisherV2

需要注意的事项:

1. Android 8.0及以上版本设备,需要加入省电优化白名单,6.0以上版本,需要动态获取audio权限,具体代码如下:

        //加入省电优化白名单,以免8.0及以上版本设备后台运行超过一分钟被自动停掉//if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)if (Build.VERSION.SDK_INT >=26){if(!isIgnoringBatteryOptimizations()){gotoSettingIgnoringBatteryOptimizations();}}//6.0及以上版本,动态获取Audio权限if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){RequestAudioPermission();}//拉起请求加入省电白名单弹窗private void gotoSettingIgnoringBatteryOptimizations() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {try {Intent intent = new Intent();String packageName = getPackageName();intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);intent.setData(Uri.parse("package:" + packageName));startActivityForResult(intent, REQUEST_IGNORE_BATTERY_CODE);} catch (Exception e) {e.printStackTrace();}}}//动态获取Audio权限private void RequestAudioPermission(){if (PackageManager.PERMISSION_GRANTED ==  ContextCompat.checkSelfPermission(this.getApplicationContext(), android.Manifest.permission.RECORD_AUDIO)){}else {//提示用户开户权限音频String[] perms = {"android.permission.RECORD_AUDIO"};ActivityCompat.requestPermissions(this, perms, RESULT_CODE_STARTAUDIO);}}

2. 持续的补帧策略,防止屏幕不动,没数据下去;

3.  如果需要传部分区域下去,可以用 SmartPublisherOnCaptureVideoClipedRGBAData() 接口;

4. 横竖屏切换,上层无需过问,底层会自动切。

iOS平台RTMP屏幕推送端

对应工程: SmartServiceCameraPublisherV2

注意事项:ReplayKit2 的直播扩展目前是有50M的内存使用限制,超过此限制系统会直接杀死扩展进程,因此 ReplayKit2 上建议推流分辨率和帧率、码率不要太高。

以下是核心processSampleBuffer() 处理,iOS 11.0以上 加入了横竖屏自动切换适配:

- (void)processSampleBuffer:(CMSampleBufferRef)sampleBufferwithType:(RPSampleBufferType)sampleBufferType {CGFloat cur_memory = [self GetCurUsedMemoryInMB];if( cur_memory > 20.0f){//NSLog(@"processSampleBuffer cur: %.2fM", cur_memory);return;}switch (sampleBufferType) {case RPSampleBufferTypeVideo:{if (!CMSampleBufferIsValid(sampleBuffer))return;NSInteger rotation_degress = 0;//11.1以上支持自动旋转#ifdef __IPHONE_11_1if (UIDevice.currentDevice.systemVersion.floatValue > 11.1) {CGImagePropertyOrientation orientation = ((__bridge NSNumber*)CMGetAttachment(sampleBuffer, (__bridge CFStringRef)RPVideoSampleOrientationKey , NULL)).unsignedIntValue;//NSLog(@"cur org: %d", orientation);switch (orientation){//竖屏case kCGImagePropertyOrientationUp:{rotation_degress = 0;}break;case kCGImagePropertyOrientationDown:{rotation_degress = 180;break;}case kCGImagePropertyOrientationLeft: {//静音键那边向上 所需转90度rotation_degress = 90;}break;case kCGImagePropertyOrientationRight:{//关机键那边向上 所需转270rotation_degress = 270;}break;default:break;}}#endif//NSLog(@"RPSampleBufferTypeVideo");if(_smart_publisher_sdk){//[_smart_publisher_sdk SmartPublisherPostVideoSampleBuffer:sampleBuffer];[_smart_publisher_sdk SmartPublisherPostVideoSampleBufferV2:sampleBuffer rotateDegress:rotation_degress];}//NSLog(@"video ts:%.2f", CMTimeGetSeconds(CMSampleBufferGetPresentationTimeStamp(sampleBuffer)));}break;case RPSampleBufferTypeAudioApp://NSLog(@"RPSampleBufferTypeAudioApp");if (CMSampleBufferDataIsReady(sampleBuffer) != NO){if(_smart_publisher_sdk){NSInteger type = 2;[_smart_publisher_sdk SmartPublisherPostAudioSampleBuffer:sampleBuffer inputType:type];}}//NSLog(@"App ts:%.2f", CMTimeGetSeconds(CMSampleBufferGetPresentationTimeStamp(sampleBuffer)));break;case RPSampleBufferTypeAudioMic://NSLog(@"RPSampleBufferTypeAudioMic");if(_smart_publisher_sdk){NSInteger type = 1;[_smart_publisher_sdk SmartPublisherPostAudioSampleBuffer:sampleBuffer inputType:type];}//NSLog(@"Mic ts:%.2f", CMTimeGetSeconds(CMSampleBufferGetPresentationTimeStamp(sampleBuffer)));break;default:break;}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻量级RTSP服务模块和RTSP推流模块适用场景区别

好多开发者一直搞不清轻量级RTSP服务SDK和RTSP推流SDK的区别(Github下载地址),以下是相关区别: 1. 轻量级RTSP服务模块:轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服务,实现本…

钉钉怎么投屏到设备

钉钉想要使用投屏,该怎么使用呢?下面我们就来看看钉钉投屏的教程。 1、打开钉钉的聊天对话框,在右上角个人中心头像左边有三个按钮,点击中间的投屏按钮,根据系统提示来设置投屏选项。 钉钉怎么投屏到设备? 2、点击之后需要输…

如何实现多路海康大华等RTSP数据转RTMP推送

一个好的转发模块,首先要低延迟!其次足够稳定、灵活、有状态反馈机制、资源占用低,跨平台,最好以接口形式提供,便于第三方系统集成。 以Windows平台为例,我们的考虑的点如下 1. 拉流:通过RTSP…

如何在RTSP/RTMP直播过程中加入SEI扩展数据发送和接收解析

在直播系统中,除了直播音视频之外,有时候还想从主播端发布文本信息等,这些信息可以不通过视频传输通道发送给用户播放端,但如果传输的数据想和视频保持精准同步,那最好的办法就是这些信息和视频数据打包在一起传输&…

网易邮箱大师如何添加Word附件 添加附件方法步骤详细介绍

网易邮箱大师是一款非常好用的邮箱软件,可同时管理包括网易的各大邮箱,界面简洁,非常好用,其中还有很多功能,比如添加附件等,但是很多小伙伴不知道怎么添加Word及其他附件,接下来看完这篇文章你…

RTSP播放器开发过程中需要考虑哪些关键因素

好多开发者,在自研或者选择市面上的播放器的时候,除了常规的播放功能,还有很多点值得关注,如延迟、资源占用、网络异常处理、多实例支持、长时间运行稳定性等。以下是我们开发直播播放器过程中,考虑的部分关键因素&…

如何拉取公网RTSP/RTMP流在内网多客户端播放

好多情况下,一路RTSP或RTMP网络流过来后,想共享给更多局域网内的客户端播放,一般来说,有两种设计方案: 1. 拉取的RTSP或RTMP流,回调后的数据,转推RTMP服务器,内网部署一台RTMP服务器…

爱链工具怎么使用 爱链工具详细使用图文教程

爱链工具是爱站seo软件独立推出的一款免费友链交换平台,也是目前互联网上最强外链交换平台,不但拥有丰富的友链资源,智能的链接匹配系统,全面的SEO基础数据等等,而且率先推出目录链接交换功能,可以大大提升…

如何在Unity3d平台下低延迟播放RTMP或RTSP流

随着VR类、工业仿真、智慧城市等场景的快速发展,开发者对Unity3d低延迟的直播需求量越来越大,前两年,大牛直播SDK发布了Windows平台、Android平台和iOS平台的Unity3d RTMP和RTSP的播放,好多公司用起来体验都非常好,以下…

轻量级RTSP服务存在的意义

为什么要设计轻量级RTSP服务 轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服务。 轻量级RTSP服务可满足内网无纸化/电子教室等内网超低延迟的低并发需求,避免让用户配置单独的服务器,大牛直播SDK在推送端发布了轻量级RTSP服…

foxmail邮件怎样打印日历

foxmail邮件中的日历有很多信息,想要打印日历,该怎么打印呢?我们点击日历信息。点击设置按钮,再点击打印按钮,先进行设置打印机,然后打印邮件的日历,下面我们就来看看详细的图文教程。 foxmail邮件怎样打…

Windows平台RTMP/RTSP直播推送模块设计和使用说明

开发背景 好多开发者一直反馈,Windows平台,做个推屏或者推摄像头,推RTMP或者RTSP出去,不知道哪些功能是必须的,哪些设计是可有可无的,还有就是,不知道如何选技术方案,以下是基于我们…

跨平台低延迟的RTMP/RTSP直播播放器设计实现

开发背景 2015年,当我们试图在市面上找一款专供直播播放使用的低延迟播放器,来配合测试我们的RTMP推送模块使用时,居然发现没有一款好用的,市面上的,如VLC或Vitamio,说白了都是基于FFMPEG,在点…

win7系统锁定计算机设置方法

我们都知道电脑长时间不使用的话,计算机就会自动进入锁定状态,但是也有用户不想让计算机自动进入锁定状态,但是却不知道应该怎么操作,为此非常苦恼,那么Win7锁定计算机怎么设置呢?今天为大家分享win7系统锁定计算机设…

Windows平台基于RTMP实现一对一互动直播

目前市面上大多一对一互动都是基于WebRTC,缺点如下: 服务器部署非常复杂,不利于私有部署,在一些私密性高的场景下,无法使用,如公安、市政等体系;传输基于UDP,很难保证传输质量&…

网易云音乐电脑版怎么下载电台节目 主播电台节目下载教程

网易云音乐不仅可以听歌,还可以在主播电台中,听到各类主播的声音,下面我们就来讲讲网易云音乐电脑版怎么下载电台节目,一起来看教程吧! 网易云音乐电脑版怎么下载电台节目 主播电台节目下载教程 网易云音乐PC版主播电台节目下载…

如何实现RTMP推送Android Camera2数据

Camera2简介 在Google 推出Android 5.0的时候, Android Camera API 版本升级到了API2(android.hardware.camera2), 之前使用的API1(android.hardware.camera)就被标为 Deprecated 了。 Camera API2相较于API1有很大不同, 并且API2是为了配合HAL3进行使用的, API2有很多API1不…

Android平台RTMP多实例推送的几种情况探讨

好多开发者提到,如何实现Android平台,多实例推送,多实例推送,有几种理解: 多路编码,多个实例分别推送到不同的RTMP URL(如Android采集板卡同时接2路出去);同一路编码&am…

雨林木风win11 64位全新专业版系统v2021.08

雨林木风win11 64位全新专业版系统v2021.08是目前非常火热的电脑操作系统,系统运行速度非常的快速,拥有稳定、安全、兼容性强等特点,多样化的服务可供你的使用,支持在线的升级,非常的便捷,可以提高系统的性…

面向内网无纸化会议/智慧教室/实时同屏,组播还是RTMP?

一、背景 为满足内网无纸化/电子教室等内网超低延迟需求,避免让用户配置单独的服务器,我们研发了轻量级RTSP服务开发包。 单播不再赘述,这里重点介绍下我们的组播技术方案: 组播解决的主要痛点是服务器部署和带宽占用问题&…