2010年11月13日 星期六

在 Linux 以 VLC 搭配 Jtvlc 進行實況

若要在 Linux 進行實況,請先裝 Justin.tv 提供的工具 Jtvlc。我們將利用 VLC 建立 stream server 把影音資料送給 SDP檔(Session Description Protocol),然後讓 Jtvlc 去讀取SDP檔把資料上傳給 Justin.tv。

詳細流程如下:

先執行以下指令啟動 VLC stream server,將目標檔案或裝置轉換成 H.264 + AAC 串流,並建立 sdp 介面。
$ vlc filename -vvv input_stream --sout='#duplicate{dst="transcode{venc=x264,vcodec=h264,vb=800,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{dst=127.0.0.1,port=1234,sdp=file:///path/to/vlc_sdp_file.sdp}"}'

你可以修改 vb 的值改變影像輸出的 bitrate,subq則會影響影像品質。啟動 server 以後我們就可以執行 jtvlc 將串流上傳至 Justin.tv。

$ jtvlc your_account stream_key vlc_sdp_file.sdp

其中 stream_key 是一個 live_ 開頭的字串,你可以先登入 Justin.tv 並且點選這個連結。如果網頁上沒有 stream key 字串,請打開檢視網頁原始碼視窗搜尋 stream_key,應該可以在 javascript tag裡找到它。


底下是我以前用來實況 PSP 遊戲畫面的 VLC 命令

vlc -vvv v4l2:///dev/video0  --input-slave=alsa://plughw:0,0  --sout='#duplicate{dst=display,dst="transcode{vfilter=croppadd{cropleft=121,cropright=121,croptop=102,cropbottom=104},venc=x264,vcodec=h264,vb=800,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{dst=127.0.0.1,port=1234,sdp=file://~/vlc.sdp}"}'

如果使用 input-slave 接 ALSA 裝置的話,請記得檢查 VLC 的音效輸出模組是否設定為 ALSA。