日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何解决和异地女朋友一起看电影的需求?(内附源码)

發(fā)布時間:2024/4/11 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何解决和异地女朋友一起看电影的需求?(内附源码) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、這是一件悲傷的故事

我是一名程序員,我和我的女友是異地戀,so sad!!!

一次視頻時,她突然來了一句:“我們已經(jīng)很久沒有一起看電影了吧。。。。。。”

“呃。。。好像是”,畢竟離得那么遠(yuǎn),一起看電影有點(diǎn)難啊。

女友“哦”了下,我們便陷入了沉默。

視頻結(jié)束,心情有點(diǎn)憂傷。是啊,已經(jīng)很久沒有好好陪她了吧。

突然想到市面上有不少可以一起看電影的APP。找了下,確實(shí)不少,像微光之類的 APP 人氣都很火。下載了一個,發(fā)現(xiàn)還是挺有意思的,確實(shí)能解決異地一起看電影的需求。

于是“啪”的一下,靈光一現(xiàn),哄女友開心的方法有了,哦耶!!!我可以自己去實(shí)現(xiàn)一個 demo 呀!

作為一名優(yōu)質(zhì)的程序員,鑒于職業(yè)探索精神以及在 ZEGO 即構(gòu)科技的從業(yè)經(jīng)驗(yàn),想到實(shí)現(xiàn)一個類似功能的 demo 還是很可以的。

說干就干,熬夜小 case,通宵搞出了demo,效果如下:

前面鋪設(shè)了這么長,相信你們也不是來看我曬狗糧的(狗頭保命)。那么現(xiàn)在就和我一起來看看我是怎么實(shí)現(xiàn)這個讓女朋友歡心的“一起看電影”的功能吧,文章有點(diǎn)長,但是絕對很干貨,大家可以耐心看完。

二、開始準(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

賬戶注冊

開發(fā)環(huán)境搭建好之后,我們需要去 ZEGO 官網(wǎng)注冊一個賬戶,進(jìn)入管理控制臺并創(chuàng)建應(yīng)用、獲取開發(fā)需要的 AppId 和 AppSign 。

具體的創(chuàng)建應(yīng)用過程詳見此文章:??控制臺創(chuàng)建項(xiàng)目流程。

三、實(shí)現(xiàn)流程介紹

01

接口規(guī)范說明

首先分析 ZEGO 的 API 輸入輸出規(guī)范。根據(jù)?API使用文檔?來看,調(diào)用接口格式如下:

以創(chuàng)建 ZegoExpressEngine 單列對象為列,每個參數(shù)都詳細(xì)的解析其作用。每個接口都描述了作用與用法。

02

一起看電影的項(xiàng)目開發(fā)

接下來就萬事俱備了,跟著我來著手實(shí)操一下,看具體怎么實(shí)現(xiàn)一起看電影的項(xiàng)目。

項(xiàng)目分為兩部分:播放本地電影的服務(wù)端、拉流播放電影的客戶端。下面會進(jìn)行每個部分的詳細(xì)介紹。

項(xiàng)目設(shè)置了最大用戶數(shù)為3人,服務(wù)端占了一位,所以客戶端只能同時兩人在線觀看電影(悄咪咪,確保你們兩個人之間不會出現(xiàn)第三者)。

1、服務(wù)端 —— 播放電影服務(wù)端的實(shí)現(xiàn)流程

  • 步驟一:?創(chuàng)建 ZegoExpressEngine 引擎:

/** 定義 SDK 引擎對象 */ ZegoExpressEngine engine; /** 填寫 appID 和 appSign */ long appID = ; /** 請通過官網(wǎng)注冊獲取,格式為 123456789L */ String appSign = ; /** 64個字符,請通過官網(wǎng)注冊獲取,格式為"0123456789012345678901234567890123456789012345678901234567890123" */ /** 創(chuàng)建引擎,使用測試環(huán)境,通用場景接入 */ engine?=?ZegoExpressEngine.createEngine(appID,?appSign,?true,?ZegoScenario.GENERAL,?getApplication(),?null);
  • 步驟二:開啟自定義視頻采集功能:

ZegoCustomVideoCaptureConfig videoCaptureConfig = new ZegoCustomVideoCaptureConfig(); // 選擇 RAW_DATA 類型視頻幀數(shù)據(jù) videoCaptureConfig.bufferType = ZegoVideoBufferType.RAW_DATA; engine.enableCustomVideoCapture(true, videoCaptureConfig, ZegoPublishChannel.MAIN);
  • 步驟三:設(shè)置自定義視頻采集回調(diào)對象并實(shí)現(xiàn)對應(yīng)方法:

// 將自身作為自定義視頻采集回調(diào)對象 sdk.setCustomVideoCaptureHandler(new IZegoCustomVideoCaptureHandler() { @Override public void onStart(ZegoPublishChannel channel) { // 收到回調(diào)后,開發(fā)者需要執(zhí)行啟動視頻采集相關(guān)的業(yè)務(wù)邏輯,例如開啟攝像頭等 ... } @Override public void onStop(ZegoPublishChannel channel) { // 收到回調(diào)后,開發(fā)者需要執(zhí)行停止視頻采集相關(guān)的業(yè)務(wù)邏輯,例如關(guān)閉攝像頭等 ... }});
  • ?步驟四:選擇要播放的電影,設(shè)置房間ID。然后登錄房間,將收到自定義視頻采集回調(diào)通知開始采集:

/** 創(chuàng)建用戶 */ ZegoUser user = new ZegoUser("user1"); /** 開始登錄房間 */ engine.loginRoom("room1", user);mZegoMediaPlayer.setVideoHandler(new IZegoMediaPlayerVideoHandler() {@Overridepublic void onVideoFrame(ZegoMediaPlayer zegoMediaPlayer, ByteBuffer[] byteBuffers, int[] ints, ZegoVideoFrameParam zegoVideoFrameParam) {} }, ZegoVideoFrameFormat.RGBA32);
  • ?步驟五:當(dāng)客戶端發(fā)送通知開始播放電影,就開始推流(電影流),預(yù)加載load 電影,開始播放start()

/**?開始推流?*/?engine.startPublishingStream("stream1");mZegoMediaPlayer.loadResource(path, new IZegoMediaPlayerLoadResourceCallback() {@Overridepublic void onLoadResourceCallback(int code) {if (code == 0) {mZegoMediaPlayer.start();if (callback != null) {callback.onLoadResourceCallback(code);}}} });
  • 步驟六:調(diào)用發(fā)送視頻幀方法 sendCustomVideoCaptureRawData 向 SDK 提供視頻幀數(shù)據(jù)。

// 將采集的數(shù)據(jù)傳給ZEGO SDK int 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);
  • 步驟七:當(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í)時消息的發(fā)送接收。

接下來,我們將根據(jù)上述提到的具體功能展開為大家介紹:

(1)針對于電影播放功能的流程介紹

  • A 端觀眾通過后臺設(shè)置的 RoomID 成功登錄房間,如果輸入的 RoomID 不存在,就會通過判斷當(dāng)前 A 端是房間內(nèi)第一人,退出房間提示房間不存在;或者房間內(nèi)已經(jīng)滿員就會登錄失敗并提示 房間已滿員。

    ?* ?點(diǎn)擊電影播放按鈕 ?setRoomExtraInfo() 進(jìn)行消息的通知

    ?* ?后臺手機(jī)端 收到 onRoomExtraInfoUpdate() 的回調(diào) 進(jìn)行電影的播放

    ?* ?觀眾端會收到電影播放的推流 ,獲取電影推流 StreamID 進(jìn)行拉流播放

  • B 端?通過輸入 RoomID 進(jìn)入播放房間 ,進(jìn)行電影的拉流顯示:

/** * 開始拉流,設(shè)置遠(yuǎn)端拉流渲染視圖,視圖模式采用 SDK 默認(rèn)的模式,等比縮放填充整個 View * 如下 play_view 為 UI 界面上的 SurfaceView/TextureView/SurfaceTexture 對象 */ engine.startPlayingStream("stream1",?new?ZegoCanvas(play_view));
  • AB端觀眾都可以通過 setRoomExtraInfo(String roomID,String key,String value,null) 來對視頻媒體進(jìn)行 播放/暫停。


  • AB端觀眾都可以通過 setRoomExtraInfo(String roomID,String key,String value,null) 來對視頻媒體進(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)針對于音視頻推拉流的過程

    • 通過 ZEGO 音視頻服務(wù)進(jìn)行推拉流

    • A端觀眾進(jìn)入房間后,向 ZEGO 音視頻云服務(wù)推流,需要自己生成唯一的 StreamID ,然后開始預(yù)覽并推流。等到B端觀眾進(jìn)入房間后,會收到SDK 的流更新通知,從中篩選出 B端觀眾流 StreamID 進(jìn)行拉流

    • B端觀眾進(jìn)入房間后,向 ZEGO 音視頻云服務(wù)推流,需要自己生成唯一的 StreamID ,然后開始預(yù)覽并推流。同時篩選出 A端觀眾流 StreamID 進(jìn)行拉流

    • AB端觀眾可以各自控制自己的 翻轉(zhuǎn)攝像頭、開/關(guān)攝像頭、開/關(guān)麥克風(fēng) 的功能:

    //切換前后攝像頭 front 是否采用前置攝像頭;true 表示使用前置攝像頭;false 表示使用后置攝像頭 expressEngine.useFrontCamera(front);// 開/關(guān)攝像頭 enable 是否打開攝像頭;true 表示打開攝像頭;false 表示關(guān)閉攝像頭 expressEngine.enableCamera(enable);// 是否開啟麥克風(fēng) enable 是否開啟麥克風(fēng);true 表示開啟麥克風(fēng);false 表示靜音(關(guān)閉)麥克風(fēng) expressEngine.muteMicrophone(!enable);

    都是跟推拉流有關(guān),則以用戶 A 拉取用戶 B 的流為例,流程如下圖:

    想要了解更加具體的實(shí)現(xiàn)流程,可參考官方文檔?音視頻實(shí)現(xiàn)流程。

    (3)針對于房間實(shí)時聊天消息的發(fā)送顯示

    • AB 端觀眾都可以在房間內(nèi)發(fā)送消息;

    • 調(diào)用 sendBroadcastMessage 接口向同一房間內(nèi)的B端觀眾發(fā)送廣播消息,長度不能超過 1024 字節(jié)。通過 onIMSendBroadcastMessageResult 回調(diào)獲取消息發(fā)送結(jié)果;

    // 發(fā)送廣播消息,每個登錄房間的用戶都會通過 onIMRecvBroadcastMessage 回調(diào)收到此消息【發(fā)送方不會收到該回調(diào)】 engine.sendBroadcastMessage(roomID, msg, new IZegoIMSendBroadcastMessageCallback() { /** 發(fā)送廣播消息結(jié)果回調(diào)處理 */ @Override public void onIMSendBroadcastMessageResult(int errorCode, long messageID) { //發(fā)送消息結(jié)果成功或失敗的處理 }});
    • 實(shí)現(xiàn) IZegoEventHandler 中的 onIMRecvBroadcastMessage 回調(diào),當(dāng)發(fā)送方成功發(fā)送廣播消息后,同一房間內(nèi)的其他用戶通過此回調(diào)接收相關(guān)信息,包括消息內(nèi)容、消息 ID、發(fā)送時間及發(fā)送方信息。

    /** * 接收房間彈幕消息通知 * * @param roomID 房間 ID * @param messageList 收到的消息列表 */ public void onIMRecvBarrageMessage(String roomID, ArrayList<ZegoBarrageMessageInfo> messageList){ // 收到其他用戶發(fā)送消息的處理 }
    • 發(fā)送接收到的消息顯示到UI界面。

    四、效果呈現(xiàn)(附 demo 源碼下載)

    01

    播放電影端的效果圖

    (電影播放端)

    02

    觀眾端的效果圖

    (電影觀眾端)

    (電影播放時示意圖)

    附上demo給大家進(jìn)行體驗(yàn),一起看電影一共分為兩部分,安裝密碼為 1:

    1)服務(wù)端demo :?https://www.pgyer.com/hLnW

    2)客戶端demo :? ?https://www.pgyer.com/d4uU

    安裝方式如下:

    1)先啟動 服務(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)科技的音視頻功能,一番操作下來,很簡單就開發(fā)出來一款《一起看電影》的 demo,總體來說還是很簡單就可以實(shí)現(xiàn)的。

    讓異地戀女友開心的方法近在咫尺,趕快行動起來體驗(yàn)音視頻開發(fā)的樂趣吧!


    掃描圖中二維碼或點(diǎn)擊閱讀原文

    了解大會更多信息

    總結(jié)

    以上是生活随笔為你收集整理的如何解决和异地女朋友一起看电影的需求?(内附源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。