推荐一个牛逼的直播开源项目

  • 最新
  • 精选
  • 区块链
  • 汽车
  • 创意科技
  • 媒体达人
  • 电影音乐
  • 娱乐休闲
  • 生活旅行
  • 学习工具
  • 历史读书
  • 金融理财
  • 美食菜谱

推荐一个牛逼的直播开源项目

玉刚说 玉刚说 2020-07-21

要说实时音视频互动的玩法哪个行业多,社交娱乐直播行业绝对数一数二,什么 PK 直播、多人连麦,还有从去年开始热起来的虚拟主播。你可能听说过,甚至作为观众用过。现在你也能实际开发一个。因为,Github 上已经有了一个比较完善开源项目。


Github URL:https://github.com/AgoraIO-usecase/agoralive

这个项目原本是声网Agora 的「Agora Live」,是为了便于声网 Agora SDK 用户体验互动直播场景而开发的。近期他们不仅升级了应用,不仅重新设计了 UI,并增加了多人连麦直播、PK 直播、虚拟主播功能。而且他们还会慢慢优化这份源码。


图:新版 Aogra Live(iOS)


当然了,你在苹果 App Store 也能搜到这个应用,Android 用户也可以在声网官网找到下载链接,或者自己用Github 的源码编译一份也行,只需要替换其中的 AppID。

它实现的那些热门场景

新版 Agora Live 目前已经支持四种时下最热门的实时互动场景,包括:


  • 单主播直播场景:这是 Agora Live 最初就支持的功能,支持美颜、文字消息、添加背景音乐等功能。

  • 多人连麦直播场景:在直播的基础上,还可邀请另外 6 名观众进行连麦。

  • PK 直播场景:就像大家在陌陌、抖音等应用中看到的 PK 直播一样,主播可以向另一个主播发起 PK 邀请。两个直播间的观众会同时看到两个主播在线互动。

  • 虚拟主播场景:与单主播直播场景类似,只不过App 会为主播生成一个实时的虚拟形象,虚拟形象的表情会与主播同步。在直播过程中,还可以邀请观众上麦。

App 中所有音视频实时互动与文字消息、控制指令(如邀请上麦),都是基于声网 Agora Native SDK 、声网 Agora 实时消息 RTM SDK 实现的。


核心功能的实现

该开源项目支持 Android 和 iOS,这里以 Swift 代码为例,Java 代码请大家自行查看。


这个示例中,直播间、房主与观众连麦,都是基于声网Agora Native SDK 实现的。我们通过以下代码可以让用户加入 RTC 频道,实现音视频的互通。


func join(channel: String, token: String? = nil, streamId: Int, success: Completion = nil) { agoraKit.join(channel: channel, token: token, streamId: streamId) { [unowned self] in self.channelStatus = .ing if let success = success { success() } } }
在直播间中的文字消息、控制指令(比如邀请观众上麦)等,都是基于 Agora 实时消息 RTM SDK 实现的。在这里我们集成 RTM SDK 后,通过以下代码让用户加入 RTM 频道。
func joinChannel(_ id: String, delegate: AgoraRtmChannelDelegate, success: Completion, fail: ErrorCompletion) { do { let channel = try createChannel(id: id, delegate: delegate) channel.join { (errorCode) in switch errorCode { case .channelErrorOk: self.log(info: "rtm join channel success", extra: "channel id: \(id)") if let success = success { success() } default: let error = AGEError.rtm("join channel fail", code: errorCode.rawValue, extra: "channel: \(id)")
self.log(error: error) if let fail = fail { fail(error) } } } } catch { log(error: error, extra: "create channel fail") if let fail = fail { fail(error) } } }
美颜与虚拟形象是通过接入 FaceUnity 的服务来实现的。可以结合 FUClient 这个类的实现与 FaceUnity 的文档来集成美颜模块。
typedef void (^FUCompletion)(void);typedef void (^FUErrorCompletion)(NSError *error);
typedef NS_ENUM(NSUInteger, FUFilterItemType) { FUFilterItemTypeSmooth = 1, FUFilterItemTypeBrighten = 2, FUFilterItemTypeThinning = 3, FUFilterItemTypeEye = 4};
@interface FUFilterItem : NSObject@property (nonatomic, assign) FUFilterItemType type;@property (nonatomic, assign) float defaultValue;@property (nonatomic, assign) float minValue;@property (nonatomic, assign) float maxValue;@property (nonatomic, assign) float value;@property (nonatomic, copy) NSString *funcName;@end
@interface FUClient : NSObject- (void)loadFilterWithSuccess:(FUCompletion)success fail:(FUErrorCompletion)fail;- (void)setFilterValue:(float)value withType:(FUFilterItemType)type;- (FUFilterItem *)getFilterItemWithType:(FUFilterItemType)type;
- (void)loadBackgroudWithSuccess:(FUCompletion)success fail:(FUErrorCompletion)fail;- (void)loadAnimoji:(NSString *)name success:(FUCompletion)success fail:(FUErrorCompletion)fail;- (void)renderItemsToPixelBuffer:(CVPixelBufferRef)pixelBuffer;- (void)destoryAllItems;@end
视频流从 AVCaptureSession 流出,流入 FaceUnity 进行前处理,然后进入 Agora RTC SDK 发送到远端。
func camera(_ camera: AGESingleCamera, position: AGECamera.Position, didOutput sampleBuffer: CMSampleBuffer) { cameraStreamQueue.async { [unowned self] in guard let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
CVPixelBufferLockBaseAddress(pixelBuffer, .init(rawValue: 0))
let timeStamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer)
if self.enhancement.beauty == .on || self.enhancement.appearance != .none { self.enhancement.renderItems(to: pixelBuffer) }
self.consumer?.consumePixelBuffer(pixelBuffer, withTimestamp: timeStamp, rotation: .rotationNone)
CVPixelBufferUnlockBaseAddress(pixelBuffer, .init(rawValue: 0)) }    }

大家可以使用 Github 中的源码,在声网官网注册一个账号,在后台获取 AppID 后,替换掉源码中的 AppID 即好了,可以一次实现多人连麦直播、单主播直播、PK 直播、虚拟主播 4 种实时互动场景。


官方表示还将在接下来几个月对 repo 中的代码进一步梳理、优化,提升源码的易用性、可读性。而且,还会增加新的场景。


怎么样老铁,去试试吧:

Github URL:https://github.com/AgoraIO-usecase/agoralive

    阅读原文

    前往看一看

    看一看入口已关闭

    在“设置”-“通用”-“发现页管理”打开“看一看”入口

    我知道了

    已发送

    发送到看一看

    发送中

    微信扫一扫
    使用小程序

    取消 允许

    取消 允许

    微信版本过低

    当前微信版本不支持该功能,请升级至最新版本。

    我知道了 前往更新

    确定删除回复吗?

    取消 删除

      知道了

      长按识别前往小程序

      本站仅按申请收录文章,版权归原作者所有
      如若侵权,请联系本站删除

      微信QQ空间新浪微博腾讯微博人人Twitter豆瓣百度贴吧

      觉得不错,分享给更多人看到

      玉刚说 热门文章:

      Android 实现动态背景“五彩蛛网”特效,让你大开眼界    阅读/点赞 : 0/0

      我为什么旗帜鲜明地支持Flutter?    阅读/点赞 : 0/0

      讲真的,每个人都得了解点理财知识    阅读/点赞 : 0/0

      送大家 20 本书,快上车!    阅读/点赞 : 0/0

      早就是优势!    阅读/点赞 : 0/0

      年前好友位开奖结果    阅读/点赞 : 0/0

      如果套路了你,不好意思,我是故意的    阅读/点赞 : 0/0

      在 Retrofit 和 OkHttp 中使用网络缓存,提高访问效率    阅读/点赞 : 0/0

      可能是目前最全的架构师成长路线【建议收藏】    阅读/点赞 : 0/0

      荐号 | 2019 第 2 期    阅读/点赞 : 0/0

      玉刚说 微信二维码

      玉刚说 微信二维码

      玉刚说 最新文章

      推荐一个牛逼的直播开源项目  2020-07-21

      阿里正式取消周报:打击低效加班,拒绝形式主义!  2020-07-20

      怎么解决引用计数 GC 的循环引用问题?  2020-07-20

      好久没面试,有点不适应了!  2020-07-19

      互联网公司忽悠员工的黑话,套路太深了。。。  2020-07-18

      Spring Boot 如何快速集成 Redis?  2020-07-18

      重构了app的我…  2020-07-16

      原来不只是fastjson,这个你每天都在用的类库也被爆过反序列化漏洞!  2020-07-16

      漫画:什么是 “职场PUA” ?  2020-07-14

      4个月拿大厂offer | 人工智能核心能力培养计划  2020-06-23

      (adsbygoogle = window.adsbygoogle || []).push({});

      (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); (function(){ var src = (document.location.protocol == "http:") ? "http://js.passport.qihucdn.com/11.0.1.js?ba34c9f41d18b62312e960833b3cb4ae":"https://jspassport.ssl.qhimg.com/11.0.1.js?ba34c9f41d18b62312e960833b3cb4ae"; document.write(''); })();