openwrt实现远程实时监听

设备:
路由器
tp-link wr841n v3 改16m flash 64m内存(刷的8m固件)
openwrt backfire r31676内核版本2.6.32.27(tp-link wr941n v2改8m flash同样适用)

usb声卡
我使用的是一个摄像头自带声卡,同时也集成了麦克(双麦克),淘宝现在售价16-20元,同时这个摄像头还可以作为监控摄像头用,支持mjpg-stream和motion(可录像,移动侦测),支持如意云
 
或者使用淘宝上5-10元的usb声卡也可,在输入口插入麦克
无论使用什么样的声卡,一定要在/dev里面能够识别到dsp

使用工具:
serial putty winscp VLC
关于怎样进入路由器命令行里面执行命令,使用winscp上传下载修改文件及权限,请自行搜索本论坛

教程:
为了图省劲,我是一直在路由上插的ttl线用serial来操作的,如果机器正常的话,用putty登陆进去也是可以的。
我使用的固件是没有luci的,所以刷完了无法web登陆,需要先安装luci

opkg update
opkg install luci
opkg install luci-i18n-chinese
然后执行/etc/init.d/uhttpd enable
/etc/init.d/uhttpd start
这样就可以登录web界面了


安装usb驱动

opkg install kmod-usb2
opkg install usbutils
opkg install kmod-usb-core
opkg install libusb

这个时候查看一下usb是否ok
执行命令
lsusb

正常的话会看到usb接口及上面设备的信息的
如果出现unable to initialize libusb: -99
可以试试在启动脚本里添加
mount -t usbfs none /proc/bus/usb/

当lsusb出现类似如下信息时表示usb查看功能和驱动正常
root@OpenWrt :/# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 1a40:0101 TERMINUS TECHNOLOGY INC. USB-2.0 4-Port HUB
Bus 001 Device 003: ID 05a9:2641 OmniVision Technologies, Inc.

能够看到一个usb2.0接口的4口hub,一个OmniVision Technologies的摄像头,上面集成声卡及麦克
接下来安装声卡驱动
opkg install kmod-usb-audio

到这里一定要确认下声卡是否安装好
root@OpenWrt :/# ls /dev
1-1                 mtd2                network_throughput
1-1.4               mtd2ro              null
audio               mtd3                port
console             mtd3ro              ppp
cpu_dma_latency     mtd4                ptmx
dsp                 mtd4ro              pts
full                mtd5                random
kmsg                mtd5ro              shm
log                 mtdblock0           snd
mem                 mtdblock1           tty
mixer               mtdblock2           ttyS0
mtd0                mtdblock3           urandom
mtd0ro              mtdblock4           usb1
mtd1                mtdblock5           watchdog
mtd1ro              network_latency     zero
看到显示有audio dsp,说明声卡安装完好,驱动也ok了

接下来需要架设我们的两个程序ices和icecast
ices负责取信号源供给icecast,而icecast则负责把信号源转成流媒体转发出去
执行命令
opkg install alsa-lib
opkg install ices
opkg install icecast

安装的ices 版本为2.0.1 icecast为2.3.2
这个版本的icecast支持mp3和ogg,而ices则只支持ogg
接下来配置ices和icecast,一定是icecast配置好了之后再启动ices
用winscp进入/var/log/新建两个文件夹ices和icecast,用来存储log日志

修改icecast的配置文件/ect/icecast.xml,内容如见附件
在/etc里面新建ices的配置文件ices-oss.xml,内容见附件

再准备好客户端工具vlc windows版
http://get.videolan.org/vlc/2.1.3/win32/vlc-2.1.3-win32.exe
由于日志文件路径为/var/log/icecast和/var/log/ices
需要将log文件夹的权限设置为777(默认755),而重启后权限恢复
所以在开机启动里面增加一条
chmod 777 /var/log

进入到管理界面启动icecast和ices
root@OpenWrt:/# icecast            
Icecast 2.3.2
usage: icecast [-b -v] -c <file>
options:
        -c <file>       Specify configuration file
        -v              Display version info
        -b              Run icecast in the background
root@OpenWrt:/# icecast -b -c /etc/icecast.xml
Starting icecast2
Detaching from the console
root@OpenWrt:/# Changed groupid to 65534.
Changed userid to 65534.
这个时候使用top命令(ctrl+c退出)可以看到icecast已经在后台运行了
root@OpenWrt:/# ices /etc/ices-oss.xml
打开http://192.168.1.1:8000查看
 
如果有Mount Point /example1.ogg  M3U则说明你的监听服务器端已经设置好了

这个时候打开VLC选择打开网络串流
地址写http://192.168.1.1:8000/example1.ogg.m3u
就可以开始监听路由器的麦克了
192.168.1.1是你路由器默认的lan口ip地址,再配合路由器的ddns和端口映射,那么远程实时监听就做好了
友情提示:该教程仅供学习参考,请勿用作其他用途,请勿将usb声卡内置,学习后请24小时内彻底删除,因本教程引发的各种法律问题,作者概不负责。

841n v3(921n v2)8m(16m也可)flash 64m内存 固件
http://115.com/file/e78jn64r#该固件参考帖子
http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=80198


由于icecast开启的时候选择的参数是-b,后台运行,所以如果要关闭该进程需要执行命令
killall icecast安装screen就可以将ices后台运行了
screen -d -m ices /etc/ices-oss.xml

ices-oss.xml

<?xml version="1.0"?>
<ices>

    <!-- run in background  -->
    <background>0</background>
    <!-- where logs go. -->
    <logpath>/var/log/ices</logpath>
    <logfile>ices.log</logfile>
    <!-- size in kilobytes -->
    <logsize>2048</logsize>
    <!-- 1=error, 2=warn, 3=infoa ,4=debug -->
    <loglevel>4</loglevel>
    <!-- logfile is ignored if this is set to 1 -->
    <consolelog>0</consolelog>

    <!-- optional filename to write process id to -->
    <!-- <pidfile>/home/ices/ices.pid</pidfile> -->

    <stream>
        <!-- metadata used for stream listing -->
        <metadata>
            <name>Example stream name</name>
            <genre>Example genre</genre>
            <description>A short description of your stream</description>
            <url>http://mysite.org</url>
        </metadata>

        <!--    Input module.

            This example uses the 'oss' module. It takes input from the
            OSS audio device (e.g. line-in), and processes it for live
            encoding.  -->
        <input>
            <module>oss</module>
            <param name="rate">44100</param>
            <param name="channels">2</param>
            <param name="device">/dev/dsp</param>
            <!-- Read metadata (from stdin by default, or -->
            <!-- filename defined below (if the latter, only on SIGUSR1) -->
            <param name="metadata">1</param>
            <param name="metadatafilename">test</param>
        </input>

        <!--    Stream instance.

            You may have one or more instances here.  This allows you to
            send the same input data to one or more servers (or to different
            mountpoints on the same server). Each of them can have different
            parameters. This is primarily useful for a) relaying to multiple
            independent servers, and b) encoding/reencoding to multiple
            bitrates.

            If one instance fails (for example, the associated server goes
            down, etc), the others will continue to function correctly.
            This example defines a single instance doing live encoding at
            low bitrate.  -->

        <instance>
            <!--    Server details.

                You define hostname and port for the server here, along
                with the source password and mountpoint.  -->

            <hostname>localhost</hostname>
            <port>8000</port>
            <password>hackme</password>
            <mount>/example1.ogg</mount>
            <yp>1</yp>   <!-- allow stream to be advertised on YP, default 0 -->

            <!--    Live encoding/reencoding:

                channels and samplerate currently MUST match the channels
                and samplerate given in the parameters to the oss input
                module above or the remsaple/downmix section below.  -->

            <encode>  
                <quality>0</quality>
                <samplerate>22050</samplerate>
                <channels>1</channels>
            </encode>

            <!-- stereo->mono downmixing, enabled by setting this to 1 -->
            <downmix>1</downmix>

            <!-- resampling.
            
                Set to the frequency (in Hz) you wish to resample to, -->
             
            <resample>
                <in-rate>44100</in-rate>
                <out-rate>22050</out-rate>
            </resample>
        </instance>

    </stream>
</ices>
icecast.xml
<icecast>
    <limits>
        <clients>100</clients>
        <sources>2</sources>
        <threadpool>5</threadpool>
        <queue-size>524288</queue-size>
        <client-timeout>30</client-timeout>
        <header-timeout>15</header-timeout>
        <source-timeout>10</source-timeout>
        <!-- If enabled, this will provide a burst of data when a client 
             first connects, thereby significantly reducing the startup 
             time for listeners that do substantial buffering. However,
             it also significantly increases latency between the source
             client and listening client.  For low-latency setups, you
             might want to disable this. -->
        <burst-on-connect>1</burst-on-connect>
        <!-- same as burst-on-connect, but this allows for being more
             specific on how much to burst. Most people won't need to
             change from the default 64k. Applies to all mountpoints  -->
        <burst-size>65535</burst-size>
    </limits>

    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>hackme</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>hackme</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>hackme</admin-password>
    </authentication>

    <!-- set the mountpoint for a shoutcast source to use, the default if not
         specified is /stream but you can change it here if an alternative is
         wanted or an extension is required
    <shoutcast-mount>/live.nsv</shoutcast-mount>
    -->

    <!-- Uncomment this if you want directory listings -->
    <!--
    <directory>
        <yp-url-timeout>15</yp-url-timeout>
        <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
    </directory>
     -->

    <!-- This is the hostname other people will use to connect to your server.
    It affects mainly the urls generated by Icecast for playlists and yp
    listings. -->
    <hostname>localhost</hostname>

    <!-- You may have multiple <listener> elements -->
    <listen-socket>
        <port>8000</port>
        <bind-address>0.0.0.0</bind-address>
        <shoutcast-mount>/stream</shoutcast-mount>
    </listen-socket>
    <!--
    <listen-socket>
        <port>8001</port>
    </listen-socket>
    -->

    <!--<master-server>127.0.0.1</master-server>-->
    <!--<master-server-port>8001</master-server-port>-->
    <!--<master-update-interval>120</master-update-interval>-->
    <!--<master-password>hackme</master-password>-->

    <!-- setting this makes all relays on-demand unless overridden, this is
         useful for master relays which do not have <relay> definitions here.
         The default is 0 -->
    <!--<relays-on-demand>1</relays-on-demand>-->

    <!--
    <relay>
        <server>127.0.0.1</server>
        <port>8001</port>
        <mount>/example.ogg</mount>
        <local-mount>/different.ogg</local-mount>
        <on-demand>0</on-demand>

        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>
    -->

    <!-- Only define a <mount> section if you want to use advanced options,
         like alternative usernames or passwords
    <mount>
        <mount-name>/example-complex.ogg</mount-name>

        <username>othersource</username>
        <password>hackmemore</password>

        <max-listeners>1</max-listeners>
        <dump-file>/tmp/dump-example1.ogg</dump-file>
        <burst-size>65536</burst-size>
        <fallback-mount>/example2.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>
        <intro>/example_intro.ogg</intro>
        <hidden>1</hidden>
        <no-yp>1</no-yp>
        <authentication type="htpasswd">
                <option name="filename" value="myauth"/>
                <option name="allow_duplicate_users" value="0"/>
        </authentication>
        <on-connect>/home/icecast/bin/stream-start</on-connect>
        <on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
    </mount>

    <mount>
        <mount-name>/auth_example.ogg</mount-name>
        <authentication type="url">
            <option name="mount_add"       value="http://myauthserver.net/notify_mount.php"/>
            <option name="mount_remove"    value="http://myauthserver.net/notify_mount.php"/>
            <option name="listener_add"    value="http://myauthserver.net/notify_listener.php"/>
            <option name="listener_remove" value="http://myauthserver.net/notify_listener.php"/>
        </authentication>
    </mount>

    -->

    <fileserve>1</fileserve>

    <paths>
		<!-- basedir is only used if chroot is enabled -->
        <basedir>/usr/share/icecast</basedir>

        <!-- Note that if <chroot> is turned on below, these paths must both
             be relative to the new root, not the original root -->
        <logdir>/var/log/icecast</logdir>
        <webroot>/usr/share/icecast/web</webroot>
        <adminroot>/usr/share/icecast/admin</adminroot>
        <!-- <pidfile>/usr/share/icecast/icecast.pid</pidfile> -->

        <!-- Aliases: treat requests for 'source' path as being for 'dest' path
             May be made specific to a port or bound address using the "port"
             and "bind-address" attributes.
          -->
        <!--
        <alias source="/foo" dest="/bar"/>
          -->
        <!-- Aliases: can also be used for simple redirections as well,
             this example will redirect all requests for http://server:port/ to
             the status page
          -->
        <alias source="/" dest="/status.xsl"/>
    </paths>

    <logging>
        <accesslog>access.log</accesslog>
        <errorlog>error.log</errorlog>
        <!-- <playlistlog>playlist.log</playlistlog> -->
      	<loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
      	<logsize>10000</logsize> <!-- Max size of a logfile -->
        <!-- If logarchive is enabled (1), then when logsize is reached
             the logfile will be moved to [error|access|playlist].log.DATESTAMP,
             otherwise it will be moved to [error|access|playlist].log.old.
             Default is non-archive mode (i.e. overwrite)
        -->
        <!-- <logarchive>1</logarchive> -->
    </logging>

    <security>
        <chroot>0</chroot>
        <changeowner>
            <user>nobody</user>
            <group>nogroup</group>
        </changeowner>
    </security>
</icecast>


你可能感兴趣的:(openwrt实现远程实时监听)