1. 程式人生 > >EasyPusher Android實時推送當前螢幕畫面

EasyPusher Android實時推送當前螢幕畫面

由於Android 5.0提供了捕獲當前螢幕畫面的SDK,基於該SDK,EasyPusher實現了實時推送手機螢幕畫面的功能。經測試,效果很不錯,延遲也比較低,畫面也比較流暢。該功能可運用到小型會議PPT演示、手遊直播等行業。

具體來說,MediaProjection 類可以將當前螢幕畫面採集到一個surface裡面,而MediaCodec可以從一個surface裡面獲取視訊資料來源。我們讓MediaProjection投射到MediaCodec建立的Surface,MediaCodec就可以獲取到MediaProjection投射的視訊了。如圖所示:

Created with Raphaël 2.1.0
MediaProjectionMediaProjectionSurfaceSurfaceMediaCodecMediaCodecEasyPusherEasyPusher投射螢幕提供視訊源編碼編碼資料通過Pusher推送

在這裡就不再詳細描述程式碼的實現,主要介紹下兩個介面:

VirtualDisplay createVirtualDisplay (String name, 
                int width, 
                int height, 
                int dpi, 
                int flags, 
                Surface surface, 
                VirtualDisplay.Callback callback, 
                Handler handler)
Creates a VirtualDisplay to
capture the contents of the screen. Parameters name String: The name of the virtual display, must be non-empty. 要建立的投射器的名稱,非空 width int: The width of the virtual display in pixels. Must be greater than 0. 投射後視訊的寬度,這裡的寬度就是實際上後面MediaCodec初始化的寬度. height int: The height of the virtual display in pixels. Must be greater than
0. 投射後視訊的高度,這裡的寬度就是實際上後面MediaCodec初始化的高度. dpi int: The density of the virtual display in dpi. Must be greater than 0. 投射器的畫素密度,未理解啥意思,我們直接用DisplayMetrics的densityDpi即可. flags int: A combination of virtual display flags. See DisplayManager for the full list of flags. 我們傳 DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR|DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC|DisplayManager.VIRTUAL_DISPLAY_FLAG_PRESENTATION 即可。 surface Surface: The surface to which the content of the virtual display should be rendered, or null if there is none initially. 投射器要投射到的Surface callback VirtualDisplay.Callback: Callback to call when the virtual display's state changes, or null if none. 投射器更改後的狀態回撥,我們這裡不需要,傳null即可。 handler Handler: The Handler on which the callback should be invoked, or null if the callback should be invoked on the calling thread's main Looper. 回撥函式將在該Handler所在的執行緒呼叫,我們也不需要,傳null即可。
createInputSurface

Surface createInputSurface ()
Requests a Surface to use as the input to an encoder, in place of input buffers. 

該介面建立一個作為編碼器輸入的Surface。

然後,將後者得到的Surface作為第6個引數傳給前者,前者就可以獲取到螢幕資料了~

如下圖所示,在VLC訪問RTSP地址,即可看到螢幕直播。

VLC裡的手機實時螢幕影象

相關推薦

EasyPusher Android實時當前螢幕畫面

由於Android 5.0提供了捕獲當前螢幕畫面的SDK,基於該SDK,EasyPusher實現了實時推送手機螢幕畫面的功能。經測試,效果很不錯,延遲也比較低,畫面也比較流暢。該功能可運用到小型會議PPT演示、手遊直播等行業。 具體來說,MediaProjec

EasyPusher實現Android手機螢幕桌面直播,實時操作畫面,用於手遊直播等應用

本文轉自EasyDarwin開源團隊成員John的部落格:http://blog.csdn.net/jyt0551/article/details/52651194由於Android 5.0提供了捕獲當前螢幕畫面的SDK,基於該SDK,EasyPusher實現了實時推送手機螢

Android 基於Socket的長連線實現一個實時的功能

實現此功能需要考慮的幾點: 1)如何保證Socket長連線一直存在並有效執行 2)通過Service執行Socket,當服務端有資料時,通過廣播或者handler來更新UI 具體效果,來上程式碼: @Override public void run() { try

android 極光 聲音與振動 的關閉和開啟

fff getc 用法 koa pub tar brush asi drawable   前言:最近剛好在寫一些推送方面的東西,又是新手,不斷在網上找資料,很少,不過還是找到了一些,反正百度我是再也不想百度了,谷歌一下子就能找到想要的。   廢話不多說。  

Android實現方式解決方案

都是 device andro broker dev 常見 剛才 設置 互聯網  本文介紹在Android中實現推送方式的基礎知識及相關解決方案。推送功能在手機開發中應用的場景是越來起來了,不說別的,就我們手機上的新聞客戶端就時不j時的推送過來新的消息,很方便的閱讀最新的新

Android push消息到達成功率優化

發送消息 data- 得到 推斷 view 使用 數據 數據庫 blog Android push推送消息到達成功率優化 問題:server向client發送消息。

基於Netty實現的Android 訊息(即時通訊)的解決方案

根據Netty框架實現訊息推送(即時聊天)功能. Netty框架,TCP長連線,心跳,阻塞訊息佇列,執行緒池處理訊息傳送, 基於Google ProtoBuf自定義的訊息協議, TCP粘包/拆包.... 客戶端通過TCP連線到伺服器,並建立TCP長連線;當伺服器端收到新訊息後通過TCP連線推送給

最新大前端DUX5.0模板|支援百度熊掌號+文章實時原創保護去除授權限制|價值799元

DUX主題5.0版本更新內容: 支援百度熊掌號,在主題設定-百度熊掌號中開啟 支援百度熊掌號 – 粉絲關注按鈕,包括吸頂bar、文章段落間bar、底部bar 支援百度熊掌號 – 新增JSON_LD資料的功能 支援百度熊掌號 – 新增文章實時推送 支援百度熊掌號 – 新增原創保護文章實時推送(編輯

JavaScript仿通知欄新訊息實時更新效果

用到websocket做訊息推送,其中有這樣的一個效果,在訊息列表的模組,接收到很多條資訊,展示在介面的是最近的十條接受到的訊息,實時更新模組,每次接受一條訊息,都會展示在最頂部,舊的訊息排列在地下,大致效果如下所示。 用js仿寫了一個簡單的,關於通知欄新訊息實時推送更新效果,程式碼如下:

WebSocket實時訊息

廢話不多說,直接上程式碼,本人親自測試,可以使用。 前臺js程式碼: var websocket; var path = window.location.host+"/web-socket"; // 首先判斷是否 支援 WebSocket if('WebSocket' in windo

轉載自-亭鈺wang,php 訊息實時(反ajax

入口檔案index.html <!DOCTYPE HTML> <html> <head>     <title>反ajax推送</title>     <style>  

Android 小米(MiPush)的化簡深入理解

      小米推送(MiPush)是小米公司向開發者提供的訊息推送服務,總的流程如官方文件所示:      由圖可知,推送是雙向的:      1.推送是可以由app的後臺端發起,應用伺服器的後

WebSocket 教程,關於伺服器實時

原文出處: http://www.ruanyifeng.com/blog/2017/05/websocket.html WebSocket 是一種網路通訊協議,很多高階功能都需要它。 本文介紹 WebSocket 協議的使用方法。 一、為什麼需要 WebSocket?

web的實時技術--websocket

Python的tornado框架中,websocket允許瀏覽器和伺服器之間進行雙向,實時,持久的,全雙工通訊。協議本身使用 ws://URL的格式,如果是加密的websocket則使用的是wss://URL websocket和其他方式的比較: 1、http協

Android 信鴿整合

本文是基於3.+的版本,在整合4.+的版本中,整合mid包時遇到一個問題 Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be s

android pn是出現reomte-server-error(502)

07-23 17:18:33.249: E/Androidpn_XmppManager(17600): XMPP connection failed 07-23 17:18:33.249: E/Androidpn_XmppManager(17600): XMPPError connecti

長連線資料實時方案(iOS)

原文連結:www.jianshu.com/p/7e97af441… 由於業務需求,需要實現實時獲取服務端更新的資料功能,基於這個需求,進行調研及技術方案的實施,最終決定採用MQTT +ProtocolBuffer基於長連線的資料實時推送的方案;具體實現方案見本文; 本文包括三個部分:1.技術選型

WebSocket實現實時資料到前端

@Component @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer{ @Resource goodsWebSocketHandler handler;

關於用微軟實時SignalR的相關bug

常見錯誤一 未能載入檔案或程式集“Microsoft.Owin”或它的某一個依賴項。找到的程式集清單定義與程式集引用不匹配。 (異常來自 HRESULT:0x80131040) 具體錯誤如下圖: 解決方案: 1、常看bin目錄下有沒有對應的檔案:例如Microsoft.

Asp.net SignalR 實現服務端訊息實時到所有Web端

ASP .NET SignalR是一個ASP .NET 下的類庫,可以在ASP .NET 的Web專案中實現實時通訊。實際上 Asp.net SignalR 2 實現 服務端訊息推送到Web端, 更加簡單