0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

WifiDisplay(Miracast)技術(shù)原理及實(shí)現(xiàn)方案

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

1. WifiDisplay簡介

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

Miracast的Android實(shí)現(xiàn)涉及到系統(tǒng)的多個(gè)模塊,包括:

1. MediaPlayerService及相關(guān)模塊

原因很明顯,因?yàn)镸iracast本身就牽扯到RTP/RTSP及相應(yīng)的編解碼技術(shù)。

2. SurfaceFlinger及相關(guān)模塊

SurfaceFlinger的作用是將各層UI數(shù)據(jù)混屏并投遞到顯示設(shè)備中去顯示。現(xiàn)在,SurfaceFlinger將支持多個(gè)顯示設(shè)備。而支持Miracast的遠(yuǎn)端設(shè)備也做為一個(gè)獨(dú)立的顯示設(shè)備存在于系統(tǒng)中。

3. WindowManagerService及相關(guān)模塊

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

4. DisplayManagerService及相關(guān)模塊

DisplayManagerService服務(wù)是Android 4.2新增的,用于管理系統(tǒng)中所有的Display設(shè)備。

5. WifiService及相關(guān)模塊

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

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

WFD中涉及的技術(shù)層面比較多,相關(guān)的協(xié)議也比較多,包括了WIFI P2P技術(shù)、RTSP及RTP技術(shù)、流媒體技術(shù)以及音視頻編解碼相關(guān)的技術(shù),如果要對WFD有比較深入的了解,還需要花費(fèi)較多的時(shí)間去研究相關(guān)的技術(shù)細(xì)節(jié)。

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

圖1 WFD涉及的技術(shù)及協(xié)議框圖

2. WifiDisplay協(xié)議流程

建立WifiDisplay主要步驟如下:

1. WFD Device Discovery(WFD設(shè)備發(fā)現(xiàn))

2. WFD Service Discovery (Optional)(WFD服務(wù)發(fā)現(xiàn)(可選))

3. Device Selection(設(shè)備選擇)

4. WFD Connection Setup(WFD連接)

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

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

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

8. Link Content Protection Setup (Optional)(內(nèi)容保護(hù),即數(shù)據(jù)加密)

9. Payload Control(負(fù)載控制)

10. WFD Source and WFD Sink standby (Optional)

11. WFD Session Teardown(會話終止)

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

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

圖 2 會話建立及協(xié)商過程圖

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

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

圖3 RTSP協(xié)議控制圖

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

RTSP協(xié)議控制中主要有以下幾種狀態(tài)SETUP、PLAY、PAUSE、TEARDOWN

通過下面命令抓取了WifiDisplay相關(guān)的協(xié)議包,主要是RTSP控制流相關(guān)的協(xié)議包。

tcpdump -i any -w /savePath

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

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

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

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

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

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

對于WifiDisplay會話管理有以下模型可供參考,該結(jié)構(gòu)大致分為四個(gè)層次, UI、 Session Policy Management、協(xié)議實(shí)現(xiàn)層及基于Wifi的網(wǎng)絡(luò)傳輸層。在協(xié)議實(shí)現(xiàn)層中主要分為幾個(gè)模塊WFD Ddiscovery、WFD Link Establishment、 UIBC、Capability Negotiation、Session/Stream Control等。

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

圖6 WFD設(shè)備會話管理的模型

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

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

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

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

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

3. 實(shí)時(shí)流協(xié)議RTSP(Real Time Streaming protocol)

4. 資源預(yù)留協(xié)議RSVP(Resource Reserve Protocol)

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

3. WifiDisplay顯示框架實(shí)現(xiàn)

為了實(shí)現(xiàn)WifiDisplay google在Android現(xiàn)有顯示系統(tǒng)的基礎(chǔ)上加入的虛擬設(shè)備的支持,下圖給出了Android顯示系統(tǒng)的架構(gòu)圖。

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

圖8 DisplayDevice的隔離示意圖

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

圖9 Android圖層示意圖

1.WindowManagerService

管理窗口之間的關(guān)系。包括位置、優(yōu)先級等。

2.SurfaceFlinger

負(fù)責(zé)對各個(gè)Surface按照Z-order進(jìn)行Merge,然后把Merge之后的Buffer顯示到Display上。

3.DisplayManagerService

管理在系統(tǒng)中加載的各個(gè)Display。包括管理各個(gè)Display的生命周期,并且對各個(gè)Display進(jìn)行配置。當(dāng)Display狀態(tài)變化的時(shí)候向系統(tǒng)和應(yīng)用程序發(fā)送通知。

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將遍歷系統(tǒng)中所有的DisplayDevice來完成各自的混屏工作。

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

圖10 WifiDisplay顯示模型

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

4. Android WifiDisplay實(shí)現(xiàn)

4.1 Source端實(shí)現(xiàn)

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

true

該配置項(xiàng)路徑為

frameworks/base/core/res/res/values/config.xml
該入口的主要作用是掃描并發(fā)現(xiàn)sink設(shè)備。

4.1.1 設(shè)備掃描及發(fā)現(xiàn)

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

圖11 設(shè)備發(fā)現(xiàn)流程圖

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

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端設(shè)備建立連接的流程圖,主要建立RSTP協(xié)議的Socket連接,通過接收Sink端的協(xié)議信息解析相關(guān)操作,代碼流程如下圖所示。

socket的建立主要在WidiSourceRtsp.cpp的prepareListenSocket函數(shù)中實(shí)現(xiàn),并在這個(gè)socket上監(jiān)聽是否有客戶端的連接請求, rtsp消息處理在cbHandleParserEvent中處理。

在WidiSession.cpp中RSTP及media event處理主要通過WorkHandler處理,相關(guān)消息處理在函數(shù)onMessageReceived中處理。

4.2 Sink端的實(shí)現(xiàn)

圖13 給出了sink端的實(shí)現(xiàn)框架圖,從框架圖可以看出APP主要和Sink API交互,Sink API和框架服務(wù)中的Wifi server 及 mediaserver交互,APP通過Control interface進(jìn)行WFD相關(guān)的控制操作,底層狀態(tài)的接收則通過Events interface,也就是一些相關(guān)的回調(diào)方法來處。

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

圖13 Sink端 實(shí)現(xiàn)框架結(jié)構(gòu)圖

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

圖 14 RTSP會話流程圖

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

圖15 WFD控制流程圖

圖14給出了Intel實(shí)現(xiàn)的sink端的RTSP會話管理流程圖,RTSP的協(xié)議實(shí)現(xiàn)主要通過C++實(shí)現(xiàn),對于協(xié)商后相關(guān)的狀態(tài)反饋通過回調(diào)函數(shù)完成,如果想進(jìn)一步了解相關(guān)的流程,請查看相關(guān)的代碼。

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

4.2.1 設(shè)備如何被發(fā)現(xiàn)

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);
    }

經(jīng)過這三個(gè)階段的工作,其他設(shè)備就可以發(fā)現(xiàn)這臺設(shè)備了

4.2.2 設(shè)備p2p連接后如何建立RTSP連接

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

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連接實(shí)現(xiàn)

執(zhí)行完下面的代碼后,RTSP連接就建立起來了,相關(guān)的視頻流通過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();
    }
}
編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • WIFI
    +關(guān)注

    關(guān)注

    81

    文章

    5340

    瀏覽量

    206438
  • 無線信號
    +關(guān)注

    關(guān)注

    2

    文章

    268

    瀏覽量

    20744
  • RTSP
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    12321
  • 視頻編解碼
    +關(guān)注

    關(guān)注

    2

    文章

    54

    瀏覽量

    11869
  • Miracast
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    18776

原文標(biāo)題:WifiDisplay(Miracast)技術(shù)原理及實(shí)現(xiàn)

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

收藏 0人收藏

    評論

    相關(guān)推薦

    WIFI無線技術(shù)各種熱門設(shè)計(jì)方案~

    基于WiFi的無線測控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)一種基于WIFI的室內(nèi)定位系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)簡述基于WIFI停車場方案闡述藍(lán)牙與WIFI網(wǎng)絡(luò)互聯(lián)設(shè)計(jì)方案詳述銀行營業(yè)點(diǎn)WIFI認(rèn)證管理
    發(fā)表于 12-13 15:26

    熱門PCB設(shè)計(jì)技術(shù)方案

    。優(yōu)秀的版圖設(shè)計(jì)可以節(jié)約生產(chǎn)成本,達(dá)到良好的電路性能和散熱性能。簡單的版圖設(shè)計(jì)可以用手工實(shí)現(xiàn),復(fù)雜的版圖設(shè)計(jì)需要借助計(jì)算機(jī)輔助設(shè)計(jì)(CAD)實(shí)現(xiàn)。下列是由小編我精心找的熱門PCB設(shè)計(jì)技術(shù)方案
    發(fā)表于 12-16 13:55

    世平推出基于 WIFI 互聯(lián)技術(shù)的車載影音導(dǎo)航系統(tǒng)方案

    。除了具備傳統(tǒng)的視頻播放、車載導(dǎo)航功能之外,還可以實(shí)現(xiàn)同屏傳送,收發(fā)郵件、網(wǎng)絡(luò)登陸、網(wǎng)絡(luò)下載等移動(dòng)互聯(lián)功能。為迎接即將到來的車聯(lián)網(wǎng)時(shí)代,世平集團(tuán)推出基于 WIFI 互聯(lián)技術(shù)的智能車載影音系統(tǒng)方案。 1.
    發(fā)表于 10-27 08:13

    基于Dragonboard 410c的miracast簡單總結(jié)

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

    淺析Miracast無線顯示技術(shù)

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

    毫米波終端技術(shù)實(shí)現(xiàn)挑戰(zhàn)及測試方案

    之一的毫米波技術(shù)已成為目前標(biāo)準(zhǔn)組織及產(chǎn)業(yè)鏈各方研究和討論的重點(diǎn),毫米波將會給未來5G終端的實(shí)現(xiàn)帶來諸多的技術(shù)挑戰(zhàn),同時(shí)毫米波終端的測試方案也將不同于目前的終端。本文將對毫米波頻譜劃分近
    發(fā)表于 01-08 07:49

    請問Miracast怎么實(shí)現(xiàn)大小設(shè)備間的無縫視頻共享?

    Miracast實(shí)現(xiàn)大小設(shè)備間的無縫視頻共享
    發(fā)表于 04-19 09:19

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

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

    MIP技術(shù)簡單介紹,及技術(shù)實(shí)現(xiàn)方案

    MIP技術(shù)簡單介紹,及技術(shù)實(shí)現(xiàn)方案簡單來說,MIP技術(shù)的目的就是移動(dòng)節(jié)點(diǎn)(不限于手機(jī))在不改變IP地址的情況下可以從一個(gè)子網(wǎng)移動(dòng)
    發(fā)表于 06-30 09:29 ?3802次閱讀

    德州儀器宣布推出端對端Miracast系統(tǒng)

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

    DragonBoard 410c的Miracast無線同屏技術(shù)

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

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

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

    無線投屏技術(shù)Miracast、DLNA與AirPlay的技術(shù)分析

    隨之邁拓?zé)o線投屏產(chǎn)品陸續(xù)上市, 今天讓我們一起來了解三種主流的無線投屏技術(shù)Miracast、DLNA與AirPlay。 目前這種將終端信號經(jīng)由WiFi傳輸?shù)诫娨?、電視盒?b class='flag-5'>技術(shù)有三種:DLNA
    發(fā)表于 07-02 14:40 ?4493次閱讀

    Miracast技術(shù)跨操作系統(tǒng)支持不同設(shè)備間的視頻共享

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

    松下內(nèi)置Miracast無線助力企業(yè)高效辦公

    松下年度新品,全高清無線系列!內(nèi)置Miracast無線,享受簡單自由、穩(wěn)定暢快、明亮清晰的投影體驗(yàn),助力企業(yè)高效辦公。
    的頭像 發(fā)表于 05-09 15:26 ?1490次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品