VLCのエクステンションで地デジをリアルタイム視聴する
以前のエントリでpt1をGUIで操作するためのプログラムを紹介しました。
スナップショットはこんな感じです。
このプログラムは単に内部でrecpt1を実行しているだけなので、実際に地デジを視聴するにはvlcなどのメディアプレイヤーを別に起動しなくてはいけませんでした。もっとスマートな方法でできないか調べていたところ、vlcのエクステンション作成機能を使えばできそうだと分かったので、実際にやってみました。
vlcのエクステンションを使うにはバージョンの1.1以上が必要だそうで、ubuntu10.04で標準でインストールできるvlcのバージョンではエクステンションを使うことができません。なので、vlcのnightly buildを使うか、もしくはvlcをソースからコンパイルする必要があります。僕はソースからコンパイルする方法を試したので、その方法をここで紹介します。
vlcのコンパイル
vlcをコンパイルする方法は、こちらのページを参考にしました。
まずはじめに必要なパッケージをインストールし、競合するパッケージをアンインストールします。
sudo apt-get remove vlc vlc-data vlc-nox libvlc2 libvlccore2 mozilla-plugin-vlc vlc-plugin-jack vlc-plugin-pulse x264 sudo apt-get install checkinstall build-essential cmake libtool automake autoconf git-core ffmpeg libxcb-shm0-dev libxcb-xv0-dev libx11-xcb-dev libcdparanoia-dev libcdio-paranoia-dev libcdio-cdda-dev libqt4-dev qt4-dev-tools qt4-qmake nasm yasm libasm-dev lua5.1 sudo apt-get build-dep vlc
次にlibx264をコンパイルします。
wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20101002-2245.tar.bz2 tar jxf x264-snapshot-20101002-2245.tar.bz2 cd x264-snapshot-20101002-2245 ./configure --enable-shared --prefix=/opt/local make sudo make install sudo ldconfig
最後にvlcをコンパイルします。vlcの最新の安定版のソースをダウンロードし、以下のコマンドを実行します。
export CPPFLAGS=-I/opt/local/include export LDFLAGS=-L/opt/local/lib tar jxf vlc-1.1.4.tar.bz2 cd vlc-1.1.4 ./configure --prefix=/opt/local --enable-x11 --enable-xvideo --disable-gtk --enable-sdl --enable-avcodec --enable-avformat --enable-swscale --enable-mad --enable-libdvbpsi --enable-a52 --enable-libmpeg2 --enable-dvdnav --enable-faad --enable-vorbis --enable-ogg --enable-theora --enable-faac --enable-mkv --enable-freetype --enable-fribidi --enable-speex --enable-flac --enable-live555 --enable-caca --enable-skins --enable-skins2 --enable-alsa --disable-kde --enable-qt4 --enable-ncurses --enable-release --enable-realrtsp --enable-twolame --enable-real --enable-cddax --enable-mozilla --with-mozilla-pkg=xulrunner-plugin --enable-x264 make sudo make install
ちなみに僕は自分でコンパイルするプログラムは/opt/localに入れているのでこのような設定になっています。プログラムのインストール先は適宜変更してください。
vlcからpt1を操作するLuaエクステンション
今回自作したvlcのエクステンションがこのプログラムです。
-- -*- coding: utf-8 -*- channel_name_to_number = {} channel_name_to_number["NHK総合"] = 22 channel_name_to_number["NHK教育"] = 13 channel_name_to_number["サンテレビ"] = 26 channel_name_to_number["MBS毎日放送"] = 16 channel_name_to_number["ABCテレビ"] = 15 channel_name_to_number["関西テレビ"] = 17 channel_name_to_number["読売テレビ"] = 14 channel_name_to_number["テレビ大阪"] = 18 function execute_with_stdout(cmd) local p = io.popen(cmd) local s = p:read("*a") p:close() return s end dlg = nil dropdown = nil is_plyaing = false function descriptor() return { title = "地デジ視聴"; capabilities = {} } end function activate() dlg = nil dropdown = nil is_plyaing = false create_dialog() end function deactivate() stop_pt1() vlc.playlist.clear() vlc.deactivate() end function close() vlc.deactivate() end function create_dialog() dlg = vlc.dialog("地デジ視聴") local label = dlg:add_label("チャンネル : ", 1, 1, 1, 1) dropdown = dlg:add_dropdown(2, 1, 1, 1) for name, number in pairs(channel_name_to_number) do dropdown:add_value(name, number) end dlg:add_button("選択", click_select_button, 3, 1, 1, 1) end function click_select_button() stop_pt1() local channel = dropdown:get_value() start_pt1(channel) if not is_playing then play_pt1() is_playing = true end end function start_pt1(channel) local pt1_cmd = string.format("recpt1 --b25 --strip --udp --addr 127.0.0.1 --port 1234 %d - /dev/null &", channel) os.execute(pt1_cmd) end function stop_pt1() local pt1_pid = tonumber(execute_with_stdout("pidof -s recpt1")) if pt1_pid ~= nil then os.execute(string.format("kill -KILL %d", pt1_pid)) end end function play_pt1() local path = "udp://@127.0.0.1:1234" local name = "recpt1" local mytable = { path = path; name = name } vlc.playlist.add({mytable}) end
このプログラムを拡張子.luaで~/.local/share/vlc/lua/extensions/の中に保存すると、エクステンションがvlcから使用可能になります。エクステンションを使用するには、vlcのメニューの「表示」から「地デジ視聴」を選択します。このようなダイアログが表示されるので、チャンネルを選んで選択ボタンを押すと、そのチャンネルを見ることができます。
関西以外の地域の場合はソースコードの一番上のchannel_name_to_number変数を適宜編集してください。この変数はチャンネルの名前と地デジの物理チャンネルのマップになっています。
ちなみにこのプログラムはpt1が搭載されているパソコンと地デジを視聴するパソコンが同一の場合を前提にしています。