直播平台强大的变现能力是大家有目共睹的,很多开发商在搭建直播平台时为了增加用户黏性,纷纷将直播中加入连麦功能。
目前市场上通用的有两种连麦方案:本地混流和云端混流。本地混流即主播和连麦观众分别推一路流,其他观众将这两路流拉过来之后,使用两个播放器播放。云端混流即主播的流在CDN上完成混流,是画面和音频进行叠加,其他观众只拉混流后的这一路,而且可以同时看到主播的画面。云端混流具有即时性强、音画同步性好、质量稳定且节省流量等优点,所以今天来跟大家简单介绍一下,Android端直播APP源码的实现方式。
本地混流
首先初始推流器:

@Override
public void init() {mStreamer = new KSYStreamer(mContext);mStreamer.setPreviewFps(LiveConfig.PUSH_FRAME_RATE);//预览采集帧率mStreamer.setTargetFps(LiveConfig.PUSH_FRAME_RATE);//推流采集帧率mStreamer.setVideoKBitrate(LiveConfig.PUSH_VIDEO_BITRATE * 3 / 4, LiveConfig.PUSH_VIDEO_BITRATE, LiveConfig.PUSH_VIDEO_BITRATE / 4);//视频码率mStreamer.setAudioKBitrate(LiveConfig.PUSH_AUDIO_BITRATE);//音频码率mStreamer.setCameraCaptureResolution(LiveConfig.PUSH_CAP_RESOLUTION);//采集分辨率mStreamer.setPreviewResolution(LiveConfig.LINK_MIC_PUSH_PREVIEW_RESOLUTION);//预览分辨率mStreamer.setTargetResolution(LiveConfig.PUSH_VIDEO_RESOLUTION);//推流分辨率mStreamer.setVideoCodecId(LiveConfig.PUSH_ENCODE_TYPE);//H264mStreamer.setEncodeMethod(LiveConfig.PUSH_ENCODE_METHOD);//软编mStreamer.setVideoEncodeScene(LiveConfig.PUSH_ENCODE_SCENE);//秀场模式mStreamer.setVideoEncodeProfile(LiveConfig.PUSH_ENCODE_PROFILE);mStreamer.setAudioChannels(2);//双声道推流mStreamer.setVoiceVolume(2f);mStreamer.setEnableRepeatLastFrame(false);  // 切后台的时候不使用最后一帧mStreamer.setEnableAutoRestart(true, 3000); // 自动重启推流mStreamer.setCameraFacing(CameraCapture.FACING_FRONT);mStreamer.setFrontCameraMirror(true);mStreamer.setOnInfoListener(this);mStreamer.setOnErrorListener(this);mStreamer.setOnLogEventListener(this);mStreamer.setDisplayPreview((GLSurfaceView) findViewById(R.id.camera_preview));
}
然后使用IM工具向主播发起连麦申请,
private void audienceApplyLinkMic() {long curTime = System.currentTimeMillis();if (curTime - mLastApplyLinkMicTime < 11000) {//时间间隔11秒ToastUtil.show(R.string.link_mic_apply_waiting);} else {mLastApplyLinkMicTime = curTime;//请求权限ProcessResultUtil processResultUtil = ((LiveActivity) mContext).getProcessImageUtil();if (processResultUtil == null) {return;}processResultUtil.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO}, new Runnable() {@Overridepublic void run() {SocketLinkMicUtil.audienceApplyLinkMic(mSocketClient);ToastUtil.show(R.string.link_mic_apply);}});}
}

当主播同意申请之后,申请连麦的观众启动推流器进行推流,使用IM工具通知主播推流成功,并且将自己的播放地址发送给主播,主播开启播放器进行播放。
云端混流通常使用比较成熟的CDN,如腾讯云、声网等。以下部分代码是控制画面中两位主播的相对位置,进而实现画中画效果。

private String createMixParams() {JSONObject obj = new JSONObject();try {long timestamp = System.currentTimeMillis() / 1000;obj.put("timestamp", timestamp);obj.put("eventId", timestamp);JSONObject interFace = new JSONObject();interFace.put("interfaceName", LINK_MIC_INTERFACE_NAME);JSONObject para = new JSONObject();para.put("app_id", LINK_MIC_APPID);para.put("interface", LINK_MIC_INTERFACE);para.put("mix_stream_session_id", mMainStreamId);para.put("output_stream_id", mMainStreamId);JSONArray array = new JSONArray();JSONObject main = new JSONObject();main.put("input_stream_id", mMainStreamId);JSONObject mainLayoutParams = new JSONObject();mainLayoutParams.put("image_layer", 1);main.put("layout_params", mainLayoutParams);array.put(main);for (int i = 0; i < mList.size(); i++) {JSONObject item = new JSONObject();item.put("input_stream_id", getStreamIDByStreamUrl(mList.get(i).getPlayurl()));item.put("layout_params", calculateLayoutParams(mList.size() - 1 - i));array.put(item);}para.put("input_stream_list", array);interFace.put("para", para);obj.put("interface", interFace);} catch (JSONException e) {e.printStackTrace();}return obj.toString();
}

以上就是两种方案在Android端直播APP源码的实现方式。在搭建直播平台的过程中要想打造出优质的直播平台,并且具备高互动性、趣味性的特点,连麦功能已经成为了必不可少的功能之一。而在连麦功能的基础上开发连麦PK功能,已经成为了一线直播平台的吸金利器。只有这样才能最大限度的吸引用户。
声明:本篇文章为原创文章,禁止以任何形式转载。

搭建直播平台过程中Android端直播APP源码是如何实现连麦功能的?相关推荐

  1. tv端h5_最新版H5双端影视APP源码

    最新版H5 双端影视app 源码 V3 全新后台 下载页美化 后台登录 bug 修复 准备工作 1.将源码解压到新的文件夹: 2.使用 notepad++批量替换 URL[http://demo.co ...

  2. 基于苹果CMS系统的双端视频播放APP源码+视频教程

    是一款基于苹果CMS系统的移动端在线视频播放软件, 支持mp4.flv.m3u8.rmvb.mkv等主流视频格式的播放,现有安卓+ios版本. 基于苹果CMS系统的双端视频播放APP源码+视频教程.z ...

  3. php直播系统app吗,ThinkPHP完美运营版安卓苹果双端直播系统APP源码 带主播连麦PK功能源码...

    语言: PHP 数据库: Mysql 直播app源码直播系统整站完美运营方维直播系统新版直播平台搭建方维布谷直播盒子1.主播连麦PK,可设置连麦人数实现多人连麦. 2.直播采集,实时采集其它平台主播资 ...

  4. 一对一直播app源码实现短信验证码发送功能的详细步骤

    以前很多的一对一直播app源码,是通过用户注册时设置账号和密码进行登陆的,但是这样有非常明显的缺点,时间久了之后,很多用户会忘记账号或密码,找回的步骤也会比较繁琐.随着手机实名化的进行,越来越多的用户 ...

  5. 优化Recorder H5录音:可边录边转码上传服务器,支持微信提供Android IOS Hybrid App源码

    文章目录 一.Recorder H5录音库的特性 (1)浏览器支持 (2)功能支持 二.使用预览截图 (1)移动端H5 (2)IOS Hybrid App (3)Android Hybrid App ...

  6. 搭建直播平台过程中的全能“辅助”——流媒体服务器

    直播在经历了爆发式增长后,在互联网领域中呈现出稳步增长的状态.前期观望许久的创业开发者们认为"火候到了",纷纷开始将搭建直播平台项目提上日程.对于平台搭建来讲,流媒体服务器是必不可 ...

  7. 搭建直播平台过程中的全能“辅助”——流媒体服务器...

    直播在经历了爆发式增长后,在互联网领域中呈现出稳步增长的状态.前期观望许久的创业开发者们认为"火候到了",纷纷开始将搭建直播平台项目提上日程.对于平台搭建来讲,流媒体服务器是必不可 ...

  8. 手把手教你用Python来模拟绘制自由落体运动过程中的抛物线(附源码)

    前言 前几天有个叫[-berry]的粉丝在问了一道关于自由落体运动过程中产生的抛物线作图的问题,如下图所示. 当某个物体以初速度v水平抛出,其轨迹为一条抛物线,模拟绘制这条抛物线.用高中物理知识,我们 ...

  9. Android端视频播放器源码分析

    这篇文章主要是分析视频播放器的实现代码.代码地址:查看 整体设计框架 我们播放本地的视频文件需要封装出一个输入模块: 输入模块要开启一个线程来处理解封装和解码,把得到的裸数据放到音频和视频的队列中. ...

最新文章

  1. 越卖越涨?腾讯股票3月后大涨45%,超越“阿里”成中国第一,市值相当于14.3个百度!...
  2. Stixel_World(single)学习笔记
  3. leetcode算法题--新21点★
  4. React开发(236):dva概念1数据流向
  5. 轻拢慢捻,微服务熔断大总管
  6. caffemodel权值可视化(转)
  7. EfficientNet-B4-Ranger:自然复杂环境下温室黄瓜病害识别新方法(同时存在两种疾病)
  8. Java中队列的使用
  9. C++中继承和派生详解(公有、私有、保护继承的区别)
  10. 基于PHP语言的汉语转拼音的类
  11. VsCode之在vue中HTML代码使用自动补全插件
  12. 曼德博集合|最直观的数学之美——用Python看到“上帝的指纹”
  13. Mybatis“四大神兽”
  14. nginx网关与gateway网关的区别
  15. 未来的学习目标-C/C++/Linux服务器开发高级架构
  16. Tesseract Ocr文字识别实战(新版本,扩展手写文字识别)
  17. 面试题--精选Hadoop选择题
  18. 上海市房管局:物业公司信用将能手机查询
  19. 设计模式之-代理模式
  20. python第三方库安装最常用的方式是_Python安装第三方库常用方法

热门文章

  1. python爬虫如何下载高清图片
  2. ed2k linux命令行,Linux_Linux管理应用技巧 amulecmd的使用方法,amulecmd是aMule的命令行操作与管 - phpStudy...
  3. 工匠精神是什么???
  4. 拓展方法的定义及调用和微软拼音组件的使用
  5. GridSearchCV中的参数scoring如何自定义
  6. C. Scoring Subsequences(贪心)
  7. java hangman swing_简单的HANGMAN游戏
  8. 微信公众号简单开发(1)介绍流程
  9. BP神经网络实现NTC热敏电阻非线性校准
  10. origin柱状图坐标标签_经验-Origin做柱状图常遇问题-柱状图X坐标轴如何设置—小技巧...