设备:
路由器
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>