2013-12-30

HDP2 Gold がなぜかUSB1.1ポートに接続と認識される

SKNET HDP2 Goldは PCI接続ののディジタルTV受信機である. 実装上は, ボード上にUSBハブが載っており, それに受信機が接続されているようだ.

私は Scientific Linux 6.3 (CentOS 6.3 と同様に RHEL 6.3 のクローン) がインストールされたマシンに接続しているが, 以下のようなエラーが出ることがある.

dvb-usb: found a 'SKNET MonsterTV HDP2 Gold ISDB-T PCI' in warm state.
dvb-usb: This USB2.0 device cannot be run on a USB1.1 port. (it lacks a hardware PID filter)
dvb-usb: SKNET MonsterTV HDP2 Gold ISDB-T PCI error while loading driver (-19)
この場合, 以下のようなコマンドを実行すれば良い.
sudo tee /sys/bus/pci/drivers/ehci_hcd/unbind <<< 0000:03:01.2
sudo tee /sys/bus/pci/drivers/ehci_hcd/bind <<< 0000:03:01.2

参考

2013-12-27

WARPSTAR デフォルトSSIDとIPアドレス

型番 対応暗号方式 初期ESSID 初期暗号キー 初期IPアドレス
WG1800HP
WG1400HP
11ac/11n/11a/11g/11b,
WEP/WPA2-PSK (AES/TKIP)
aterm-xxxxxx-g,
aterm-xxxxxx-a (オーナ),
aterm-xxxxxx-gx,
aterm-xxxxxx-ax (ゲスト),
aterm-xxxxxx-aw (WEP専用)
ラベル記載 192.168.10.1/23,
192.168.1.245
WR7600 11a/11g/11b,
WEP/WPA2-PSK TKIP/AES
WR7600-XXXXXX ラベル記載
WR6600H 11a/11b/11g,
WEP/WPA2-PSK TKIP/AES
WARPSTAR-XXXXXX ラベル記載 192.168.0.1,
192.168.0.210
WR4100N
WR4500N
11n/11b/11g,
WEP/WPA/WPA2-PSK TKIP/AES
WARPSTAR-****** ラベル記載 192.168.0.1,
192.168.1.1

2013-12-23

MMSストリームをFFmpegで保存

以前の投稿と似ているが, FFmpeg で MMS ストリームを取得・保存する方法を説明する.
ffmpeg -i mmst://media.example.org/stream1 -codec copy output.wmv

上記のように, mmst://...と記述する. FFmpegでは, MMSの扱いとして2種類 (over TCP と over HTTP) 用意されている. mmst と書くと over TCP, mmsh と書くと over HTTP になる. 単に mms://... と書くと動作しない.

コーデックとして -codec copy を選ぶと, 変換は行わずにそのまま保存することができる. (まったく同じストリームになるわけではなく, ストリーム番号が変わったりすることもあるようだ.)
-codec copy」のかわりに「-codec:v copy」「-codec:a copy」と書くとビデオ・オーディオのみ変換しないように指定することもできる.

OpenLP + FFmpeg でテキストをオーバレイ

OpenLP には, 遠隔操作用プラグインがあり, JSONによって表示中のテキストを取得することができる. OpenLP のテキストを FFmpeg でオーバレイするためのスクリプトを作成した.
#! /bin/env python
# vi: set expandtab sw=4 ts=4:

server='http://192.168.xx.xx:4316'
out='/dev/shm/live.txt'
tmp='/dev/shm/live.txt.tmp'

def get(url):
    import urllib2
    import json
    s = urllib2.urlopen(server+url).read()
    j = json.loads(s)
    return j

def text():
    t = get('/api/controller/live/text')
    ss = t[u'results'][u'slides']
    for s in ss:
        text = s[u'text']
        selected= s[u'selected']
        if selected:
            return text

def update(s):
    import os
    if s==u'':
        s = u'\n'
    open(tmp, 'w').write(s.encode('utf_8'))
    os.rename(tmp, out)

pp = False

while True:
    try:
        p = get('/api/poll')
        if p!=pp:
            t = text()
            pp = p
            print p
            print t.encode('utf_8')
            update(t)
    except:
        update(u'')
        import time
        time.sleep(10)
    import time
    time.sleep(1)
これを実行した上で, FFmpeg を以下のように起動する.
/usr/local/bin/ffmpeg -loglevel warning -f video4linux2 -i /dev/video0 -f alsa -i hw:0 \
-vf drawtext='fontfile=/usr/share/fonts/ipa-gothic/ipag.ttf:textfile=/dev/shm/live.txt:fontsize=24:fontcolor=black:box=1:y=12:x=(W-tw)/2:reload=1:boxcolor=white@0.5' \
-vb 2048k -ab 64 -f mpegts -vcodec mpeg2video -pix_fmt yuv420p -b:v 3M -acodec mp2 -ab 128k -ar 44100 -ac 2 -aspect 4:3 - | \
/usr/local/bin/ffmpeg -loglevel warning -f mpegts -i - http://127.0.0.1:9999/feed1.ffm
なぜか feed1.ffmを出力にするとフィルタが機能しなかったので, パイプを使った.

FFserver + MediaTomb でビエラに映像を配信

PCに接続したキャプチャデバイスでリアルタイムに映像を取り込み, パナソニックのテレビ (Viera) に映像を配信する方法をメモする.

FFmpeg はキャプチャデバイスから映像を取り込んだり様々な映像フォーマットに変換することができる. FFmpeg に付属する FFserver で HTTP 形式での映像配信は可能. 残念なことに FFserver は DLNA には対応していないので, DLNA での配信は MediaTomb に任せることにする. ここでは主に FFserver から MediaTomb にストリームを渡す部分を説明する.
FFmpeg でデータの変換, FFserver でストリームを配信可能にし, MediaTomb で配信をする.

FFserverの設定

FFserver の設定の中に Launch を書いておくことで, FFmpeg を呼び出すことが可能.
フォーマットやコーデックを下記のように指定すると, Viera で再生することができる.
Port 9999
RTSPPort 9990
BindAddress 0.0.0.0
MaxClients 1000
MaxBandwidth 100000
CustomLog -

<Feed feed1.ffm>
File /dev/shm/feed1.ffm
FileMaxSize 100M
Launch /usr/local/bin/ffmpeg -f video4linux2 -i /dev/video0 -f alsa -i hw:0
</Feed>

<Stream mpegts.mpeg>
Feed feed1.ffm
Format mpegts

VideoCodec mpeg2video
VideoBitRate 2048
VideoFrameRate 29.97
VideoSize 720x480
VideoGopSize 12
PixelFormat yuv420p

AudioCodec mp2
AudioBitRate 64
AudioChannels 2
AudioSampleRate 44100
</Stream>

<Stream teststat.html>
Format status
</Stream>

MediaTomb config.xml

MediaTomb から CURL を呼び出し, FFmpeg の配信するストリームを MediaTomb に渡す.
CURLを呼び出すため, まずはシェルスクリプトを実行可能にする. 拡張子.shvideo/scriptというMIMEtypeにマップする. video/scriptは, bashというプロファイルでトランスコード. 最後に, プロファイルbashを定義する. -xオプションを付けておくことで, どのようなスクリプトが実行されたのか分かり, デバッグに役立つ.
...
        <map from="sh" to="video/script"/>
...
          <transcode mimetype="video/script" using="bash"/>
...
      <profile name="bash" enabled="yes" type="external">
        <mimetype>video/mpeg</mimetype>
        <accept-url>yes</accept-url>
        <first-resource>yes</first-resource>
        <accept-ogg-theora>yes</accept-ogg-theora>
                <agent command="/bin/bash" arguments="-x %in %out"/>
        <buffer size="14400000" chunk-size="512000" fill-size="120000"/>
      </profile>
...
CURLを実行するスクリプトを用意し, MediaTomb に追加する. 引数$1%outになるので, これへ出力する. 実際には名前付きパイプになっているようだ.
#! /bin/bash
exec curl -s -o "$1" http://localhost:9999/mpegts.mpeg

Vieraでの操作

操作方法がやや複雑なので, 以下に手順を書いておく.
  • リモコンのボタンビエラリンクを押す.
  • お部屋ジャンプリンクを選び, 決定を押す.
  • MediaTombを選び, 決定を押す.
  • Videoを選び, 決定を押す.
  • All Videoを選び, 決定を押す.
  • stream1.shを選び, 決定を押す.
  • を選び, 決定を押す. 当然のことながら, 発売時期などによって対応状況や操作方法が異なるので, 型番を調べて記載する予定である.

    お部屋ジャンプに対応しているテレビを以下に挙げる.

  • 2013-12-22

    FFmpeg で動画にテキストをリアルアイムでオーバレイ

    FFmpeg に, drawtext というビデオフィルタがあり, テキストを動画にオーバレイすることができる. 色々と便利な機能もついている.
    1. 文字部分のボックスを塗りつぶす.
      背景の色によっては文字が見えにくくなることもあるが, このような場合はボックス機能を使えば良い.
      box=1:boxcolor=black
      ボックスを半透明にする場合は, @の後に数字を書く.
      box=1:boxcolor=black@0.5
    2. フォントの指定が可能.
      日本語のフォントも指定可能. 文字の色や大きさも指定できる.
      fontfile=/usr/share/fonts/ipa-gothic/ipag.ttf:fontsize=48:fontcolor=white
    3. 文字列の展開が可能
      1. 時刻
    4. 影をつけることが可能
    5. ファイルから読み込み
      reload=1をつけると, 1フレーム毎にファイルを読み込む.
      textfile=tmp.txt:reload=1
      なお, ファイルを更新するときには, 以下のようにファイルの更新がアトミックに行われるようにすればよい.
    6. 予め別のファイルで新しいデータを作成.
      echo '新しいテキスト' >tmp1.txt
    7. ムーブでファイルを更新.
      mv tmp1.txt tmp.txt
      もし頻繁に書き換えるなら, /dev/shm/下などのtmpfs上に作成するのが良いだろう.
    8. 文字の表示位置
      数式で表示位置を指定可能. センタリグするには, 以下の式:
      x=(W-tw)/2

    意外といろいろな機能がついていることが分かった. OpenLP と組み合わせて使おうと思う.

    2013-12-21

    yahooオークションとamazon出品サービスの比較

    古い教科書や参考書, その他の雑貨などを処分しようと思うことがあるものの, 捨てるにはもったいなく思ってしまう. そこで, だれか必要とする人に譲れたらと思い, Yahooオークション, Amazon出品サービスで販売してみた. これらのサービスを使ってみて, 色々と違いがあることがわかってきたので, まとめてみる.
    YahooオークションAmazon出品サービス
    月額手数料必要 399円/月不要
    取引成立時手数料不要必要
    100円+15% (本, CD, DVDなどの場合)
    配送料出品者が決定一律
    配送方法落札者との交渉で決定出品者が自由に選べる
    発送期日出品者が自由に提示できる2日以内
    取引日時オークション日時を出品者が決定購入者が購入手続きをした時
    前もって全出品を一時停止することが可能
    支払い落札者との交渉で決定1週間ごとに銀行振込
    返品などの対応落札者と直接交渉アマゾンやクレジットカード会社を経由

    所感

    Yahooオークションは, 出品者と落札者との取引の場を設けられているという感じ. 個人出品でもとっつきやすい.
    Amazon出品サービスは, 一律的な販売が求められている感じがする. 個人よりは業者向けなのだろう.

    古物営業の許可?

    中古品を販売するには許可が必要. しかし, このように個人で使用したもの・使用するために購入したものを販売する場合は, 許可はいらない.
    ただ, 「せどり」といわれる転売目的で古本屋などで購入しそれを販売するときは, 許可が必要だろう.

    2013-12-19

    Explorer Mouse のための設定

    Microsoft Explorer Mouse を使っていると, 思わぬ時にホイールが動いてしまうことがある. 各種ソフトで, ホイールの動きを無効化する設定を書いておく.

    Gnome Terminal

    Gnome Terminal では設定できないので, その中で動くツール毎に設定が必要である. カーソルの上下3回に変換されてしまう場合がある. Gnome Terminal のお節介な機能である.

    Vim

    挿入モードにして, 中ボタンクリックで貼り付けようとする時, ホイールが動きカーソルが飛んでゆくことがよく有る. imapで挿入モード時のカーソル上下を無効化する. さらに, 通常モード・ビジュアルモードでのカーソル上下も map で無効化する.
    .vimrc に以下を追加する.
    # 挿入モード
    imap <silent><expr> <up> ""
    imap <silent><expr> <down> ""
    # 通常モード・ビジュアルモード
    map <silent><expr> <up> ""
    map <silent><expr> <down> ""
    

    Mutt

    ページャでメールを読んでいる時, ホイールをつい動かしてしまい, 前後いずれかの3通のメールの未読フラグを解除してしまう. ページャ使用時のカーソル上下をページャのスクロールに割り当てる.
    .muttrc に以下の2行を追加する.
    bind generic,attach,browser,index,compose,pager  next-line
    bind generic,attach,browser,index,compose,pager  previous-line
    


    2013-12-17

    スクリプトでbloggerに投稿

    Blogger にスクリプトでポストするようにしたので, その方法を簡単に説明する. HTMLのタグを使用するには, 単に本文にタグを書くだけではダメで, いわゆるHTMLメールにする必要がある.
    1. タイトルと本文のみを投稿できる.
    2. ラベル・スケジュール・パーマリンクなどは指定できない.
    3. HTMLのタグを使用出来る
    From: xxx@example.com
    Content-Type: multipart/alternative; boundary="boundary"
    Subject: %(title)s
    
    --boundary
    Content-Type: text/html
    
    %lt;div class="body">%(body_html)s%lt;/div>
    --boundary--
    
    %(title)s, %(body_html)s の部分を置換し, /usr/sbin/sendmailで送る.
    From ヘッダはなくても良いようだが, エラーの時に帰ってくるようにと追加しておいた.
    boundaryはいいかげん.

    #end と記述すると, それ以降を投稿しないという機能があるらしい. 同様にして, #label とか書くとラベル指定できないかと思ったが, ダメだった. (開発者さん, こういう機能を実装して!)

    大量に (50件程度) 投稿すると, captcha の入力が必要になってしまった.

    Technical details of permanent failure:
    You have exceeded the the allowable number of posts without solving a captcha.
    

    2013-12-04

    HSPICE にて中断した過渡解析を再開

    HSPICEでは, 過渡解析の途中の状態を保存し, あとでその状態から解析を開始することができる. 以下のような場合に便利である.
    • PLLやスイッチトキャパシタ回路にて, 準安定状態に達した後に, 様々な外乱や入力信号を与える場合.
      シミュレーションの後半で条件を振って特性を調べる場合, 初めの起動シーケンスなどを毎回シミュレーションする必要がなくなり, 時間の短縮につながる.
    • シミュレーション条件を間違えたことに気づいた場合.
      PWLなどで入力電圧を作る時, 1箇所間違えただけで最初からシミュレーションをやり直すのは時間の無駄. 予め, 途中の状態を保存するようにしておけば, 保存した時刻からやり直せばよい.
      あるいは, シミュレーション時間が短すぎた場合, 最後の状態から再開させれば, 続きをシミュレーションできる.
    • 停電やサーバの異常に備える.
      停電やサーバの異常停止が起こっても, 途中から再開できる.
    以下に例を示す. 過渡解析を 500us 間行い, 時刻 99.7us で1回目の保存, その後 100us ごと (199.7us, 299.7us, ..., 499.7us) に保存を行う.
    .tran 0.1u 500u
    .store type=IC file=prefix time=99.7u repeat=100u
    

    2013-12-02

    ICC による tie ネットの配線

    IC Compiler でタイネット (H, L レベルに固定する入力) の配線方法はいろいろある.
    • preroute_standard_cellspreroute_instances-tie オプションをつけて配線する.
      この場合, 電源配線として配線されるので, やや違反を起こしやすいきがする.
    • derive_pg_connection -tie にて電源に接続させ, route_zrt_autoroute_opt で配線する.
      この場合, Classical router, Z-router を使用するので, エレガントに処理してくれる. それでも, 電源レールや電源メッシュの太い配線から細い配線を出すので, DRC違反を起こす可能性がある.
      set_route_zrt_common_options -tie_off_mode rail_only を設定しておくと, 少しはましかもしれない.
    • connect_tie_cells によってタイセルを追加し, 完全に信号線にしてしまう.
      この場合, 電源から配線を伸ばすわけではないので, 違反が起こりにくい.

    理想的にはタイネットは無駄なことをしているのだけれど, モジュール間の信号や, S/R入力付DFFのRのみを使う場合に発生してしまうようだ.