2012/12/22

nginx + rtmpモジュールでHLS (Http Live Streaming)  FreeBSD

nginx + rtmpモジュールではHLS (Http Live Streaming)による配信もできる。
ただしこのnginx + rtmpなサーバーに動画を送信するにはrtmpで行う必要がある。 そして必ず最新のrtmpモジュールをhttps://github.com/arut/nginx-rtmp-moduleから持ってくること。

まずサーバーの設定。
nginx.conf:

worker_processes  1;

events {
    worker_connections  2048;
}

# HTTP
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /home/www;
            index  index.html index.htm;

            # Authentication
            auth_basic "Restricted";
            auth_basic_user_file /home/www/.htpasswd;
        }

        location ~ \.php$ {
            root           /home/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            fastcgi_param  SCRIPT_FILENAME  $request_filename;
            include        fastcgi_params;
        }

        location ~ /\.ht {
            deny  all;
        }
    }

    server {
        listen      8080;

        # This URL provides RTMP statistics in XML
        location /stat {
            rtmp_stat all;

            # Use this stylesheet to view XML as web page
            # in browser
            rtmp_stat_stylesheet stat.xsl;

            # Authentication
            auth_basic "Restricted";
            auth_basic_user_file /home/www/stats/.htpasswd;
        }

        location /stat.xsl {
            root /home/www/stats/;
        }

        location /hls {
            # Serve HLS fragments
            alias /tmp/nginx-rtmp;
        }
    }
}

# RTMP
rtmp {
    server {
        listen 1935;
        ping 30s;
        #chunk_size 1024;
        #max_message 100K;
        drop_idle_publisher 8s;

        application hls {
            live on;
            hls on;
            hls_path /tmp/nginx-rtmp;
            hls_fragment 5s;
        }
    }
}

動画の配信例:

% ffmpeg -loglevel verbose -re -i XXX.flv -vcodec libx264 -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://YYY:1935/hls/test

↑ではXXX.flv(別にflvフォーマットでなくても、mp4や他のフォーマットでも多分OK)をサーバーYYYに「test」というストリーム名で送信している。ちなみに/tmp/nginx-rtmpは事前に作っておき、ユーザーwwwが読み書きできるようにしておく。

動画の視聴は

http://YYY:8080/hls/test.m3u8

に例えばvlcやHTML5でアクセスする。

なお上のnginx.confは、http://YYY:8080/statにアクセスすると現在のストリーミングの状況(統計)が見られるようになっている。
0
タグ: hls nginx rtmp

2012/12/18

drm:KMSメッセージが出ないようにする  FreeBSD

FreeBSD-9.1RでIntel GPUがサポートされてから、

[drm:KMS:pid0:intel_dp_aux_ch] dp_aux_ch timeout status 0x5145003f
[drm:KMS:pid0:intel_dp_aux_ch] dp_aux_ch timeout status 0x5145003f
[drm:KMS:pid0:intel_dp_aux_ch] dp_aux_ch timeout status 0x5145003f
[drm:KMS:pid971:intel_crtc_cursor_set]
[drm:KMS:pid971:intel_crtc_cursor_set] cursor off
[drm:KMS:pid971:intel_crtc_cursor_set]

のようなメッセージがdmesgにずらーっと現れるようになりました。
困るので、これをなくす方法:

# sysctl hw.dri.debug=0

ちなみhw.dri.debugはXが立ち上がってから作られる?ようなので、/etc/sysctl.confとかにhw.dri.debug=0を書いても意味がない。がちょ〜ん。
なんかshでXが立ち上がる時に実行されるようにしないといけないんすね。 なので古いxdmを使ってる私としては/usr/local/lib/X11/xdm/Xsetup_0に

sysctl hw.dri.debug=0 &

と書き込んでいる。最後の&はいらんかも。
0
タグ: intel 9.1

2012/12/15

祝!FreeBSD9.1でIntel GPU  FreeBSD

会社でCore i5-2500Kなマシンを使っているのだが、ずっと内蔵のHD3000のグラフィックアクセラレーターを使うことができなかった。
代わりに一般ドライバーであるVesaを使ってきた。
これでたまにYouTubeを見たり、Flashのアプリを走らせてきたのだが、やはりCPUの使用率が高かった。それでも使えたことは使えたんやけど。

で、今回FreeBSD-9.1Rのリリースに伴い、ようやくIntel Coreシリーズの内蔵GPUのアクセラレーションがサポートされたのだ。
以下がそのxorg.conf。もちろん男なんでhaldなんぞ使ってない。


Section "ServerLayout"
        Identifier     "X.org Configured"
        Screen      0  "Screen0" 0 0
        Screen      1  "Screen1" RightOf "Screen0"
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "ServerFlags"
  Option "DontZap"         "off"
  Option "AllowEmptyInput" "off"
  Option "AutoAddDevices"  "off"
EndSection

Section "Files"
        ModulePath   "/usr/local/lib/xorg/modules"
        FontPath     "/usr/local/lib/X11/fonts/misc/"
        FontPath     "/usr/local/lib/X11/fonts/TTF/"
        FontPath     "/usr/local/lib/X11/fonts/OTF/"
        FontPath     "/usr/local/lib/X11/fonts/Type1/"
        FontPath     "/usr/local/lib/X11/fonts/100dpi/"
        FontPath     "/usr/local/lib/X11/fonts/75dpi/"
EndSection

Section "Module"
        Load  "extmod"
        Load  "record"
        Load  "dbe"
        Load  "dri"
        Load  "dri2"
        Load  "glx"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option      "XkbOptions" "terminate:ctrl_alt_bksp"
        Option      "XkbModel" "jp106"
        Option      "XkbLayout" "jp"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "auto"
        Option      "Device" "/dev/sysmouse"
        Option      "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
EndSection

Section "Monitor"
        Identifier   "Monitor1"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
        ### <percent>: "0f>%"
        ### [arg]: arg optional
        #Option     "DRI"                       # [<bool>]
        #Option     "ColorKey"                  # <i>
        #Option     "VideoKey"                  # <i>
        #Option     "FallbackDebug"             # [<bool>]
        #Option     "Tiling"                    # [<bool>]
        #Option     "LinearFramebuffer"         # [<bool>]
        #Option     "Shadow"                    # [<bool>]
        #Option     "SwapbuffersWait"           # [<bool>]
        #Option     "TripleBuffer"              # [<bool>]
        #Option     "XvPreferOverlay"           # [<bool>]
        #Option     "DebugFlushBatches"         # [<bool>]
        #Option     "DebugFlushCaches"          # [<bool>]
        #Option     "DebugWait"                 # [<bool>]
        #Option     "HotPlug"                   # [<bool>]
        #Option     "RelaxedFencing"            # [<bool>]
        Identifier  "Card0"
        Driver      "intel"
        BusID       "PCI:0:2:0"
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
        ### <percent>: "<f>%"
        ### [arg]: arg optional
        #Option     "ShadowFB"                  # [<bool>]
        #Option     "DefaultRefresh"            # [<bool>]
        #Option     "ModeSetClearScreen"        # [<bool>]
        Identifier  "Card1"
        Driver      "vesa"
        BusID       "PCI:0:2:0"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        SubSection "Display"
                Viewport   0 0
                Depth     1
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     4
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     8
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     15
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     16
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     24
        EndSubSection
EndSection

Section "Screen"
        Identifier "Screen1"
        Device     "Card1"
        Monitor    "Monitor1"
        SubSection "Display"
                Viewport   0 0
                Depth     1
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     4
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     8
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     15
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     16
        EndSubSection
        SubSection "Display"
                Viewport   0 0
                Depth     24
        EndSubSection
EndSection

ちなみにこんな不具合がある。

  1. 一般ユーザーでstartxすると、drmDropMaster failed error -22とかいうエラーでXがうまく立ち上がらない(ハードリセット必要)。
  2. xdmを立ち上げるとログインできない。ちゃんとパスワードもあってるのに。
2に関してはちゃんと設定を行っていないからかも知れないが、邪魔くさいので昔作った(というか改造した)xdm-freebsdというものを入れた。
1に関してはrootだとうまく行く。

と言う訳でXorgがうまく動くようになったけど、CPU使用率が低くてうれしい。

0
タグ: Sandy HD3000 xorg

2012/12/15

ddでFreeBSD isoイメージをUSBメモリに焼く  FreeBSD

いつも忘れるので、メモ。

# dd if=FreeBSD-9.1-RELEASE-amd64-memstick.img of=/dev/da0 bs=10240 conv=sync
0
タグ: iso memstick



teacup.ブログ “AutoPage”
AutoPage最新お知らせ