直播最主要的两端:推流直播 和 拉流观看。网易云关于推流,提供了不错的Demo 和 相应代码。

为了便于推流的管理和调用,我将推流功能放在了单独Fragment中。这样页面中不管推流直播显示窗口有多大,在哪个位置都不用担心。而且,会议页面同时会有推流 和 拉流功能,因此将推流 和 拉流分别放在Fragment中更有必要。

推流功能的,具体的集成步骤,还是建议参考官方步骤(官方有权威性和及时性,我说的是负责的官方)。Android网易云推流集成步骤

一、libs 文件夹jar包, .so等相应文件的导入;
二、assets/filter下的滤镜文件的导入(若使用sdk自带滤镜功能,必须导入);
三、AndroidManifest.xml 需要配置直播相关的权限,代码中动态申请权限;
权限处理相关代码:

/**   6.0权限处理     **/
private boolean bPermission = false;
private final int WRITE_PERMISSION_REQ_CODE = 100;
private boolean checkPublishPermission() {if (Build.VERSION.SDK_INT >= 23) {List<String> permissions = new ArrayList<>();if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(ConfigActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);}if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(ConfigActivity.this, Manifest.permission.CAMERA)) {permissions.add(Manifest.permission.CAMERA);}if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(ConfigActivity.this, Manifest.permission.RECORD_AUDIO)) {permissions.add(Manifest.permission.RECORD_AUDIO);}if (PackageManager.PERMISSION_GRANTED != ActivityCompat.checkSelfPermission(ConfigActivity.this, Manifest.permission.READ_PHONE_STATE)) {permissions.add(Manifest.permission.READ_PHONE_STATE);}if (permissions.size() != 0) {ActivityCompat.requestPermissions(ConfigActivity.this,(String[]) permissions.toArray(new String[0]),WRITE_PERMISSION_REQ_CODE);return false;}}return true;
}@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case WRITE_PERMISSION_REQ_CODE:for (int ret : grantResults) {if (ret != PackageManager.PERMISSION_GRANTED) {return;}}bPermission = true;break;default:break;}
}

四、在proguard-project.txt文件中 配置代码混淆;
五、代码编写:
1.首先new lsMediaCapture创建推流实例


lsMediaCapture.LsMediaCapturePara lsMediaCapturePara = new lsMediaCapture.LsMediaCapturePara();
lsMediaCapturePara.setContext(getApplicationContext()); //设置SDK上下文(建议使用ApplicationContext)
lsMediaCapturePara.setMessageHandler(this); //设置SDK消息回调
lsMediaCapturePara.setLogLevel(lsLogUtil.LogLevel.INFO); //日志级别
lsMediaCapturePara.setUploadLog(publishParam.uploadLog);//是否上传SDK日志
mLSMediaCapture = new lsMediaCapture(lsMediaCapturePara);

2.调用startVideoPreview打开预览界面

NeteaseView videoView = (NeteaseView) findViewById(R.id.videoview);
boolean frontCamera = publishParam.frontCamera; // 是否前置摄像头
boolean mScale_16x9 = publishParam.isScale_16x9; //是否强制16:9
lsMediaCapture.VideoQuality videoQuality = publishParam.videoQuality; //视频模板(SUPER_HIGH 1280*720、SUPER 960*540、HIGH 640*480、MEDIUM 480*360、LOW 352*288)
mLSMediaCapture.startVideoPreview(videoView,frontCamera,mUseFilter,videoQuality,mScale_16x9);// SDK 默认提供 /** 标清 480*360 */MEDIUM, /** 高清 640*480 */HIGH,
// /** 超清 960*540 */SUPER,/** 超高清 (1280*720) */SUPER_HIGH  四个模板,
// 用户如果需要自定义分辨率可以调用startVideoPreviewEx 接口并参考以下参数
// 码率计算公式为 width * height * fps * 9 /100;//        lsMediaCapture.VideoPara para = new lsMediaCapture.VideoPara();
//        para.setHeight(720);
//        para.setWidth(1280);
//        para.setFps(15);
//        para.setBitrate(1200*1024);
//        mLSMediaCapture.startVideoPreviewEx(videoView,frontCamera,mUseFilter,para);

注意:videoView 是NeteaseView ,如果画面仅占屏幕的局部,需要设置videoView .setFullScreen(false); 这里默认是true,也就是画面占满全屏。

3.initLiveStream初始化推流地址 及 推流参数说明LiveStreamingPara

mLiveStreamingPara = new lsMediaCapture.LiveStreamingPara();
mLiveStreamingPara.setStreamType(publishParam.streamType); // 推流类型 AV、AUDIO、VIDEO
mLiveStreamingPara.setFormatType(publishParam.formatType); // 推流格式 RTMP、MP4、RTMP_AND_MP4
mLiveStreamingPara.setRecordPath(publishParam.recordPath);//formatType 为 MP4 或 RTMP_AND_MP4 时有效
mLiveStreamingPara.setQosOn(publishParam.qosEnable);
//mLiveStreamingPara.setSyncTimestamp(true,false);//(直播答题使用)网易云透传时间戳,不依赖CDN方式,不需要额外开通(必须包含视频流)
//mLiveStreamingPara.setStreamTimestampPassthrough(true); //(直播答题使用)网易云透传时间戳,但完全透传功能需要联系网易云开通,支持纯音频mLSMediaCapture.initLiveStream(mLiveStreamingPara,mliveStreamingURL);

4.startLiveStreaming开始推流,之后可以调用其他推流过程中的API

mLSMediaCapture.startLiveStreaming();

5.最后先stopLiveStreaming停止推流,再unInit反初始化推流实例释放资源
说明:init与unInit,start与stop都要保持匹配使用

mLSMediaCapture.stopLiveStreaming();
mLSMediaCapture.stopVideoPreview();
mLSMediaCapture.destroyVideoPreview();
//反初始化推流实例,当它与stopLiveStreaming连续调用时,参数为false
mLSMediaCapture.uninitLsMediaCapture(false);

以上五个大步骤,是网易云推流集成到项目的基本步骤。代码的5个步骤:实例创建、画面预览、参数初始化、推流、结束推流释放资源。这些步骤构成了,大体的直播过程。
推流全过程代码:

//以下为SDK调用主要步骤,请用户参考使用
//1、创建直播实例
lsMediaCapture.LsMediaCapturePara lsMediaCapturePara = new lsMediaCapture.LsMediaCapturePara();
lsMediaCapturePara.setContext(getApplicationContext()); //设置SDK上下文(建议使用ApplicationContext)
lsMediaCapturePara.setMessageHandler(this); //设置SDK消息回调
lsMediaCapturePara.setLogLevel(lsLogUtil.LogLevel.INFO); //日志级别
lsMediaCapturePara.setUploadLog(publishParam.uploadLog);//是否上传SDK日志
mLSMediaCapture = new lsMediaCapture(lsMediaCapturePara);//2、设置直播参数
mLiveStreamingPara = new lsMediaCapture.LiveStreamingPara();
mLiveStreamingPara.setStreamType(publishParam.streamType); // 推流类型 AV、AUDIO、VIDEO
mLiveStreamingPara.setFormatType(publishParam.formatType); // 推流格式 RTMP、MP4、RTMP_AND_MP4
mLiveStreamingPara.setRecordPath(publishParam.recordPath);//formatType 为 MP4 或 RTMP_AND_MP4 时有效
mLiveStreamingPara.setQosOn(publishParam.qosEnable);
mLiveStreamingPara.setQosEncodeMode(publishParam.qosEncodeMode); //1:流畅优先, 2:清晰优先 默认流畅优先//3、 预览参数设置
NeteaseView videoView = (NeteaseView) findViewById(R.id.videoview);
boolean frontCamera = publishParam.frontCamera; // 是否前置摄像头
boolean mScale_16x9 = publishParam.isScale_16x9; //是否强制16:9
if(publishParam.streamType != AUDIO){ //开启预览画面lsMediaCapture.VideoQuality videoQuality = publishParam.videoQuality; //视频模板(SUPER_HIGH 1280*720、SUPER 960*540、HIGH 640*480、MEDIUM 480*360、LOW 352*288)mLSMediaCapture.startVideoPreview(videoView,frontCamera,mUseFilter,videoQuality,mScale_16x9);
}m_startVideoCamera = true;
if(mUseFilter){ //demo中默认设置为干净滤镜mLSMediaCapture.setBeautyLevel(5); //磨皮强度为5,共5档,0为关闭mLSMediaCapture.setFilterStrength(0.5f); //滤镜强度mLSMediaCapture.setFilterType(publishParam.filterType);
}private boolean startAV(){//6、初始化直播m_liveStreamingInitFinished = mLSMediaCapture.initLiveStream(mLiveStreamingPara,mliveStreamingURL);if(mLSMediaCapture != null && m_liveStreamingInitFinished) {//7、开始直播mLSMediaCapture.startLiveStreaming();m_liveStreamingOn = true;if(mNeedWater){//8、设置视频水印参数(可选)addWaterMark();//9、设置视频动态水印参数(可选)addDynamicWaterMark();}if(mNeedGraffiti){//10、设置视频涂鸦参数(可选)addGraffiti();}return true;}return m_liveStreamingInitFinished;
}//停止直播调用相关API接口
if(mLSMediaCapture != null && m_liveStreamingOn) {//停止直播,释放资源mLSMediaCapture.stopLiveStreaming();//如果音视频或者单独视频直播,需要关闭视频预览if(m_startVideoCamera){mLSMediaCapture.stopVideoPreview();//消耗第三方滤镜releaseSenseEffect();mLSMediaCapture.destroyVideoPreview();}//反初始化推流实例,当它与stopLiveStreaming连续调用时,参数为falsemLSMediaCapture.uninitLsMediaCapture(false);mLSMediaCapture = null;
}

网易云推流还有其他很多细节:
1、推流的中断、恢复;(视频、音频);
2、伴音(视频推流过程中,添加伴音);
3、网速测试;
4、摄像头操作多种功能:闪光灯、变焦、对焦、前后摄像头切换、分辨率切换、曝光度设置
5、画面镜像操作;
6、滤镜相关操作;
7、水印相关操作;

具体详情,还是建议参考官方开发指南

网易云直播 —— 会议系统开发推流相关推荐

  1. 网易云直播 —— 会议系统开发前言

    前端时间,参与了一个会议系统的开发.我开发大体功能有: 1.创建会议:包括 会议标题.会议类型.会议时间.会议地点.主持人. 出席人(从组织架构中选择).会议主题(最少一个,可多个):2.会议列表:未 ...

  2. 如何利用网易云直播的接口做一个直播项目

    公司新下来了一个需求,为了让更多的企业hr在线看我们公司的"hr沙龙培训活动"(之前一直是到现场听),于是购买了网易云的直播服务,做一个在线直播观看的活动. 购买完成后,输入账号密 ...

  3. 如何搭建直播app系统开发流程及难点的介绍

    5G时代,天各一方的两个人将可以实现更深层次的社交体验和相互协作,同时5G也会将全世界更紧密的连接在一起,进一步推动社会群体意识的形成.从现在的发展趋势来简单分析,暂时还没有什么行业能对直播行业形成竞 ...

  4. Python的网易云音乐数据分析系统 爬虫 echarts可视化 Flask框架 音乐推荐系统 源码下载

    Python的网易云音乐数据分析系统 爬虫 echarts可视化 Flask框架 音乐推荐系统 一.技术说明 网易云音乐数据(歌单.用户.歌词.评论)Python爬取Flask框架搭建ECharts. ...

  5. 直播礼物特效-网易云直播礼物分析

    直播礼物特效-网易云直播礼物分析 今天要分析的平台是网易云音乐的直播礼物.和QQ音乐一样,网易云算得上是国内数一数二的音乐大平台,也像QQ音乐等等一些音乐软件一样,跟随着互联网直播大潮开设了直播业务. ...

  6. 一对一直播聊天交友系统开发优化方案

    一对一直播聊天交友系统开发优化方案 一对一直播系统开发语言 一对一视直播系统赢利点 一对一直播系统服务内容 IM通信的原理是什么 在iOS和Android手机中进行App优化 一对一直播系统开发语言 ...

  7. 教育+直播APP系统开发方案

    抗疫期间教育行业也是纷纷开始了线上教学.疫情期间,以"1亿免费课程"切入在线教育战场的小度智能音箱,从2月1号以来教育技能方面的增长情况看,用户访问量平均增长了6倍,部分" ...

  8. 网易商业化项目分享|网易云音乐-评论系统后端架构设计

    ​截止2019年二季度,网易云音乐用户数已经突破8亿,成为最活跃的音乐社区,位居在线音乐行业第一阵营. 相信大家或多或少都使用过网易云音乐,不知道有没有人跟我一样,在云音乐听歌的时候喜欢打开评论看一看 ...

  9. 基于网易云短信接口开发

    开发流程: 生成效验 发送验证码 短信验证 一.生成CheckSum校验 import java.security.MessageDigest; /*** 网易云短信工具类* @author dayu ...

最新文章

  1. 1.5 使用new创建动态结构和自动, 静态, 动态三种存储方式
  2. numpy 笔记: random模块
  3. C++运行程序出现的一些问题
  4. 页面提交插入到数据库 1.jsp
  5. Linux运维趋势采摘 -14期 【第一次编辑】
  6. vim 代码提示功能,让vim可以媲美IDE
  7. 彩信编辑器之预览功能
  8. 一篇万字长文读懂微软PDB、SourceLink——.net core之nuget 包调试
  9. 18kw丹佛斯变频器常见故障_变频器常见故障——输出不平衡、过载、开关电源损坏...
  10. PLSQL_海量数据处理系列7_DBSM_STATS
  11. 【旗帜识别】基于matlab GUI旗帜识别【含Matlab源码 157期】
  12. MTK手机充电原理分析及问题总结
  13. 关于机器人方面的sci论文_近十年机器人学科中国学者SCI十大发文期刊 - 论文投稿 - 小木虫 - 学术 科研 互动社区...
  14. DDR3 full empty如何产生?
  15. 后台传给小程序的时间对象如何转为“YYYY/MM/DD“格式渲染
  16. 一个优秀的系统分析员应该具备的三个素质
  17. 微信小程序 小星星样式
  18. uni-app使用Hbuilder X如何安卓APP打包、发布、运行
  19. js对大数据量的处理
  20. 【程序人生】读出社会两年后的工作感受有感

热门文章

  1. php一句话图片木马怎么运行,php型一句话木马怎么写
  2. 实现类似王者荣耀的战令功能
  3. 新浪微博商业数据API、通用API
  4. 如何学习Java多线程
  5. 全栈项目|小书架|微信小程序-书籍详情功能实现
  6. 手机qq怎么设置不显示定位服务器,微信对方正在输入怎么设置不显示 关闭取消不让好友看教程...
  7. android TBS预览文件
  8. [渝粤教育] 中国地质大学 高等数学(一) 复习题 (2)
  9. 1.1云存储技术的起源与发展
  10. Bootstrap模态框modal的高度和宽度设置