在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

WifiDisplay(Miracast)技術原理及實現方案

哆啦安全 ? 來源:哆啦安全 ? 2023-11-16 17:01 ? 次閱讀

1. WifiDisplay簡介

Wi-Fi Display經常和Miracast聯系在一起。實際上,Miracast是Wi-Fi聯盟(Wi-Fi Alliance)對支持Wi-Fi Display功能的設備的認證名稱。通過Miracast認證的設備將在最大程度內保持對Wi-Fi Display功能的支持和兼容。

Miracast的Android實現涉及到系統的多個模塊,包括:

1. MediaPlayerService及相關模塊

原因很明顯,因為Miracast本身就牽扯到RTP/RTSP及相應的編解碼技術。

2. SurfaceFlinger及相關模塊

SurfaceFlinger的作用是將各層UI數據混屏并投遞到顯示設備中去顯示。現在,SurfaceFlinger將支持多個顯示設備。而支持Miracast的遠端設備也做為一個獨立的顯示設備存在于系統中。

3. WindowManagerService及相關模塊

WindowManagerService用于管理系統中各個UI層的位置和屬性。由于并非所有的UI層都會通過Miracast投遞到遠端設備上。例如手機中的視頻可投遞到遠端設備上去顯示,但假如在播放過程中,突然彈出一個密碼輸入框(可能是某個后臺應用程序發起的),則這個密碼輸入框就不能投遞到遠端設備上去顯示。所以,WindowManagerService也需要修改以適應Miracast的需要。

4. DisplayManagerService及相關模塊

DisplayManagerService服務是Android 4.2新增的,用于管理系統中所有的Display設備。

5. WifiService及相關模塊

WifiDisplay協議的實現建立在WifiP2P的基礎上,其中涉及的Wifi技術包括WiFi-Direct(WiFi P2P)、Wi-Fi Protected Setup(Wifi網絡自動配置及添加網絡)、11n/WMM/WPA2(11n就是802.11n協議,它將11a和11g提供的Wi-Fi傳輸速率從56Mbps提升到300甚至600Mbps。WMM是Wi-Fi Multimedia的縮寫,是一種針對實時視音頻數據的QoS服務。而WPA2意為Wi-Fi Protected Acess第二版,主要用來給傳輸的數據進行加密保護)。

圖1 給出了WFD涉及的技術及協議框圖,基于WifiP2P網絡技術,利用RTSP作為音頻及視頻流控制協議,涉及了流媒體的傳輸、控制、加密、解密、編碼及解碼等技術流程。

WFD中涉及的技術層面比較多,相關的協議也比較多,包括了WIFI P2P技術、RTSP及RTP技術、流媒體技術以及音視頻編解碼相關的技術,如果要對WFD有比較深入的了解,還需要花費較多的時間去研究相關的技術細節。

2867c8ee-8458-11ee-939d-92fbcf53809c.png

圖1 WFD涉及的技術及協議框圖

2. WifiDisplay協議流程

建立WifiDisplay主要步驟如下:

1. WFD Device Discovery(WFD設備發現)

2. WFD Service Discovery (Optional)(WFD服務發現(可選))

3. Device Selection(設備選擇)

4. WFD Connection Setup(WFD連接)

5. WFD Capability Negotiation(WFD能力協商)

6. WFD Session Establishment(WFD會話建立)

7. User Input Back Channel Setup (Optional)(UIBC反向控制)

8. Link Content Protection Setup (Optional)(內容保護,即數據加密)

9. Payload Control(負載控制)

10. WFD Source and WFD Sink standby (Optional)

11. WFD Session Teardown(會話終止)

WFD設備通過wifiP2P連接后,Sink端與Source端建立TCP連接,Sink端為Client而Source端為Server。默認端口為7236,執行的協議為RTSP協議。建立連接后進行RTSP協商。步驟6,協商成功后建立會話;步驟7,UIBC通道建立,用于Sink端反向控制Source端,該步驟為可選實現;步驟8,對與傳輸的內容做加密保護(HDCP),步驟9,開始音頻及視頻流的傳輸與控制,Payload Control:傳輸過程中,設備可根據無線信號的強弱,甚至設備的電量狀況來動態調整傳輸數據和格式。可調整的內容包括壓縮率,視音頻格式,分辨率等內容。步驟11,會話終止。

288366e4-8458-11ee-939d-92fbcf53809c.png

圖 2 會話建立及協商過程圖

RTSP M1和M2主要協商Source和Sink都支持的RTSP methods。
RTSP M3和M4主要協商Source和Sink在會話中使用的參數

28aea782-8458-11ee-939d-92fbcf53809c.png

圖3 RTSP協議控制圖

當RTSP M7的請求和響應消息成功交換完成,WFD Source及WFD Sink之間就建立了會話。

RTSP協議控制中主要有以下幾種狀態SETUP、PLAY、PAUSE、TEARDOWN

通過下面命令抓取了WifiDisplay相關的協議包,主要是RTSP控制流相關的協議包。

tcpdump -i any -w /savePath

具體的協議包相關的內容如圖4所示,協議中相關的流程及步驟和圖1、2中的交互流程是一致的,具體包括以下幾個主要步驟OPTIONS、GET_PARAMETER、SET_PARAMETER、 SETUP、PLAY、TEARDOWN等,這些都是RTSP中相關的協議內容。

當Source與Sink設備完成PLAY的交互后,Source端便開始傳輸音頻及視頻流給Sink端,Sink端作為被動接收端,只需要在P2P interface的19000(默認的RTP數據傳輸端口)綁定監聽接收來自Source端的數據流對相關的音視頻流做處理即可。圖5給出了音視頻流的協議包,可以看到音視頻的傳輸通過MPEG TS、MPEG PES等相關協議作為傳輸載體。

28c75a98-8458-11ee-939d-92fbcf53809c.png

圖4 完整RTSP協商流程,協商的內容主要是視頻流的控制方法及支持的音頻及視頻格式

28f995da-8458-11ee-939d-92fbcf53809c.png

圖5 完成協商后開始傳輸音頻及視頻流,即TS包及PES包

對于WifiDisplay會話管理有以下模型可供參考,該結構大致分為四個層次, UI、 Session Policy Management、協議實現層及基于Wifi的網絡傳輸層。在協議實現層中主要分為幾個模塊WFD Ddiscovery、WFD Link Establishment、 UIBC、Capability Negotiation、Session/Stream Control等。

290f0d02-8458-11ee-939d-92fbcf53809c.png

圖6 WFD設備會話管理的模型

292e833a-8458-11ee-939d-92fbcf53809c.png

圖7 音頻及視頻流控制模型

實時流協議RTSP是一個應用層協議,用于控制具有實時特性的數據(例如多媒體流)的傳送。RTSP協議一般與RTP/RTCP和RSVP等底層協議一起協同工作,提供基于Internet的整套的流服務。它可以選擇發送通道(例如:UDP、組播UDP和TCP)和基于RTP的發送機制。它可以應用于組播和點播。RTP, RTCP,RSVP 定義如下:

1. 實時傳輸協議RTP(Real-time Transport protocol)

2. 實時傳輸控制協議RTCP(Real-time Transport Control protocol)

3. 實時流協議RTSP(Real Time Streaming protocol)

4. 資源預留協議RSVP(Resource Reserve Protocol)

客戶端與服務器運行實時流控制協議RTSP,以對該流進行各種VCR控制信號的交換,如播放(PLAY)、停止(PAUSE)、快進、快退等。當服務完畢,客戶端提出拆線(TEARDOWN)請求。服務器使用RTP/UDP協議將媒體數據傳輸給客戶端,一旦數據抵達客戶端,客戶端應用程序即可播放輸出。在流式傳輸中,使用RTP/RTCP/UDP和RTSP/TCP兩種不同的通信協議在客戶端和服務器間建立聯系。

3. WifiDisplay顯示框架實現

為了實現WifiDisplay google在Android現有顯示系統的基礎上加入的虛擬設備的支持,下圖給出了Android顯示系統的架構圖。

2944d4d2-8458-11ee-939d-92fbcf53809c.png

圖8 DisplayDevice的隔離示意圖

2958bc7c-8458-11ee-939d-92fbcf53809c.png

圖9 Android圖層示意圖

1.WindowManagerService

管理窗口之間的關系。包括位置、優先級等。

2.SurfaceFlinger

負責對各個Surface按照Z-order進行Merge,然后把Merge之后的Buffer顯示到Display上。

3.DisplayManagerService

管理在系統中加載的各個Display。包括管理各個Display的生命周期,并且對各個Display進行配置。當Display狀態變化的時候向系統和應用程序發送通知。

void SurfaceFlinger::doComposition() {
    ATRACE_CALL();
    const bool repaintEverything = android_atomic_and(0, &mRepaintEverything);
    for (size_t dpy=0 ; dpy& hw(mDisplays[dpy]);
        if (hw->isDisplayOn() && (hw->getDisplayType() != DisplayDevice::DISPLAY_EXTERNAL)) {
            // transform the dirty region into this screen's coordinate space
            const Region dirtyRegion(hw->getDirtyRegion(repaintEverything));
            // repaint the framebuffer (if needed)
            doDisplayComposition(hw, dirtyRegion);
            hw->dirtyRegion.clear();
            hw->flip(hw->swapRegion);
            hw->swapRegion.clear();
        }
        // inform the h/w that we're done compositing
        hw->compositionComplete();
    }
    postFramebuffer();
}

SurfaceFlinger將遍歷系統中所有的DisplayDevice來完成各自的混屏工作。

297e0784-8458-11ee-939d-92fbcf53809c.png

圖10 WifiDisplay顯示模型

作為Wifi-Diplay Source的設備建立RTSP Server,將SurfaceFlinger merge的Buffer數據stream到Wifi-Diplay的peer端。作為Wifi-Diplay Sink的設備是一個RTSP的Client端,從peer端讀取數據,在built-in的Display上顯示。

4. Android WifiDisplay實現

4.1 Source端實現

基于Android6.0 代碼Source端入口在原生Settings->設備->顯示->投射,這個功能如果正常使用時,需要更改一個配置項。

true

該配置項路徑為

frameworks/base/core/res/res/values/config.xml
該入口的主要作用是掃描并發現sink設備。

4.1.1 設備掃描及發現

298fe774-8458-11ee-939d-92fbcf53809c.png

圖11 設備發現流程圖

當用戶點擊了optionMenu中enable wifi display選項時,會觸發相關的設備掃描及更新操作,在WifiDisplaySettings和WifiDisplayController都有注冊ContentObserver來監控這個值的變化。觸發設備掃描的是在WifiDisplayController中通過updateWfdEnableState()進行的,最終通過WifiP2pManager.requestPeers來完成設備的掃描工作,獲取掃描到的設備列表是在WifiDisplaySettings通過update(int changes)進行的。對于設備連接狀態的管理主要通過updateConnection()來進行。由于設備的連接過程是一個異步過程,所以在設備操作相關的過程中會反復調用updateConnection() 來判定設備狀態及更新連接操作。

private void update(int changes) {
    boolean invalidateOptions = false;
    // Update settings.
    if ((changes & CHANGE_SETTINGS) != 0) {
        mWifiDisplayOnSetting = Settings.Global.getInt(getContentResolver(),
                Settings.Global.WIFI_DISPLAY_ON, 0) != 0;
        mWifiDisplayCertificationOn = Settings.Global.getInt(getContentResolver(),
                Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, 0) != 0;
        mWpsConfig = Settings.Global.getInt(getContentResolver(),
            Settings.Global.WIFI_DISPLAY_WPS_CONFIG, WpsInfo.INVALID);
        // The wifi display enabled setting may have changed.
        invalidateOptions = true;
    }
    // Update wifi display state.
    if ((changes & CHANGE_WIFI_DISPLAY_STATUS) != 0) {
        mWifiDisplayStatus = mDisplayManager.getWifiDisplayStatus();
        // The wifi display feature state may have changed.
        invalidateOptions = true;
    }
    // Rebuild the routes.
    final PreferenceScreen preferenceScreen = getPreferenceScreen();
    preferenceScreen.removeAll();
    // Add all known remote display routes.
    final int routeCount = mRouter.getRouteCount();
    for (int i = 0; i < routeCount; i++) {
        MediaRouter.RouteInfo route = mRouter.getRouteAt(i);
        if (route.matchesTypes(MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY)) {
            preferenceScreen.addPreference(createRoutePreference(route));
        }
    }
    // Additional features for wifi display routes.
    if (mWifiDisplayStatus != null
            && mWifiDisplayStatus.getFeatureState() == WifiDisplayStatus.FEATURE_STATE_ON) {
        // Add all unpaired wifi displays.
        for (WifiDisplay display : mWifiDisplayStatus.getDisplays()) {
            if (!display.isRemembered() && display.isAvailable()
                    && !display.equals(mWifiDisplayStatus.getActiveDisplay())) {
                preferenceScreen.addPreference(new UnpairedWifiDisplayPreference(
                        getActivity(), display));
            }
        }
        // Add the certification menu if enabled in developer options.
        if (mWifiDisplayCertificationOn) {
            buildCertificationMenu(preferenceScreen);
        }
    }
    // Invalidate menu options if needed.
    if (invalidateOptions) {
        getActivity().invalidateOptionsMenu();
    }
}

29aa781e-8458-11ee-939d-92fbcf53809c.jpg

圖12 Source端 RTSP連接流程圖

下圖是Source端設備建立連接的流程圖,主要建立RSTP協議的Socket連接,通過接收Sink端的協議信息解析相關操作,代碼流程如下圖所示。

socket的建立主要在WidiSourceRtsp.cpp的prepareListenSocket函數中實現,并在這個socket上監聽是否有客戶端的連接請求, rtsp消息處理在cbHandleParserEvent中處理。

在WidiSession.cpp中RSTP及media event處理主要通過WorkHandler處理,相關消息處理在函數onMessageReceived中處理。

4.2 Sink端的實現

圖13 給出了sink端的實現框架圖,從框架圖可以看出APP主要和Sink API交互,Sink API和框架服務中的Wifi server 及 mediaserver交互,APP通過Control interface進行WFD相關的控制操作,底層狀態的接收則通過Events interface,也就是一些相關的回調方法來處。

29bc3f40-8458-11ee-939d-92fbcf53809c.png

圖13 Sink端 實現框架結構圖

29db6208-8458-11ee-939d-92fbcf53809c.png

圖 14 RTSP會話流程圖

29f4f04c-8458-11ee-939d-92fbcf53809c.png

圖15 WFD控制流程圖

圖14給出了Intel實現的sink端的RTSP會話管理流程圖,RTSP的協議實現主要通過C++實現,對于協商后相關的狀態反饋通過回調函數完成,如果想進一步了解相關的流程,請查看相關的代碼。

圖15 給出了WFD會話管理的流程圖,WFD中除了RTSP的實現,還包括連接認證(Connection Auth)、視頻流加密及解密(HDCP)、UIBC實現等。

4.2.1 設備如何被發現

init P2P channel

mP2pManager = (WifiP2pManager) context.getSystemService(Context.WIFI_P2P_SERVICE);
Looper looper = mHandlerThread.getLooper();
if (mP2pManager == null || looper == null) {
    throw new NullPointerException("Failed to get P2P_SERVICE or widi_receiver thread looper");
}
mChannel = mP2pManager.initialize(context, looper, mChannelListener);

advertise Sink

WifiP2pWfdInfo wfdInfo = new WifiP2pWfdInfo();
wfdInfo.setWfdEnabled(true);
wfdInfo.setDeviceType(WifiP2pWfdInfo.PRIMARY_SINK);
wfdInfo.setSessionAvailable(true);
wfdInfo.setControlPort(7236);
wfdInfo.setMaxThroughput(50);
Log.d(TAG,"advertise sink");
mP2pManager.setWFDInfo(mChannel, wfdInfo, mActionListener);
mHandler.post(mDiscoverPeers);
mCallbackHandler.post(mSendEnabled);
discover peers


    public void run() {
        mP2pManager.discoverPeers(mChannel, mActionListener);
        mHandler.postDelayed(this, DISCOVER_INTERVAL_MS);
    }

經過這三個階段的工作,其他設備就可以發現這臺設備了

4.2.2 設備p2p連接后如何建立RTSP連接

P2P連接上之后可以從相關Intent中獲取到Source端傳遞過來的建立RTSP連接的ip和端口,Sink端根據這些信息主動去連接。

else if (netInfo.getState() == NetworkInfo.State.CONNECTED) {
    if (mRtsp != null) {
        Log.i(TAG, "Ignoring extra CONNECTED event");
        return;
    }
    WifiP2pInfo p2pInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO);
    if (p2pInfo == null) {
        Log.i(TAG, "WIFI_P2P_INFO is not available");
        return;
    }
    if (p2pInfo.groupFormed) {
        mHandler.removeCallbacks(mDiscoverPeers);
        WifiP2pGroup group = intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_GROUP);
        if (group == null) {
            Log.i(TAG, "WIFI_P2P_GROUP is not availble");
            return;
        }
        mP2pInterface = group.getInterface();
        mSourceRtspPort = 7236;
        if (p2pInfo.isGroupOwner) {
            Collection devices = group.getClientList();
            if (devices != null) {
                if (devices.isEmpty())
                    Log.i(TAG, "Device list empty!");
                else {
                    for (WifiP2pDevice device : devices) {
                        if (sReflectionInited) {
                            // use reflection instead of:
                            // mSourceMacAddress = device.interfaceAddress;
                            try {
                                mSourceMacAddress = (String) sIfAddr.get(device);
                            } catch (Exception e) {
                                Log.e(TAG, "Failed to get interfaceAddress field"
                                        + " by reflection: " + e);
                            }
                        } else
                            Log.e(TAG, "Reflection not initialiazed,"
                                    + "can't get interfaceAddress content");
                        if (device.wfdInfo != null) {
                            mSourceRtspPort = device.wfdInfo.getControlPort();
                            Log.i(TAG, "mSourceRtspPort obtained is " + mSourceRtspPort);
                        }
                        else
                            Log.i(TAG, "Using default RTSP Port=" + mSourceRtspPort);
                    }
                }
            }
 }
        else {
            mSourceIp = p2pInfo.groupOwnerAddress.getHostAddress();
            if (group.getOwner().wfdInfo != null) {
                mSourceRtspPort = group.getOwner().wfdInfo.getControlPort();
                Log.i(TAG, "mSourceRtspPort obtained is " + mSourceRtspPort);
            }
            else
                Log.i(TAG, "Using default RTSP Port=" + mSourceRtspPort);
        }
        if (mSourceIp != null && mSourceRtspPort > 0 && mSourceRtspPort <= 65535) {
            mHandler.post(new ConnectRtsp(mSourceIp, mSourceRtspPort));
        }
    }
}
 }

4.2.3 RTSP連接實現

執行完下面的代碼后,RTSP連接就建立起來了,相關的視頻流通過mediaplay來完成處理。

public void run() {
        Log.i(TAG, "Connect RTSP " + sourceIp + "/" + sourceRtspPort);
        mConnectorTypeRequested = false;
        mDisplayManager.registerDisplayListener(mDisplayListener, null);
        try {
            Log.d(TAG,"media reset begin");
            mMediaPlayer.reset();
            Log.d(TAG,"media reset over");
            mMediaPlayer.setDataSource("intel_rtp://" + mP2pInterface + ":" + RTP_LISTEN_PORT);
            mMediaPlayer.prepare();
        } catch (Exception e) {
            Log.e(TAG, "Exception trying to play media", e);
        }
        mSourceIp = sourceIp;
        mRtsp = new WidiSinkRtsp();
        if (mRtsp.init(sourceIp + ":" + sourceRtspPort, mSinkListener) == 0)
            mRtsp.start();
    }
}
編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • WIFI
    +關注

    關注

    81

    文章

    5297

    瀏覽量

    203741
  • 無線信號
    +關注

    關注

    2

    文章

    263

    瀏覽量

    20451
  • RTSP
    +關注

    關注

    0

    文章

    14

    瀏覽量

    12141
  • 視頻編解碼
    +關注

    關注

    2

    文章

    54

    瀏覽量

    11754
  • Miracast
    +關注

    關注

    0

    文章

    6

    瀏覽量

    18709

原文標題:WifiDisplay(Miracast)技術原理及實現

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    WIFI無線技術各種熱門設計方案~

    基于WiFi的無線測控系統設計與實現一種基于WIFI的室內定位系統設計與實現簡述基于WIFI停車場方案闡述藍牙與WIFI網絡互聯設計方案詳述銀行營業點WIFI認證管理
    發表于 12-13 15:26

    熱門PCB設計技術方案

    。優秀的版圖設計可以節約生產成本,達到良好的電路性能和散熱性能。簡單的版圖設計可以用手工實現,復雜的版圖設計需要借助計算機輔助設計(CAD)實現。下列是由小編我精心找的熱門PCB設計技術方案
    發表于 12-16 13:55

    世平推出基于 WIFI 互聯技術的車載影音導航系統方案

    。除了具備傳統的視頻播放、車載導航功能之外,還可以實現同屏傳送,收發郵件、網絡登陸、網絡下載等移動互聯功能。為迎接即將到來的車聯網時代,世平集團推出基于 WIFI 互聯技術的智能車載影音系統方案。 1.
    發表于 10-27 08:13

    基于Dragonboard 410c的miracast簡單總結

      前兩天遇到miracast的問題,現在做個簡單總結  首先去源碼路徑下面查看是否有wfdclient生成:vendor/qcom/proprietary/wfd/wdsm/client  如果有
    發表于 09-27 16:53

    淺析Miracast無線顯示技術

    1.Wi-Fi聯盟的MiracastWi-Fi聯盟展示了新興的Miracast無線顯示技術,他們將實時電腦游戲動畫從智能手機發送到27寸的電視上。該聯盟的無線顯示技術可用于快速地共享銷售演示或者視頻
    發表于 07-11 06:46

    毫米波終端技術實現挑戰及測試方案

    之一的毫米波技術已成為目前標準組織及產業鏈各方研究和討論的重點,毫米波將會給未來5G終端的實現帶來諸多的技術挑戰,同時毫米波終端的測試方案也將不同于目前的終端。本文將對毫米波頻譜劃分近
    發表于 01-08 07:49

    請問Miracast怎么實現大小設備間的無縫視頻共享?

    Miracast實現大小設備間的無縫視頻共享
    發表于 04-19 09:19

    請問Rk3566或者rk3568支持miracast作為sink端的功能嗎

    問題描述及復現步驟:請問Rk3566或者rk3568支持miracast 作為sink端的功能嗎,如果支持要怎么使用? 非常感謝
    發表于 09-28 15:36

    MIP技術簡單介紹,及技術實現方案

    MIP技術簡單介紹,及技術實現方案簡單來說,MIP技術的目的就是移動節點(不限于手機)在不改變IP地址的情況下可以從一個子網移動
    發表于 06-30 09:29 ?3679次閱讀

    德州儀器宣布推出端對端Miracast系統

    日前,德州儀器宣布推出端對端 Miracast 系統,其所包含的源極與顯示解決方案可幫助消費者從移動設備向大屏幕傳輸流媒體、游戲、照片以及其它數字內容。
    發表于 10-08 14:00 ?1418次閱讀

    DragonBoard 410c的Miracast無線同屏技術

    DragonBoard 410c的Miracast無線同屏技術介紹,我上傳了很多相關資料,感興趣的小伙伴可以去我上傳的資料里看看。
    發表于 06-30 15:06 ?3次下載

    Miracast 是什么,如何在Windows 10上使用Miracast

    自從個人電腦的誕生以來,我們開會的方式總是把電腦屏幕上顯示的內容用VGA或者HDMI線的方式投射到大的屏幕和顯示器上了,隨著越來越多的人開始喜歡使用無線設備,從PC端轉向移動端,Miracast
    發表于 07-02 16:38 ?2.4w次閱讀

    無線投屏技術Miracast、DLNA與AirPlay的技術分析

    隨之邁拓無線投屏產品陸續上市, 今天讓我們一起來了解三種主流的無線投屏技術Miracast、DLNA與AirPlay。 目前這種將終端信號經由WiFi傳輸到電視、電視盒的技術有三種:DLNA
    發表于 07-02 14:40 ?4349次閱讀

    Miracast技術跨操作系統支持不同設備間的視頻共享

    Miracast之前稱為Wi-Fi Display,是由Wi-Fi聯盟制定、并得到廣泛支持的行業標準。它通過Wi-Fi,把一個設備上的屏幕影像或音頻內容鏡像到附近的另一個設備上,并包括多種配置。
    發表于 01-03 09:48 ?1544次閱讀
    <b class='flag-5'>Miracast</b><b class='flag-5'>技術</b>跨操作系統支持不同設備間的視頻共享

    松下內置Miracast無線助力企業高效辦公

    松下年度新品,全高清無線系列!內置Miracast無線,享受簡單自由、穩定暢快、明亮清晰的投影體驗,助力企業高效辦公。
    的頭像 發表于 05-09 15:26 ?1401次閱讀
    主站蜘蛛池模板: 国产女主播在线播放一区二区| 色婷婷在线视频观看| 色婷婷激情五月| 五月婷婷开心综合| 国产五月| 国产精品福利久久| 黄色片xxx| 特级一级毛片免费看| 欧美 日韩 中文字幕| 狠狠色狠狠色| 精品精品国产理论在线观看| 亚洲 另类色区 欧美日韩| 一级毛片免费全部播放完整| 四虎国产精品成人永久免费影视| 欧美色影视| 色综网| 欧美性白人极品1819hd高清| 欧洲亚洲一区| 天天摸日日舔| 97在线精品| 国产理论精品| 午夜精品久久久久久久四虎| 国产啊v在线观看| 免费啪啪网站| 一区二区三区影院| 啪啪黄色片| 欧美又粗又长又湿又黄的视频| 第四色成人网| 欧美伊人久久综合网| 日日夜夜狠狠干| 一级做a爰片久久毛片免费看 | 久青草视频在线| 夜夜爽夜夜| www.夜夜爽| 一级毛片免费全部播放完整| 国产福利资源在线| 国产高清一级在线观看| 四虎影库在线播放| 天天插夜夜操| 免费观看一区二区| 欧美国产在线一区|