渲染 - Dummy Surface

  • 在播放器開發(fā)中椰憋,尤其是在 Android 平臺(tái)上,Dummy Surface 是一個(gè)常見的概念。Dummy Surface 通常用于處理沒有實(shí)際渲染輸出的場景率挣,比如后臺(tái)播放或音頻播放時(shí)仍需要一個(gè)視頻渲染器。Android 的 ExoPlayer 是一個(gè)開源的媒體播放器庫露戒,它提供了對(duì) Dummy Surface 的支持。以下是關(guān)于 Dummy Surface 的詳細(xì)說明和示例智什。

  • 什么是 Dummy Surface动漾?

    • Dummy Surface 是一個(gè)沒有實(shí)際輸出的表面(Surface)荠锭,用于需要表面的場景,但實(shí)際上沒有視頻輸出需求证九。例如:
      音頻播放時(shí)需要視頻解碼器維持工作删豺。
      視頻在后臺(tái)播放時(shí)需要保持解碼器狀態(tài)。
      ExoPlayer 中的 Dummy Surface
      在 ExoPlayer 中愧怜,Dummy Surface 可以通過 DummySurface 類來實(shí)現(xiàn)呀页。DummySurface 充當(dāng)一個(gè)虛擬的輸出表面拥坛,允許視頻解碼器正常工作蓬蝶,而不需要實(shí)際的渲染輸出猜惋。
  • 使用 Dummy Surface 的步驟

    • 添加 ExoPlayer 依賴
      在 build.gradle 文件中添加 ExoPlayer 依賴:
    • groovy
      復(fù)制代碼
      implementation 'com.google.android.exoplayer:exoplayer:2.x.x' // 替換為最新版本
      創(chuàng)建和使用 Dummy Surface
      以下是一個(gè)示例代碼丸氛,展示了如何在 ExoPlayer 中使用 Dummy Surface:
java
復(fù)制代碼
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.SimpleExoPlayer;
import com.google.android.exoplayer2.ui.PlayerView;
import com.google.android.exoplayer2.util.Util;
import com.google.android.exoplayer2.video.DummySurface;

public class MainActivity extends AppCompatActivity {
    private SimpleExoPlayer player;
    private PlayerView playerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        playerView = findViewById(R.id.player_view);
    }

    @Override
    protected void onStart() {
        super.onStart();
        if (Util.SDK_INT >= 24) {
            initializePlayer();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if ((Util.SDK_INT < 24 || player == null)) {
            initializePlayer();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (Util.SDK_INT < 24) {
            releasePlayer();
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        if (Util.SDK_INT >= 24) {
            releasePlayer();
        }
    }

    private void initializePlayer() {
        player = new SimpleExoPlayer.Builder(this).build();
        playerView.setPlayer(player);

        // Replace with your own media source
        MediaItem mediaItem = MediaItem.fromUri("http://path/to/your/media/file");
        player.setMediaItem(mediaItem);

        // Enable DummySurface
        boolean useDummySurface = true;
        if (useDummySurface) {
            DummySurface dummySurface = DummySurface.newInstanceV17(this, false);
            player.setVideoSurface(dummySurface);
        }

        player.prepare();
        player.play();
    }

    private void releasePlayer() {
        if (player != null) {
            player.release();
            player = null;
        }
    }
}
  • 關(guān)鍵點(diǎn)解析
    • 添加依賴: 確保在 build.gradle 文件中添加了 ExoPlayer 的依賴。
      創(chuàng)建播放器實(shí)例: 在 initializePlayer 方法中創(chuàng)建 SimpleExoPlayer 實(shí)例著摔。
      設(shè)置 Dummy Surface: 使用 DummySurface.newInstanceV17 方法創(chuàng)建一個(gè) Dummy Surface 并將其設(shè)置為播放器的視頻表面缓窜。
      播放器生命周期管理: 在適當(dāng)?shù)纳芷诜椒ㄖ谐跏蓟歪尫挪シ牌鲗?shí)例。
  • Dummy Surface 在播放器開發(fā)中是一個(gè)非常有用的工具雹洗,特別是在處理沒有實(shí)際視頻輸出的場景時(shí)。通過使用 Dummy Surface时肿,可以確保視頻解碼器繼續(xù)工作,而不需要實(shí)際的渲染輸出螃成。這對(duì)于后臺(tái)播放或純音頻播放非常有用旦签。在 ExoPlayer 中,使用 Dummy Surface 非常方便寸宏,并且可以幫助開發(fā)者處理各種復(fù)雜的播放場景
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市氮凝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌罩阵,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稿壁,死亡現(xiàn)場離奇詭異,居然都是意外死亡傅是,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門喧笔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溃斋,你說我怎么就攤上這事」=伲” “怎么了截碴?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長日丹。 經(jīng)常有香客問我走哺,道長哲虾,這世上最難降的妖魔是什么择示? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮晒旅,結(jié)果婚禮上栅盲,老公的妹妹穿的比我還像新娘废恋。我一直安慰自己谈秫,他們只是感情好鱼鼓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迄本,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘉赎。 梳的紋絲不亂的頭發(fā)上置媳,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天曹阔,我揣著相機(jī)與錄音,去河邊找鬼赃份。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抓韩,可吹牛的內(nèi)容都是我干的纠永。 我是一名探鬼主播谒拴,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼英上!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起苍日,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤惭聂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后相恃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辜纲,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年耕腾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了见剩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扫俺。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牵舵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情畸颅,我是刑警寧澤担巩,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布没炒,位于F島的核電站,受9級(jí)特大地震影響送火,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜种吸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坚俗。 院中可真熱鬧,春花似錦猖败、人聲如沸速缆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幢尚。三九已至,卻和暖如春尉剩,著一層夾襖步出監(jiān)牢的瞬間辱挥,已是汗流浹背边涕。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留功蜓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓式撼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親著隆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345