您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

youtube不能小窗口播放了(youtube懸浮窗沒有了)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-05-18 15:40:43【】8人已围观

简介youtube懸浮窗沒有了youtube懸浮窗沒有了可以這樣設置出來。1、要進入到youtube主頁面,在頁面當中將浮窗劃動出來。2、滑動浮窗之后在右上方的位置可以看到一個小窗口的按鈕,點擊一下即可小

youtube懸浮窗沒有了

youtube懸浮窗沒有了可以這樣設置出來。

1、要進入到youtube主頁面,在頁面當中將浮窗劃動出來。

2、滑動浮窗之后在右上方的位置可以看到一個小窗口的按鈕,點擊一下即可小窗口使用。

3、接著繼續長按窗口頂部中間的橫線即可設置浮窗的移動位置。

4、點擊橫線的圖標,頁面就會有一個恢復的按鈕,點擊即可恢復到原頁面還是很簡單。

如何關閉youtube退出視頻后小窗播放

1、首先登錄到youtube。

2、其次打開youtube的設置選項。

3、最后在設置里關閉小窗口播放即可。

You tube 為什么不支持后臺播放,有什么辦法?

b站如何轉播油管直播

獲取直播源:

大部分轉播還是通過瀏覽器打開油管直播頁面,然后利用OBS捕獲畫面實現轉播。

但是瀏覽器還是比較占資源,而且非常不方便。

我個人是推薦使用Potplayer播放,然后再用OBS捕獲。

(Potplayer是一個本地視頻播放器,解碼能力強,基本上任何格式都能播放)

下載安裝好之后,運行,右鍵任意處

打開Potplayer,右鍵打開鏈接(也可以按Ctrl+U)

輸入油管地址(直播或者視頻都可以播放)

直接把油管直播間鏈接輸入即可

效果如下(拿Miko舉例)

網速不太快的可以通過右下角更換畫質

覺得播放器礙事的可以隱藏(想用快捷鍵的可以自行在設置里更改)

隱藏播放器,只留一個畫面

如果不想使用播放器,也可以用瀏覽器“單獨打開播放源”,節省性能

單獨打開一個標簽欄,輸入 買粉絲.youtube.買粉絲/embed/ *視頻ID* (視頻ID就是油管視頻后面那一串代碼,如圖)

油管視頻ID

打開后的樣子(只打開播放源,節省性能)

網頁播放

如果你的OBS無法捕獲Chrome瀏覽器(或者黑屏)

用Chrome瀏覽器打開 chrome://flags/#use-angle ,把渲染方式從默認改成D3D9等再重啟即可

更改瀏覽器渲染

彈幕遮擋:

之后使用OBS即可轉播了。

關于OBS,我也有幾個方法想分享一下

比如Miko把油管彈幕放在了畫面上,直接用圖片遮擋的話會不太美觀(游戲內容也會被遮擋)

Miko

個人推薦使用OBS的模糊效果,以前B站也有些過類似的教程(CV1959197),但是都過去一年了,該更新一下操作了。

首先也是先去

買粉絲s://github.買粉絲/Xaymar/obs-StreamFX/releases

下載高斯模糊的插件(也可以用OBS自帶的模糊濾鏡)

壓縮包或者自動解壓程序都可以

濾鏡插件

解壓到OBS目錄下

解壓縮

之后打開OBS,捕獲窗口,然后右鍵選擇濾鏡

濾鏡

添加模糊效果

模糊效果

選擇高斯模糊(也可以使用默認的,但個人覺得高斯模糊比較舒服)

再勾選 啟用蒙板 ,勾選之后就可以手動調整模糊的位置(模糊值推薦30-40,看字體大小)

蒙板

調整好之后效果如下

全息遮擋

模糊濾鏡也可以添加多個,比如以下情況(彈幕在機體后面之類的情況下)

這樣既可以遮擋又不會太影響美觀

會長專用頭盔

虛擬音頻:

最后再來說說虛擬音頻。

什么是虛擬音頻?虛擬音頻就是通過電腦軟件實現多音頻分流。

舉個例子:想轉播聲音A,但是又不想讓觀眾聽到聲音B,但是只有一個音頻硬件(耳機/音響)

可以通過一個叫 Voicemeeter 的軟件實現

虛擬音頻示意圖

通過這個軟件,我們可以在轉播的同時自己做點別的事情,也不用擔心聲音流入OBS

打開 買粉絲s://買粉絲.vb-audio.買粉絲/Voicemeeter/index.htm 下載 Voicemeeter (免費的)

下載后安裝。

安裝好之后就可以在聲音輸出硬件里看到多了兩個

音頻

打開Voicemeeter,在A1部分選擇輸出(你的耳機/音響)

Voicemeeter

這個軟件非常強大,我們可以實現許多功能。可以單獨調整某條音頻的音量,或者靜音等許多功能。

音頻

一般軟件都可以選擇音頻輸出,瀏覽器的可以打開windows設置里更改

更改瀏覽器音頻輸出

之后在OBS中添加 音頻輸出設備捕獲

添加音頻

這里選擇虛擬音頻

選擇音頻

把 虛擬音頻A 和 虛擬音頻B 都加上之后就可以了。

(為了避免搞混,可以像我一樣給音頻流命名方便識別)

混音器

設置好之后就可以非常方便的一邊轉播/直播。

轉:小窗播放視頻的原理和實現(上)

轉到, 在手機上看著方便

由于文章篇幅較長,將分為上、下兩篇。上篇主要介紹小窗播放視頻的原理,下篇主要介紹小窗播放視頻的實現。

目前很多視頻類App都有小窗播放功能,比如Youtube(如圖1)、Facebook(如圖2)等,不過它們的實現方式卻不同。Youtube 是將視頻播放View內嵌到應用內,優點是交互好;Facebook則是通過WindowManager添加視頻播放View,同時支持應用內部和外部播放。

小窗播放視頻功能在小窗和大屏之間切換時,視頻類App通常一邊執行交互動作一邊播放視頻。交互動作包括移動、縮放或者動畫;這些App在播放時期望給用戶平滑的過渡體驗,流暢加載視頻,不能有明顯的卡頓。

<figure>

<figcaption>(圖1 Youtube小窗播放視頻)</figcaption>

</figure>

<figure>

<figcaption>(圖2 Facebook小窗播放視頻)</figcaption>

</figure>

二、SurfaceView 和 GLSurfaceView

Android 中使用 MediaPlayer 播放視頻時,一般采用 SurfaceView 、 GLSurfaceView 和 TextureView 。Youtube、Facebook用不同技術方案實現了小窗播放視頻功能,它們共同點是都可以使用 SurfaceView 、 GLSurfaceView 和 TextureView 來播放視頻。接下來分析三個視圖用于小窗播放視頻的原理。

SurfaceView繼承自類View,但與其他View的子類不同的是它有獨立的Surface,如下源碼可以看出它包含一個Surface屬性,即它不與宿主窗口共享同一個繪圖表面。因此SurfaceView的UI可以在一個獨立的線程中進行繪制。由于不會占用主線程資源,因此SurfaceView可以實現復雜而高效的UI。GLSurfaceView繼承SurfaceView,作為SurfaceView的補充,加入了EGL的管理,并自帶了渲染線程。它用于小窗播放時效果和SurfaceView類似。本文以下內容以SurfaceView為例分析獨立的Surface對小窗播放會有什么影響。

通過Surface的類注釋可以知道,Surface處理一塊由Screen 買粉絲positor管理的Raw buffer。而Screen 買粉絲positor其實就是SurfaceFlinger服務。Surface字面意思就是繪圖表面,可以理解為是UI的畫布。

Android應用程序窗口需要請求SurfaceFlinger服務創建繪圖表面(也就是Surface對象),同時窗口還需要被WindowManagerService管理;所以實際上窗口的繪圖表面是通過兩個Surface對象來描述,一個是應用程序進程創建的,另一個是由WindowManagerService創建的,這兩個Surface對象對應于SurfaceFlinger服務的同一個Layer對象。

在應用程序進程這一側,每一個應用程序窗口,如Activity,都有一個Surface對象,就是在ViewRootImpl對象的mSurface屬性,這個Surface用來繪制應用程序窗口的UI,如下ViewRootImpl源碼所示。當界面需要刷新時,窗口調用draw方法,向Surface請求canvas,執行繪畫操作后再次提交給Surface完成屏幕顯示。

在WindowManagerService服務這一側,每一個窗口,都有一個對應的WindowState對象。其有一個屬性mSurface,它負責設置窗口的位置、大小屬性。例如,一個窗口的Z軸坐標大小要考慮到它的窗口類型,以及它與系統中的其它窗口的關系[2]。

SurfaceView有獨立的繪圖表面,那么SurfaceView又是怎么繪制在宿主窗口的呢?

上面說到每一個窗口在SurfaceFlinger服務中都對應有一個Layer,用來描述它的繪圖表面。同時每一個SurfaceView在SurfaceFlinger服務中還對應有一個獨立的Layer或者LayerBuffer,用來單獨描述它的繪圖表面,以區別于它的宿主窗口的繪圖表面[3]。

<figure>

</figure>

(圖3 SurfaceView的Surface的創建過程)

接下來了解Surface創建過程,如圖3的時序圖所示,每當一個窗口需要刷新UI時,就會調用ViewRootImpl類的performTraversals方法。如果當前窗口的Surface還沒有創建,或者已經失效,SurfaceView就會請求WindowManagerService服務創建一個新的Surface,它最終會調用updateWindow來完成Surface的創建。

如SurfaceView源碼所示,它有一個mSurface屬性,相比之下TextView或者Button等普通View會共用ViewRootImpl的Surface。

SurfaceView類的屬性mWindowType描述的是SurfaceView的窗口類型,它的默認值等于 TYPE_APPLICATION_MEDIA ,用來顯示多媒體的,如視頻。SurfaceView還有另外一個類型 TYPE_APPLICATION_MEDIA_OVERLAY ,它是在視頻上面顯示Overlay的,它可以顯示視字幕等信息。宿主窗口會遮擋這兩個類型的SurfaceView,如果窗口嵌入這兩類SurfaceView,那么它們的Z軸位置會低于該窗口的Z軸位置,顯示在該窗口下面。如果mWindow等于null的話,那么就說明該SurfaceView還沒有添加到WindowManagerService服務中去,然后調用addWithoutInputChannel添加到WindowManagerService服務中。

mSession.relayout()請求WindowManagerService服務對SurfaceView的UI進行布局。如果宿主窗口的繪制表面還未創建,或者需要重新創建,那么就會請求SurfaceFlinger服務為它創建一個新的Surface。由于這一步可能會修改SurfaceView的Surface,所以添加了mSurfaceLock鎖,避免其它線程同時修改該Surface的內容。

執行完成上述步驟之后,SurfaceView的Surface的創建完成了。但是mWindowType為 TYPE_APPLICATION_MEDIA 或 TYPE_APPLICATION_MEDIA_OVERLAY 的SurfaceView會被宿主窗口擋住,如何解決這個問題,這就要了解SurfaceView“挖洞”原理。

當SurfaceView附加宿主窗口時,它的onAttachedToWindow會被調用。這個方法調用requestTransparentRegion請求在宿主窗口上設置透明區域,即請求在宿主窗口上挖洞,其實就是設置ViewRootImpl中Surface的透明度。而每當其宿主窗口刷新自己的UI的時候,就會調用ViewGroup的gatherTransparentRegion將所有嵌入在它里面的SurfaceView所設置的透明區域收集起來。然后再通知WindowManagerService為SurfaceView的gatherTransparentRegion方法設置一個總的透明區域。這就是SurfaceViewd的“挖洞”原理,如圖4時序圖所示。

<figure>

</figure>

(圖4 SurfaceView“挖洞”原理)

接下來結合ViewRootImpl類的requestTransparentRegion源碼,來分析請求在宿主窗口上設置透明區域的過程。

當mView等于子View時,將mPrivateFlags的 View.REQUEST_TRANSPARENT_REGIONS 位設置為1,表示該窗口被設置了一塊透明區域。當一個窗口被請求設置了一塊透明區域之后,它的窗口屬性就發生了變化,這時候除了要將與它所關聯的ViewRootImpl對象的mWindowAttributesChanged值設置為true之外,還要調用該ViewRootImpl對象的requestLayout方法對窗口的UI進行重新布局和繪制。requestLayout最終會調用到另外一個方法performTraversals來實際執行刷新窗口UI的操作。

ViewRootImpl類的方法performTraversals是用來收集嵌入在它里面的SurfaceView所設置的透明區域的。它處于窗口的UI布局完成之后,窗口的UI繪制之前。這是因為窗口的UI布局完成之后,各個子視圖的大小和位置才能確定下來,進而才能確定SurfaceView的透明區域的位置和大小。從頂層視圖開始,從上到下收集每一個子視圖所要設置的區域,最終收集到的總透明區域并保存在ViewRootImpl類的成員變量mTransparentRegion中。其中host是De買粉絲rView,它的gatherTransparentRegion方法重載了父類ViewGroup的gatherTransparentRegion方法。

ViewGroup的gatherTransparentRegion方法中,檢測到有透明區域時,調用父類View的方法gatherTransparentRegion來檢查當前視圖容器是否需要繪制。如果需要繪制,說明當前視圖的前景需要繪制,就會將它所占據的區域從參數region所占據的區域移除,以便可以顯示當前視圖的前景。然后調用每一個子視圖的成員函數gatherTransparentRegion來繼續往下收集透明區域。

SurfaceView類的方法gatherTransparentRegion中,先檢測是否用作窗口面板以及mPrivateFlags的SKIP_DRAW位是不是1。如果都是,將它所占據的區域從參數region所描述的區域移除,region中剩下的就是透明區域。最后判斷Surface的像素格式是否設置有透明值。如果有,返回false給ViewRootImpl,然后ViewRootImpl調用 sWindowSession.setTransparentRegion(mWindow, mTransparentRegion); 設置窗口為透明。這樣就能看到SurfaceView了。

SurfaceView雖然具有獨立的Surface,不過它仍然是宿主窗口的視圖結構中的一個結點,因此,它仍然是可以參與到宿主窗口的繪制流程中去的。

在SurfaceView的draw和dispatchDraw方法中,參數canvas是建立在宿主窗口的Surface上的畫布,因此在這塊畫布上繪制任何UI都是出現在宿主窗口的Surface上的。但如果當前正在處理的SurfaceView不是用作宿主窗口面板的時候,即屬性mWindowType的值不等于 TYPE_APPLICATION_PANEL 的時候,SurfaceView的這兩個方法只是簡單地將它所占據的區域繪制為黑色。另外dispatchDraw還會調用另外一個方法updateWindow更新的UI,繪制自己的Sueface。

通過了解SurfaceView的創建過程、“挖洞”原理和繪制過程,可以了解到Surface對小窗播放視頻的影響如下:

1)SurfaceView在宿主窗口下面,通過“挖洞”原理顯示Surface。SurfaceView在做旋轉時,畫面不會跟隨SurfaceView旋轉。

2)同理,設置透明度或者執行透明值動畫時,SurfaceView顯示有問題。

3)SurfaceView繪制時會先繪制黑邊,所以在移動或者縮放過程,在更新不及時時會看到黑邊。

4)SurfaceView具有獨立的Surface,它的UI繪制可以在獨立的線程中進行,可以進行復雜的UI繪制。

由于SurfaceView不在View hierarchy中,View的一些縮放,透明度變化等方法無法使用。要實現這些功能就得使用TextureView,但TextureView有個缺點就是性能低耗電高。Android N對SurfaceView進行了更改,它對SurfaceView自身和它的內容改變做了同步處理,播放視頻時不會出現之前難看的黑色條。SurfaceView因這個新特性不會出現黑色條,但它旋轉時畫面仍然不會跟隨旋轉,仍然不支持透明度。

如下源碼所示,TextureView繼承于View,并重載了View的draw()方法,它與其它的View一樣在View hierarchy中管理與繪制。draw()方法中主要把SurfaceTexture中收到的圖像數據作為紋理更新到對應的HardwareLayer中。SurfaceTexture.OnFrameAvailableListener用于通知TextureView有新數據。

根據以上信息,可以知道TextureView不同于SurfaceView,沒有單獨創建Surface,而是作為View hierarchy中的一個普通View,來進行移動,旋轉,縮放,動畫等,沒有SurfaceView執行旋轉、縮放時的缺點。值得注意的是TextureView必須在硬件加速的窗口中,通過HardwareLayer更新視圖。它需要硬件加速層,這使得TextureView比SurfaceView更耗性能。 Android N上SurfaceView新特性的說明上,官方也推薦在不執行旋轉、透明度、縮放時使用SurfaceView。

SurfaceView有獨立的Surface,通過“挖洞”原理顯示它。以致它在執行旋轉時,畫面不會跟隨旋轉;同時設置透明度或者執行透明值動畫時,顯示有問題。Android N以上的SurfaceView在視頻進行縮放旋轉時會同步變化,不會看到黑色邊,官方推薦使用SurfaceView。TextureView作為普通View在View hierarchy中管理與繪制,更適用于小窗播放視頻功能。但TextureView需要硬件加速層,使得TextureView比SurfaceView和GLSurfaceView更耗性能。

[1]、Surface( 買粉絲s://developer.android.買粉絲/reference/android/view/Surface.買粉絲 )

[2]、Android應用程序窗口(Activity)的繪圖表面(Surface)的創建過程分析 ( 買粉絲://blog.csdn.買粉絲/luoshengyang/article/details/8303098 )

[3]、Android視圖SurfaceView的實現原理分析( 買粉絲://blog.csdn.買粉絲/luoshengyang/article/details/8661317 )

[4]、SurfaceView( 買粉絲s://developer.android.買粉絲/reference/android/view/SurfaceView.買粉絲 )

小窗播放視頻的原理和實現(下) 買粉絲s://cloud.tencent.買粉絲/developer/article/1047885

很赞哦!(8)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:福建福州闽清县

工作室:小组

Email:[email protected]