早前有朋友問米奇要搞個Streaming Server來在網絡播播自拍的影片是不是最好用Windows Server,米奇沒想多久就答是,因為Windows Media Service是Windows Server附送的服務。不過想來,其實Linux也有很多Streaming服務,例如Real,還有VideoLAN Client (簡稱VLC),不過Real要另裝那個大食播放程式才能看,所以米奇一向也不太喜歡Real,於是想來想去,又再找來那個怎麼學也學不會的VLC來試裝 一下。

講解VLC Streaming的中文網上文章實在不多,看了工頭的家這篇文章,總算為Linux裝上VLC。VLC自稱可以對應很多不同的codec和產生不同格式的串流,不過相較於Windows Media Service,用VLC來建立Streaming Server還真不夠親切,就算像工頭在另文中介紹的方法在XWindow介面裡面設定也好,如果不好好了解各個參數的用法,實在好難達成網上播放的目的。

透過VLC以Linux做Streaming Server

經過詳細閱讀官方文件和反覆測試之後,漸漸發覺VLC真是個好東西,它不單可以以MMS方式播放,如果用戶也是使用VLC觀看的話,還可以以HTTP、UDP和RTSP等方式來播放。例如要在網上播放MP4影片的話,只要用以下的指令就可以:

vlc -vvv -loop <MP4影片路徑> --sout '#standard{access=http,mux=ts,url=[<IP地址>]:<埠號>}' 

由於它有轉碼功能,所以甚至可以讀取任何影像檔來即時編碼播放出去,這就可以將很大的檔案以目標頻寬進行網上廣播。米奇在測試的時候,就以一套原本Data Rate有400多kbps的DivX AVI影片,直接轉碼後以256kbps播放出去:

vlc -vvv -loop /home/mickey/winter_garden_01.avi --sout '#transcode{vcodec=mp4v,acodec=mpga,vb=256,ab=96}:standard{access=http,mux=ts,url=[<IP地址>]:1234}' 

要以VLC來作MMS播放,也是同樣的簡單,只要用以下的指令,就可以像Windows Media Service那樣,播放映片到Media Player去了:

 vlc -vvv -loop <WMV影片檔> --sout '#standard{access=mmsh,mux=ts,url=[<IP地址>]:<埠號>}}'

這某程度上比Windows Media Service還方便管理。米奇一直也在頭痛是否可以把播片的工作寫成script,那就可以設定cron job或at來定時執行,不用人手處理了。最重要的是,要達到這些目的,成本遠比Windows Server低得多。

本來VLC甚至可以直接將任何影片直接轉碼後以MMS方式播放出去,而不用事先將影片轉成wmv格式的,不過由於以yum來安裝的VLC沒有加入-enable-ffmpeg-mp3lame參數,令到它不能將音頻轉換成MP3,所以轉換之後以MMS來播放的影片會沒有聲音。要解決這問題,只有從最核心的部份開始,從ffmpeg開始一步一步的自行去編譯VLC了。

VLC還有好多有趣功能尚待米奇發掘,例如可以透過VLM (VideoLAN Manager)來管理定時廣播和達成VOD,當然還可以配合script來達到自製收費播片伺服器的效果了,不過這還是留待米奇日後有空再去研究好了...