网页端在线一起看Plook程序源码(一起看在线聊天看视频)一、这是一件悲伤的故事我是一名程序员,我和我的女友是异地恋,so sad!!!一次视频时,她突然来了一句:“我们已经很久没有一起看电影了吧。。。。。。”“呃。。。好像是”,毕竟离得那么远,一起看电影有点难啊。女友“哦”了下,我们便陷入了沉默。视频结束,心情有点忧伤。是啊,已经很久没有好好陪她了吧。突然想到市面上有不少可以一起看电影的APP。找了下,确实不少,像微光之类的 APP 人气都很火。下载了一个,发现还是挺有意思的,确实能解决异地一起看电影的需求。于是“啪”的一下,灵光一现,哄女友开心的方法有了,哦耶!!!我可以自己去实现一个 demo 呀!作为一名优质的程序员,鉴于职业探索精神以及在 ZEGO 即构科技的从业经验,想到实现一个类似功能的 demo 还是很可以的。说干就干,熬夜小 case,通宵搞出了demo,效果如下:前面铺设了这么长,相信你们也不是来看我晒狗粮的(狗头保命)。那么现在就和我一起来看看我是怎么实现这个让女朋友欢心的“一起看电影”的功能吧,文章有点长,但是绝对很干货,大家可以耐心看完。二、开始准备在开始实现一起看电影的demo之前,我们需要做一些开发前的准备工作:01 开发环境准备首先第一步就是准备开发环境,需要确保开发环境满足以下要求:Android Studio 2.1 或以上版本。Android SDK 25、Android SDK Build-Tools 25.0.2、Android SDK Platform-Tools 25.x.x 或以上版本。Android 4.1 或以上版本,且支持音视频的 Android 设备。Android 设备已经连接到 Internet。02 账户注册开发环境搭建好之后,我们需要去 ZEGO 官网注册一个账户,进入管理控制台并创建应用、获取开发需要的 AppId 和 AppSign 。具体的创建应用过程详见此文章: 控制台创建项目流程。三、实现流程介绍01 接口规范说明首先分析 ZEGO 的 API 输入输出规范。根据 API使用文档 来看,调用接口格式如下:以创建 ZegoExpressEngine 单列对象为列,每个参数都详细的解析其作用。每个接口都描述了作用与用法。02 一起看电影的项目开发接下来就万事俱备了,跟着我来着手实操一下,看具体怎么实现一起看电影的项目。项目分为两部分:播放本地电影的服务端、拉流播放电影的客户端。下面会进行每个部分的详细介绍。项目设置了最大用户数为3人,服务端占了一位,所以客户端只能同时两人在线观看电影(悄咪咪,确保你们两个人之间不会出现第三者)。1、服务端 —— 播放电影服务端的实现流程步骤一: 创建 ZegoExpressEngine 引擎:/** 定义 SDK 引擎对象 */ZegoExpressEngine engine; /** 填写 appID 和 appSign */long appID = ; /** 请通过官网注册获取,格式为 123456789L */String appSign = ; /** 64个字符,请通过官网注册获取,格式为"0123456789012345678901234567890123456789012345678901234567890123" *//** 创建引擎,使用测试环境,通用场景接入 */engine = ZegoExpressEngine.createEngine(appID, appSign, true, ZegoScenario.GENERAL, getApplication(), null); 复制代码步骤二:开启自定义视频采集功能:ZegoCustomVideoCaptureConfig videoCaptureConfig = new ZegoCustomVideoCaptureConfig();// 选择 RAW_DATA 类型视频帧数据videoCaptureConfig.bufferType = ZegoVideoBufferType.RAW_DATA; engine.enableCustomVideoCapture(true, videoCaptureConfig, ZegoPublishChannel.MAIN);复制代码步骤三:设置自定义视频采集回调对象并实现对应方法:// 将自身作为自定义视频采集回调对象 sdk.setCustomVideoCaptureHandler(new IZegoCustomVideoCaptureHandler() { @Override public void onStart(ZegoPublishChannel channel) { // 收到回调后,开发者需要执行启动视频采集相关的业务逻辑,例如开启摄像头等 ... } @Override public void onStop(ZegoPublishChannel channel) { // 收到回调后,开发者需要执行停止视频采集相关的业务逻辑,例如关闭摄像头等 ... } });复制代码 步骤四:选择要播放的电影,设置房间ID。然后登录房间,将收到自定义视频采集回调通知开始采集:/** 创建用户 */ ZegoUser user = new ZegoUser("user1"); /** 开始登录房间 */ engine.loginRoom("room1", user); 复制代码mZegoMediaPlayer.setVideoHandler(new IZegoMediaPlayerVideoHandler() { @Override public void onVideoFrame(ZegoMediaPlayer zegoMediaPlayer, ByteBuffer[] byteBuffers, int[] ints, ZegoVideoFrameParam zegoVideoFrameParam) { }}, ZegoVideoFrameFormat.RGBA32);复制代码 步骤五:当客户端发送通知开始播放电影,就开始推流(电影流),预加载load 电影,开始播放start()/** 开始推流 */ engine.startPublishingStream("stream1");复制代码mZegoMediaPlayer.loadResource(path, new IZegoMediaPlayerLoadResourceCallback() { @Override public void onLoadResourceCallback(int code) { if (code == 0) { mZegoMediaPlayer.start(); if (callback != null) { callback.onLoadResourceCallback(code); } } }});复制代码步骤六:调用发送视频帧方法 sendCustomVideoCaptureRawData 向 SDK 提供视频帧数据。// 将采集的数据传给ZEGO SDKint totalDataLength = byteBuffers[0].capacity();if (tempByteBuffer == null || tempByteBuffer.capacity() != totalDataLength) { tempByteBuffer = ByteBuffer.allocateDirect(byteBuffers[0].capacity()).put(byteBuffers[0]);} else { tempByteBuffer.clear(); tempByteBuffer.put(byteBuffers[0]);}ZegoSDKManager.getInstance().getStreamService().sendCustomVideoCaptureRawData(tempByteBuffer, tempByteBuffer.capacity(), zegoVideoFrameParam); 复制代码步骤七:当客户端没有观众在房间或者服务器退出播放房间,结束推流将收到自定义视频采集回调通知停止采集。2、客户端——拉流播放电影客户端的实现流程首先,播放电影的客户端分别有以下几项功能:A、B 端观众的电影拉流渲染、电影播放\暂停。A、B 端观众音视频的推拉流、摄像头的翻转开关、麦克风的开关。A、B 端观众的房间实时消息的发送接收。接下来,我们将根据上述提到的具体功能展开为大家介绍:(1)针对于电影播放功能的流程介绍A 端观众通过后台设置的 RoomID 成功登录房间,如果输入的 RoomID 不存在,就会通过判断当前 A 端是房间内第一人,退出房间提示房间不存在;或者房间内已经满员就会登录失败并提示 房间已满员。* 点击电影播放按钮 setRoomExtraInfo() 进行消息的通知* 后台手机端 收到 onRoomExtraInfoUpdate() 的回调 进行电影的播放* 观众端会收到电影播放的推流 ,获取电影推流 StreamID 进行拉流播放B 端 通过输入 RoomID 进入播放房间 ,进行电影的拉流显示:/** * 开始拉流,设置远端拉流渲染视图,视图模式采用 SDK 默认的模式,等比缩放填充整个 View * 如下 play_view 为 UI 界面上的 SurfaceView/TextureView/SurfaceTexture 对象 */ engine.startPlayingStream("stream1", new ZegoCanvas(play_view));复制代码AB端观众都可以通过 setRoomExtraInfo(String roomID,String key,String value,null) 来对视频媒体进行 播放/暂停。AB端观众都可以通过 setRoomExtraInfo(String roomID,String key,String value,null) 来对视频媒体进行 播放/暂停。一起看电影 setRoomExtraInfo 的参数意义如下:key: roomInfovalue: 0 、1、2、30: 代表load start 电影1:电影是播放状态2:电影是暂停状态3:房间已经被关闭(2)针对于音视频推拉流的过程通过 ZEGO 音视频服务进行推拉流A端观众进入房间后,向 ZEGO 音视频云服务推流,需要自己生成唯一的 StreamID ,然后开始预览并推流。等到B端观众进入房间后,会收到SDK 的流更新通知,从中筛选出 B端观众流 StreamID 进行拉流B端观众进入房间后,向 ZEGO 音视频云服务推流,需要自己生成唯一的 StreamID ,然后开始预览并推流。同时筛选出 A端观众流 StreamID 进行拉流AB端观众可以各自控制自己的 翻转摄像头、开/关摄像头、开/关麦克风 的功能://切换前后摄像头 front 是否采用前置摄像头;true 表示使用前置摄像头;false 表示使用后置摄像头expressEngine.useFrontCamera(front);// 开/关摄像头 enable 是否打开摄像头;true 表示打开摄像头;false 表示关闭摄像头expressEngine.enableCamera(enable);// 是否开启麦克风 enable 是否开启麦克风;true 表示开启麦克风;false 表示静音(关闭)麦克风expressEngine.muteMicrophone(!enable);复制代码都是跟推拉流有关,则以用户 A 拉取用户 B 的流为例,流程如下图:想要了解更加具体的实现流程,可参考官方文档 音视频实现流程。(3)针对于房间实时聊天消息的发送显示AB 端观众都可以在房间内发送消息;调用 sendBroadcastMessage 接口向同一房间内的B端观众发送广播消息,长度不能超过 1024 字节。通过 onIMSendBroadcastMessageResult 回调获取消息发送结果;// 发送广播消息,每个登录房间的用户都会通过 onIMRecvBroadcastMessage 回调收到此消息【发送方不会收到该回调】engine.sendBroadcastMessage(roomID, msg, new IZegoIMSendBroadcastMessageCallback() { /** 发送广播消息结果回调处理 */ @Override public void onIMSendBroadcastMessageResult(int errorCode, long messageID) { //发送消息结果成功或失败的处理 } });复制代码实现 IZegoEventHandler 中的 onIMRecvBroadcastMessage 回调,当发送方成功发送广播消息后,同一房间内的其他用户通过此回调接收相关信息,包括消息内容、消息 ID、发送时间及发送方信息。/** * 接收房间弹幕消息通知 * * @param roomID 房间 ID * @param messageList 收到的消息列表 */ public void onIMRecvBarrageMessage(String roomID, ArrayList<ZegoBarrageMessageInfo> messageList){ // 收到其他用户发送消息的处理 }复制代码发送接收到的消息显示到UI界面。四、效果呈现(附 demo 源码下载)01 播放电影端的效果图(电影播放端)02 观众端的效果图(电影观众端)(电影播放时示意图)附上demo给大家进行体验,一起看电影一共分为两部分,安装密码为 1:1)服务端demo : 看电影服务端2)客户端demo : 一起看电影安装方式如下:1)先启动 服务端demo ,选择电影设置房间ID;2)客户端 demo 通过输入设置的房间ID 进入播放电影房。源码下载: 百度网盘 请输入提取码(密码:qrep)五、结语牛顿曾说:我看得远,是因为我站在巨人的肩膀上!基于 ZEGO 即构科技的音视频功能,一番操作下来,很简单就开发出来一款《一起看电影》的 demo,总体来说还是很简单就可以实现的。让异地恋女友开心的方法近在咫尺,赶快行动起来体验音视频开发的乐趣吧作者:ZEGO即构链接:https://juejin.cn/post/7008745527198105631来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。资源下载免费资源链接点击下载 复制文件2地址点击下载客服付费资源此资源仅限注册用户下载,请先登录客服
声明:请仔细阅读下方条款,如果通过本站下载到的任何软件程序源码需遵循以下声明,否则请立即删除程序!
1、如果转载本站程序源码教程或引用本站文章请在内容标注本站网址
2、转载本站程序源码必须为本站VIP会员,非本站会员或其他途径下载的程序不可转载分享,否自行承担法律责任!
3、本站程序代码来源网络整理发布,只适合学习程序运行逻辑,代码规范,编程思路,如对于通过本站下载的程序转载分享,倒卖运营,引起的民事纠纷、刑事案件、行政处罚或者其他损失本站概不负责不承担任何法律责任。
4、本站不对因使用下载的软件源码而产生的任何直接、间接、附带、惩罚性或特殊损害负责法律责任,即使已经被告知这种损害的可能性。
本站是按照“现状”提供的,不包含任何形式的保证,不论是明示的还是默示的,包括但不限于对适销性、适合特定用途和不侵权以及违法运营的保证。
5、开通本站VIP会员可以加入群交流,站长每天处理问题群里多请教,或者在本站问答社区提问。
点击下方下载: 👇 👇 👇 👇 👇 👇 👇 👇 👇
下载
高速下载 备用下载- 随机文章
- 热门文章
- 热评文章
- 永力源码菠菜系统ui美化H5版本修复采集-php90源码网
- 微盘交易源码轻量级H5币圈理财源码杀猪盘-php90源码网
- WealthFlow源码交易所多语言/外汇/期货/美元/借贷/质押/场控游客模拟账户系统源码-php90源码网
- 【运营版】【独家首发】最新更新量推五湖版第二代版本,完整组件+已测试完整搭建+代理正常网盘下载
- 【运营版】【独家首发】最新更新天马一夜暴富完美服务器打包版本+完整数据+游戏众多网盘下载
- 【运营版】最新WG蓝色稳定版CP源码完美运营版+安装视频教程网盘下载
- 【运营版】【全网首发】完整版量推第三版,修复金花十三水等问题+机器人+无限合伙人+全游戏带控+附已解密zip+双端APP正常网盘下载
- 【运营版】【全网首发】带演示UTO/悠途/wg全接口/非pe非ng网盘下载
- 【运营版】网狐旗舰版全套源码,非组件,完整全套网盘下载
- 【运营版】【H5棋牌】来玩大厅H5源码无授权无加密葫芦鱼暗堡系列网盘下载
- 1【修复版】【加拿大28源码】时时彩游戏系统+28竞猜源码+后台系统预设开奖-网盘下载
- 2WealthFlow源码交易所多语言/外汇/期货/美元/借贷/质押/场控游客模拟账户系统源码-php90源码网
- 3华兴证券源码A股系统/Java后端+前端VUE股票源码/新股申购/大宗交易/股票交易系统-php90源码网
- 4【运营版】嘉年华电玩客户定制运营版网盘下载
- 5【运营版】网狐系列三网通大富豪电玩组件网盘下载
- 6【首发】国外游戏金币赚钱网赚资金盘源码/看视频赚钱旁氏系统-php90源码网
- 7多语言虚拟币运营版挖矿投资理财交易所系统源码合约/币币/功能-php90源码网
- 8【修复版】【海外金砖国家】共享投资理财系统源码-网盘下载
- 9【完整版】未测试java全开源外汇系统源码,外汇源码,贵金属资金盘源码,金融股票交易系统,原生app双端,vue前后端源代码-资金盘源码-网盘下载
- 10【运营版】单款ATT连环炮翻牌机JAVA版本运营级网盘下载
- 1OK国际程序源码H5独立菠菜app框架运营级别-php90源码网
- 228南宫第二版源码修复源码预设KJ功能,并采用了全新的UI设计-php90源码网
- 3大富二开私C源码UI比较好看适合私人盘运营自适wap应修复BUG-php90源码网
- 4修复版的bw信用盘OA源码完整打包PHP开发的运营级别的+视频搭建教程-php90源码网
- 5王者电竞源码私C完整(独立手机版)下载-php90源码网
- 6蓝冠在线带契约玩法程序修复一些BUG带手机版采集-php90源码网
- 7独家老九门BC二开完整运营版程序+聊天室-php90源码网
- 8PC蛋蛋28菠菜源码BC系统带各种主流玩法自适应手机端-php90源码网
- 9通雅源码系统菠菜修复版大富二开美化版本自适应+聊天室系统!-php90源码网
- 10快3开奖结果走势图网站源码,自定义开奖数据程序源码-php90源码网