Android端实时音视频开发指南

简介

yun2win-sdk-Android提供Android端实时音视频完整解决方案,方便客户快速集成实时音视频功能. SDK 提供的能力如下:

  • 发起
  • 加入
  • AVClient
  • Channel
  • AVMember

yun2win官网:www.yun2win.com

SDK下载地址:http://www.yun2win.com/h-col-107.html

开发准备

  • 注册并创建应用
  • 到 github下载yun2winSDK及demo
  • 下载源码详解

    app为主体显示Module uikit为公共服务Module

    app下libs的yun2win-av-0.1.jar为音视频,屏幕共享SDK

    主体Module结构图

    base文件夹:app初始相关类

    Bridge文件夹:推送连接、接收和发送

    common文件夹:公共配置等

    db文件夹:数据库管理

    entities文件夹:实体集合

    manage文件夹:模型实体管理

    model文件夹:模型集合

    service文件夹:服务管理

    ui文件夹:界面相关

  • 配置信息

    在清单文件AndroidManifest.xml里加入以下权限,以及写上你注册的appkey

    权限配置(实际开发中可能需要更多的权限,可参考demo):

    复制

    
    <?xml version="1.0" encoding="utf-8" ?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yun2win.demo">
            <!-- 加入应用需要的权限 -->
            <!-- 网络相关 -->
            <uses-permission android:name="android.permission.INTERNET" />
            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
            <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
            <uses-permission android:name="android.permission.WRITE_SETTINGS" />
            <!-- 手机状态 -->
            <uses-permission android:name="android.permission.GET_TASKS" />
            <uses-permission android:name="android.permission.FLASHLIGHT" />
            <uses-permission android:name="android.permission.VIBRATE" />
            <uses-permission android:name="android.permission.WAKE_LOCK" />
            <uses-permission android:name="android.permission.BLUETOOTH" />
            <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
            <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
            <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
            <!-- 读写文件 -->
            <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
            <!-- 多媒体 -->
            <uses-permission android:name="android.permission.CAMERA" />
            <uses-permission android:name="android.permission.RECORD_AUDIO" />
            <uses-permission android:name="android.permission.READ_PHONE_STATE" />
            <application android:name="y2w.base.AppContext"
            android:allowbackup="true"
            android:icon="@drawable/lyy_icon"
            android:label="@string/app_name"
            android:theme="@style/AppTheme">
                <!-- 设置yun2win应用的appkey -->
                <meta-data android:name="YUN2WIN_APP_KEY"
                android:value="CerAgk970T8MlUmz" />
            </application>
    </manifest>

    关于YUN2WIN_APP_KEY对应的value获取,在创建应用后,申请APPKEY并进行相关配置。

  • app打包混淆

    在proguard文件中加入以下keep

    -keep class com.yun2win.** {*;}

    -dontwarn com.yun2win.**

初始化

将以下代码复制到项目Application类onCreate()中

复制


AVClient.init(this);

发起

调用以下代码创建频道:

复制


private void createChannel(){

        avClient = new AVClient(currentUser.getEntity().getId(), currentUser.getEntity().getName(), currentUser.getEntity().getAvatarUrl(),currentUser.getImToken().getAccessToken());
        //创建频道
        avClient.createChannel(new AVBack.Result() {
            @Override
            public void onSuccess(Channel channel) {
                avChannel = channel;
                avChannel.setOnMembersChangedListener(new MembersChangedListener());
                avChannel.setOnVideoListener(new VideoListener());
                avChannel.setOnAudioListener(new AudioListener());
                avChannel.setOnScreenListener(new ScreenListener());
                avChannel.join();//加入通知
                memberNotice(memberIds);
                if(callType.equals(EnumManage.AvCallType.video.toString())){
                    handler.sendEmptyMessage(Oper.OpenVideo);
                    handler.sendEmptyMessage(Oper.OpenAudio);
                }else{
                    handler.sendEmptyMessage(Oper.OpenAudio);
                }
            }
            @Override
            public void onError(Integer integer) {
                noticeShow("创建频道失败");
            }
        });
    }

加入

调用以下代码加入频道:

复制



private void getChannel(String channelId){

        avClient = new AVClient(currentUser.getEntity().getId(),currentUser.getEntity().getName(), currentUser.getEntity().getAvatarUrl(), currentUser.getImToken().getAccessToken());
        //获取频道
        avClient.getChannel(channelId, new AVBack.Result() {
            @Override
            public void onSuccess(Channel channel) {
                avChannel = channel;
                avChannel.setOnMembersChangedListener(new MembersChangedListener());
                avChannel.setOnVideoListener(new VideoListener());
                avChannel.setOnAudioListener(new AudioListener());
                avChannel.setOnScreenListener(new ScreenListener());
                avChannel.join();//加入通知
                if (callType.equals(EnumManage.AvCallType.video.toString())) {
                    handler.sendEmptyMessage(Oper.OpenVideo);
                    handler.sendEmptyMessage(Oper.OpenAudio);
                } else {
                    handler.sendEmptyMessage(Oper.OpenAudio);
                }
            }
            @Override
            public void onError(Integer integer) {
                noticeShow("获取频道失败");
            }
        });
    }

提醒

加入方法必须填入需要加入的channelId。

Channel

频道类:主要方法,其他查看API手册

复制



join()
加入频道
void	leave()
离开频道
void	openAudio()
开启语音
void	openVideo()
开启视频
void	setMute(boolean mute)
设置静音
void	setOnAudioListener(Channel.OnAudioListener onAudioListener)
设置音频监听
void	setOnMembersChangedListener(Channel.OnMembersChangedListener onMembersChangedListener)
设置成员变更监听
void	setOnScreenListener(Channel.OnScreenListener onScreenListener)
设置屏幕共享监听
void	setOnVideoListener(Channel.OnVideoListener onVideoListener)
设置视频监听
void	setSpeaker(boolean speaker)
设置扬声器
void	switchCamera()
转摄像头

AVMember

频道成员类:主要方法,其他查看API手册

复制



org.webrtc.VideoTrack	getScreenTrack()
获取屏幕共享流
java.lang.String	getUid()
获取成员唯一标识码
org.webrtc.VideoTrack	getVideoTrack()
获取视频流
boolean	isAudioMuted()
是否开启静音
boolean	isAudioOpened()
是否开启语音
boolean	isScreenOpened()
是否开屏幕共享
boolean	isVideoOpened()
是否开启视频
void	setAudioMuted(boolean audioMuted)
设置是否静音
void	setAudioOpened(boolean audioOpened)
设置是否开启语音
void	setScreenOpened(boolean screenOpened)
设置屏幕共享
void	setScreenTrack(org.webrtc.VideoTrack screenTrack)
设置屏幕共享流
void	setUid(java.lang.String uid)
设置成员唯一标识码
void	setVideoOpened(boolean videoOpened)
设置是否开启视频
void	setVideoTrack(org.webrtc.VideoTrack videoTrack)
设置视频流
从类继承的方法 java.lang.Object

注意事项

复制


1.创建或者获取Channel对象后,都需要调用join方法加入频道进行实时通讯.
2.为确保接收到所有回调,设置相应监听应该在调用join方法之前.
3.SDK不会自动开启音频视频屏幕共享和白板功能,开发时根据需求调用各功能.
4.屏幕共享功能在移动端暂时不能主动发起.

用户手册

AVSDK手册

时间: 2024-08-15 10:11:16

Android端实时音视频开发指南的相关文章

web端实时音视频功能开发指南

yun2win官网:www.yun2win.com SDK下载地址:http://www.yun2win.com/h-col-107.html 简介 yun2win-sdk-web提供web端实时音视频功能完整解决方案,方便客户快速集成音视频功能. SDK 提供整套解决方案 yun2win官网:www.yun2win.com SDK下载地址:http://www.yun2win.com/h-col-107.html 开发准备 1.准备Chrome浏览器版本49及以上 2.给网站配置CA证书 3.

转:?Android IOS WebRTC 音视频开发总结 (系列文章集合)

随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). callstats是一家做实时通讯性能测阅读全文 posted @ 2016-07-22 08:24

Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). 回顾:Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上) 连接网络摄像头 正如上文所提,我们选用一款简单的D-Link DCS-7010L网络摄像头.关键原因在于它支持RTSP协议,因此服务

Android IOS WebRTC 音视频开发总结(六八)-- Google: What&#39;s next for WebRTC

本文主要从用户,公司和技术角度分析美女视频直播这个行业,文章最早发表在我们的微信公众号上,支持原创,详见这里, 欢迎关注微信公众号blackerteam,更多详见www.rtc.help Justion和Sarah是google webrtc项目的主要负责人,下面的图片是根据他们分享的内容进行整理的,涉及webrtc进展.优化等方方面面.整理这些资料的过程中我们发现他们对待webrtc还是挺用心的,为webrtc的完善做了很多的工作,谢谢他们! 原始视频时长53分13秒,全英文的,所以我们考虑做

Android IOS WebRTC 音视频开发总结(六)

前段时间在搞IOS的音视频版本,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面总结一下开发过程中的一些经验: 1. IOS WebRTC音视频编译和下载: 有过android WEBRTC编译下载经验再去弄IOS,你会发现简单多了,再有问题,可以参考:http://www.cnblogs.com/ProbeStar/p/3411510.html  记住有MAC和IOS两个版本,要指定好你想要哪个版本. 2. 正确区分armv7 armv7s i386平台: 编译的时

Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案

本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有可能被丢弃:为满足用户对不同应用不同服务质量的要求,就需要网络能根据用户的要求分配和调度资源,对不同的数据流提供不同的服务质量: 1.对实时性强且重要的数据报文优先处理: 2.对于实时性不强的普通数据报文,提供较低的处理优先级,网络拥塞时甚至丢弃. 为了满足上述需求,QoS出现了,定义如下: QoS

Android IOS WebRTC 音视频开发总结(七六)-- 探讨直播低延迟低流量的粉丝连麦技术

本文主要探讨基于WebRTC的P2P直播粉丝连麦技术 (作者:郝飞,亲加云CTO,编辑:dora),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注微信公众号blacker(微信ID:blackerteam  或 webrtcorgcn) 到目前为止,直播行业继续如预期的那样如火如荼的发展着,在先后竞争完延迟,高清,美 颜,秒开等功能后,最近各大直播平台比拼的一个热点就是连麦.什么是连麦? 简单??述 就是当主播直播期间,可以与其中某一个粉丝进行互动,并且其他粉丝能够观看到这个互动 过程

Android IOS WebRTC 音视频开发总结(二十)---- 自由职业与高端猎聘

咋看标题感觉与WebRTC和音视频无关,其实有着很大的关联,文章来自博客园RTC.Blacker,转载请说明出处. 背景: 一方面因为对开发人员比较了解,不喜欢约束,喜欢自由自在,所以我们向往自由职业. 另一方面企业老总总是让推荐人才,同时有些真正的人才却很难找到好的企业. 基于以上两点我决定发表这篇文章,下面那提供三种类型的工作供您选择: 一.自由职业: 1.职位1: 1.1.熟悉XMPP和openfire,客户想将IM功能外包给熟悉的人士完成,如果觉得您能胜任该职位,我帮您推荐,价格你们自己

Android IOS WebRTC 音视频开发总结(七十)-- 移动端音视频技术优化的七个方向

最近直播很火,很多朋友对背后的技术比较感兴趣,所以今天我们整理一篇关于移动端视频优化的文章,这篇文章是我朋友在一个技术大会上分享过的,更多内容请关注我们的微信公众号:rtcblacker 视频直播为什么会这么火? 首先,音视频直播.点播的需求一直大量存在,包括各种行业应用,比如视频门户.娱乐直播.游戏直播.在线教育.远程医疗,远程监控,企业协作,社交应用等等.“以前之所以没有全面爆发,是因为硬件条件不满足,比如网络的带宽有限”,目前网速仍在不断提升,光纤普及到小区,有线网络的上下行带宽已经达到要