如何解决和异地女朋友一起看电影的需求?(内附源码)
一、這是一件悲傷的故事
我是一名程序員,我和我的女友是異地戀,so sad!!!
一次視頻時(shí),她突然來了一句:“我們已經(jīng)很久沒有一起看電影了吧。。。。。。”
“呃。。。好像是”,畢竟離得那么遠(yuǎn),一起看電影有點(diǎn)難啊。
女友“哦”了下,我們便陷入了沉默。
視頻結(jié)束,心情有點(diǎn)憂傷。是啊,已經(jīng)很久沒有好好陪她了吧。
突然想到市面上有不少可以一起看電影的APP。找了下,確實(shí)不少,像微光之類的 APP 人氣都很火。下載了一個(gè),發(fā)現(xiàn)還是挺有意思的,確實(shí)能解決異地一起看電影的需求。
于是“啪”的一下,靈光一現(xiàn),哄女友開心的方法有了,哦耶!!!我可以自己去實(shí)現(xiàn)一個(gè) demo 呀!
作為一名優(yōu)質(zhì)的程序員,鑒于職業(yè)探索精神以及在 ZEGO 即構(gòu)科技的從業(yè)經(jīng)驗(yàn),想到實(shí)現(xiàn)一個(gè)類似功能的 demo 還是很可以的。
說干就干,熬夜小 case,通宵搞出了demo,效果如下:
前面鋪設(shè)了這么長(zhǎng),相信你們也不是來看我曬狗糧的(狗頭保命)。那么現(xiàn)在就和我一起來看看我是怎么實(shí)現(xiàn)這個(gè)讓女朋友歡心的“一起看電影”的功能吧,文章有點(diǎn)長(zhǎng),但是絕對(duì)很干貨,大家可以耐心看完。
二、開始準(zhǔn)備
在開始實(shí)現(xiàn)一起看電影的demo之前,我們需要做一些開發(fā)前的準(zhǔn)備工作:
01
開發(fā)環(huán)境準(zhǔn)備
首先第一步就是準(zhǔn)備開發(fā)環(huán)境,需要確保開發(fā)環(huán)境滿足以下要求:
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 設(shè)備。
Android 設(shè)備已經(jīng)連接到 Internet。
02
賬戶注冊(cè)
開發(fā)環(huán)境搭建好之后,我們需要去 ZEGO 官網(wǎng)注冊(cè)一個(gè)賬戶,進(jìn)入管理控制臺(tái)并創(chuàng)建應(yīng)用、獲取開發(fā)需要的 AppId 和 AppSign 。
具體的創(chuàng)建應(yīng)用過程詳見此文章:??控制臺(tái)創(chuàng)建項(xiàng)目流程。
三、實(shí)現(xiàn)流程介紹
01
接口規(guī)范說明
首先分析 ZEGO 的 API 輸入輸出規(guī)范。根據(jù)?API使用文檔?來看,調(diào)用接口格式如下:
以創(chuàng)建 ZegoExpressEngine 單列對(duì)象為列,每個(gè)參數(shù)都詳細(xì)的解析其作用。每個(gè)接口都描述了作用與用法。
02
一起看電影的項(xiàng)目開發(fā)
接下來就萬事俱備了,跟著我來著手實(shí)操一下,看具體怎么實(shí)現(xiàn)一起看電影的項(xiàng)目。
項(xiàng)目分為兩部分:播放本地電影的服務(wù)端、拉流播放電影的客戶端。下面會(huì)進(jìn)行每個(gè)部分的詳細(xì)介紹。
項(xiàng)目設(shè)置了最大用戶數(shù)為3人,服務(wù)端占了一位,所以客戶端只能同時(shí)兩人在線觀看電影(悄咪咪,確保你們兩個(gè)人之間不會(huì)出現(xiàn)第三者)。
1、服務(wù)端 —— 播放電影服務(wù)端的實(shí)現(xiàn)流程
步驟一:?創(chuàng)建 ZegoExpressEngine 引擎:
步驟二:開啟自定義視頻采集功能:
步驟三:設(shè)置自定義視頻采集回調(diào)對(duì)象并實(shí)現(xiàn)對(duì)應(yīng)方法:
?步驟四:選擇要播放的電影,設(shè)置房間ID。然后登錄房間,將收到自定義視頻采集回調(diào)通知開始采集:
?步驟五:當(dāng)客戶端發(fā)送通知開始播放電影,就開始推流(電影流),預(yù)加載load 電影,開始播放start()
步驟六:調(diào)用發(fā)送視頻幀方法 sendCustomVideoCaptureRawData 向 SDK 提供視頻幀數(shù)據(jù)。
步驟七:當(dāng)客戶端沒有觀眾在房間或者服務(wù)器退出播放房間,結(jié)束推流將收到自定義視頻采集回調(diào)通知停止采集。
2、客戶端——拉流播放電影客戶端的實(shí)現(xiàn)流程
?首先,播放電影的客戶端分別有以下幾項(xiàng)功能:
A、B 端觀眾的電影拉流渲染、電影播放\暫停。
A、B 端觀眾音視頻的推拉流、攝像頭的翻轉(zhuǎn)開關(guān)、麥克風(fēng)的開關(guān)。
A、B 端觀眾的房間實(shí)時(shí)消息的發(fā)送接收。
接下來,我們將根據(jù)上述提到的具體功能展開為大家介紹:
(1)針對(duì)于電影播放功能的流程介紹
A 端觀眾通過后臺(tái)設(shè)置的 RoomID 成功登錄房間,如果輸入的 RoomID 不存在,就會(huì)通過判斷當(dāng)前 A 端是房間內(nèi)第一人,退出房間提示房間不存在;或者房間內(nèi)已經(jīng)滿員就會(huì)登錄失敗并提示 房間已滿員。
?* ?點(diǎn)擊電影播放按鈕 ?setRoomExtraInfo() 進(jìn)行消息的通知
?* ?后臺(tái)手機(jī)端 收到 onRoomExtraInfoUpdate() 的回調(diào) 進(jìn)行電影的播放
?* ?觀眾端會(huì)收到電影播放的推流 ,獲取電影推流 StreamID 進(jìn)行拉流播放
B 端?通過輸入 RoomID 進(jìn)入播放房間 ,進(jìn)行電影的拉流顯示:
AB端觀眾都可以通過 setRoomExtraInfo(String roomID,String key,String value,null) 來對(duì)視頻媒體進(jìn)行 播放/暫停。
AB端觀眾都可以通過 setRoomExtraInfo(String roomID,String key,String value,null) 來對(duì)視頻媒體進(jìn)行 播放/暫停。
一起看電影 setRoomExtraInfo 的參數(shù)意義如下:
key: roomInfo
value: ?0 、1、2、3
0: 代表load start 電影
1:電影是播放狀態(tài)
2:電影是暫停狀態(tài)
3:房間已經(jīng)被關(guān)閉
(2)針對(duì)于音視頻推拉流的過程
通過 ZEGO 音視頻服務(wù)進(jìn)行推拉流
A端觀眾進(jìn)入房間后,向 ZEGO 音視頻云服務(wù)推流,需要自己生成唯一的 StreamID ,然后開始預(yù)覽并推流。等到B端觀眾進(jìn)入房間后,會(huì)收到SDK 的流更新通知,從中篩選出 B端觀眾流 StreamID 進(jìn)行拉流
B端觀眾進(jìn)入房間后,向 ZEGO 音視頻云服務(wù)推流,需要自己生成唯一的 StreamID ,然后開始預(yù)覽并推流。同時(shí)篩選出 A端觀眾流 StreamID 進(jìn)行拉流
AB端觀眾可以各自控制自己的 翻轉(zhuǎn)攝像頭、開/關(guān)攝像頭、開/關(guān)麥克風(fēng) 的功能:
都是跟推拉流有關(guān),則以用戶 A 拉取用戶 B 的流為例,流程如下圖:
想要了解更加具體的實(shí)現(xiàn)流程,可參考官方文檔?音視頻實(shí)現(xiàn)流程。
(3)針對(duì)于房間實(shí)時(shí)聊天消息的發(fā)送顯示
AB 端觀眾都可以在房間內(nèi)發(fā)送消息;
調(diào)用 sendBroadcastMessage 接口向同一房間內(nèi)的B端觀眾發(fā)送廣播消息,長(zhǎng)度不能超過 1024 字節(jié)。通過 onIMSendBroadcastMessageResult 回調(diào)獲取消息發(fā)送結(jié)果;
實(shí)現(xiàn) IZegoEventHandler 中的 onIMRecvBroadcastMessage 回調(diào),當(dāng)發(fā)送方成功發(fā)送廣播消息后,同一房間內(nèi)的其他用戶通過此回調(diào)接收相關(guān)信息,包括消息內(nèi)容、消息 ID、發(fā)送時(shí)間及發(fā)送方信息。
發(fā)送接收到的消息顯示到UI界面。
四、效果呈現(xiàn)(附 demo 源碼下載)
01
播放電影端的效果圖
(電影播放端)
02
觀眾端的效果圖
(電影觀眾端)
(電影播放時(shí)示意圖)
附上demo給大家進(jìn)行體驗(yàn),一起看電影一共分為兩部分,安裝密碼為 1:
1)服務(wù)端demo :?https://www.pgyer.com/hLnW
2)客戶端demo :? ?https://www.pgyer.com/d4uU
安裝方式如下:
1)先啟動(dòng) 服務(wù)端demo ,選擇電影設(shè)置房間ID;
2)客戶端 demo 通過輸入設(shè)置的房間ID 進(jìn)入播放電影房。
源碼下載:https://pan.baidu.com/s/1lU_B_MQ4wK4bZQT90xBrCQ(密碼:qrep)
五、結(jié)語
牛頓曾說:我看得遠(yuǎn),是因?yàn)槲艺驹诰奕说募绨蛏?
基于 ZEGO 即構(gòu)科技的音視頻功能,一番操作下來,很簡(jiǎn)單就開發(fā)出來一款《一起看電影》的 demo,總體來說還是很簡(jiǎn)單就可以實(shí)現(xiàn)的。
讓異地戀女友開心的方法近在咫尺,趕快行動(dòng)起來體驗(yàn)音視頻開發(fā)的樂趣吧!
掃描圖中二維碼或點(diǎn)擊閱讀原文
了解大會(huì)更多信息
總結(jié)
以上是生活随笔為你收集整理的如何解决和异地女朋友一起看电影的需求?(内附源码)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: LiveVideoStack Meet
 - 下一篇: 对话RTP作者Ron Frederick