簡體   English   中英

使用VLC播放聲音文件時如何在Perl中緩存文件?

[英]How to cache files with Perl while playing sound files using vlc?

我想在Perl中手動緩存文件,因此在播放聲音時幾乎沒有延遲。

我用Perl編寫了一個程序,該程序通過對VLC進行系統調用來播放音頻文件。 執行它時,我注意到音頻開始播放之前有延遲。 延遲通常在大約1.0到1.5秒之間。 但是,當我創建一個循環連續執行相同的VLC調用多次時,延遲僅約為0.2-0.3秒。 我認為這是因為聲音文件是Linux緩存的。 我在CPAN上找到Cache :: Cache ,但是我不知道它是如何工作的。 我對不使用模塊的解決方案感興趣。 如果這不可能,我想知道如何正確使用Cache :: Cache。

(我知道對執行速度使用對VLC的系統調用是個壞主意)

use Time::HiRes;
use warnings;
use strict;

while (1) {
    my $start = Time::HiRes::time();
    system('vlc -Irc ./media/audio/noise.wav vlc://quit');
    my $end = Time::HiRes::time();
    my $duration = $end - $start;
    print "duration = $duration\n";
    <STDIN>;
}

它不像只是在perl中“緩存”文件那樣簡單。 vlc或任何需要解釋數據內容的程序(在您的情況下為.wav文件)。 您要么堅持調用外部程序,只給它一個文件來執行,要么需要在perl(可能還有Perl XS Modules )中實現整個堆棧。 整個堆棧的意思是:1.將數據(.wav文件)保存在內存中(在perl運行時內部)。 2.在Perl中解釋數據。

第二部分是棘手的地方,您可能需要編寫很多代碼和/或使用3rd Party模塊才能到達所需的地方。

因此,如果您只是想使其快速運行,請堅持使用系統調用。 您也可以研究Nama ,它可以為您提供所需的東西。

從您的問題看來,您似乎主要是在獲取.wav文件的運行時。 如果只是獲取有關文件的信息而不是播放聲音,則Audio :: Wav可能是適合您的模塊。

Perl內部緩存對您沒有幫助。

  1. 通過一次(例如在程序初始化時)讀取文件來准備Linux文件緩存。 可能發生的情況是,在您要播放它時,它已經過時並已從緩存中刪除,因此,如果要保證訪問時間短,可以將文件放在RAM磁盤上
  2. 查找並使用占用資源少的其他媒體播放器,該媒體播放器不會加載數十個庫,以減少啟動時間。 嘗試paplay從包pulseaudio-utils ,或gst123 ,或mpg123mpg123-pulse

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM