如何解决和异地女朋友一起看电影的需求?(内附源码)
一、這是一件悲傷的故事
我是一名程序員,我和我的女友是異地戀,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 引擎:
步驟二:開啟自定義視頻采集功能:
步驟三:設置自定義視頻采集回調對象并實現對應方法:
?步驟四:選擇要播放的電影,設置房間ID。然后登錄房間,將收到自定義視頻采集回調通知開始采集:
?步驟五:當客戶端發送通知開始播放電影,就開始推流(電影流),預加載load 電影,開始播放start()
步驟六:調用發送視頻幀方法 sendCustomVideoCaptureRawData 向 SDK 提供視頻幀數據。
步驟七:當客戶端沒有觀眾在房間或者服務器退出播放房間,結束推流將收到自定義視頻采集回調通知停止采集。
2、客戶端——拉流播放電影客戶端的實現流程
?首先,播放電影的客戶端分別有以下幾項功能:
A、B 端觀眾的電影拉流渲染、電影播放\暫停。
A、B 端觀眾音視頻的推拉流、攝像頭的翻轉開關、麥克風的開關。
A、B 端觀眾的房間實時消息的發送接收。
接下來,我們將根據上述提到的具體功能展開為大家介紹:
(1)針對于電影播放功能的流程介紹
A 端觀眾通過后臺設置的 RoomID 成功登錄房間,如果輸入的 RoomID 不存在,就會通過判斷當前 A 端是房間內第一人,退出房間提示房間不存在;或者房間內已經滿員就會登錄失敗并提示 房間已滿員。
?* ?點擊電影播放按鈕 ?setRoomExtraInfo() 進行消息的通知
?* ?后臺手機端 收到 onRoomExtraInfoUpdate() 的回調 進行電影的播放
?* ?觀眾端會收到電影播放的推流 ,獲取電影推流 StreamID 進行拉流播放
B 端?通過輸入 RoomID 進入播放房間 ,進行電影的拉流顯示:
AB端觀眾都可以通過 setRoomExtraInfo(String roomID,String key,String value,null) 來對視頻媒體進行 播放/暫停。
AB端觀眾都可以通過 setRoomExtraInfo(String roomID,String key,String value,null) 來對視頻媒體進行 播放/暫停。
一起看電影 setRoomExtraInfo 的參數意義如下:
key: roomInfo
value: ?0 、1、2、3
0: 代表load start 電影
1:電影是播放狀態
2:電影是暫停狀態
3:房間已經被關閉
(2)針對于音視頻推拉流的過程
通過 ZEGO 音視頻服務進行推拉流
A端觀眾進入房間后,向 ZEGO 音視頻云服務推流,需要自己生成唯一的 StreamID ,然后開始預覽并推流。等到B端觀眾進入房間后,會收到SDK 的流更新通知,從中篩選出 B端觀眾流 StreamID 進行拉流
B端觀眾進入房間后,向 ZEGO 音視頻云服務推流,需要自己生成唯一的 StreamID ,然后開始預覽并推流。同時篩選出 A端觀眾流 StreamID 進行拉流
AB端觀眾可以各自控制自己的 翻轉攝像頭、開/關攝像頭、開/關麥克風 的功能:
都是跟推拉流有關,則以用戶 A 拉取用戶 B 的流為例,流程如下圖:
想要了解更加具體的實現流程,可參考官方文檔?音視頻實現流程。
(3)針對于房間實時聊天消息的發送顯示
AB 端觀眾都可以在房間內發送消息;
調用 sendBroadcastMessage 接口向同一房間內的B端觀眾發送廣播消息,長度不能超過 1024 字節。通過 onIMSendBroadcastMessageResult 回調獲取消息發送結果;
實現 IZegoEventHandler 中的 onIMRecvBroadcastMessage 回調,當發送方成功發送廣播消息后,同一房間內的其他用戶通過此回調接收相關信息,包括消息內容、消息 ID、發送時間及發送方信息。
發送接收到的消息顯示到UI界面。
四、效果呈現(附 demo 源碼下載)
01
播放電影端的效果圖
(電影播放端)
02
觀眾端的效果圖
(電影觀眾端)
(電影播放時示意圖)
附上demo給大家進行體驗,一起看電影一共分為兩部分,安裝密碼為 1:
1)服務端demo :?https://www.pgyer.com/hLnW
2)客戶端demo :? ?https://www.pgyer.com/d4uU
安裝方式如下:
1)先啟動 服務端demo ,選擇電影設置房間ID;
2)客戶端 demo 通過輸入設置的房間ID 進入播放電影房。
源碼下載:https://pan.baidu.com/s/1lU_B_MQ4wK4bZQT90xBrCQ(密碼:qrep)
五、結語
牛頓曾說:我看得遠,是因為我站在巨人的肩膀上!
基于 ZEGO 即構科技的音視頻功能,一番操作下來,很簡單就開發出來一款《一起看電影》的 demo,總體來說還是很簡單就可以實現的。
讓異地戀女友開心的方法近在咫尺,趕快行動起來體驗音視頻開發的樂趣吧!
掃描圖中二維碼或點擊閱讀原文
了解大會更多信息
總結
以上是生活随笔為你收集整理的如何解决和异地女朋友一起看电影的需求?(内附源码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LiveVideoStack Meet
- 下一篇: 对话RTP作者Ron Frederick