想通过远程查看家中的摄像头,查阅相关资料,通过ffmpeg和ffserver(https://trac.ffmpeg.org/wiki/ffserver)可实现.
这里ffmpeg和ffserver可以在同一主机运行或者在不同的主机运行.在同一台主机的话,远程访问需要
将ip设置成公网,这样太麻烦.这里直接将ffserver运行在阿里云服务器上,通过ffmpeg推流到阿里云服务器,
客户端通过支持流媒体的播放器观看音视频.首先安装ffmpeg(或者下载源码并编译),在ubuntu上运行
apt-get install ffmpeg(ffplay和ffserver也会安装),默认的ffserver配置文件为/etc/ffserver.conf,这里先
不传输视频,而是拿音乐进行广播来实验.
编写一个新的配置ffserver.conf,如下
HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 2000K
</Feed>
<Stream test.mp3>
Feed feed1.ffm
AudioBitRate 64
audioSampleRate 44100
AudioChannels 2
Format mp2
</Stream>
<Stream stat.html>
Format status
ACL allow 127.0.0.1
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>
服务端运行
ffserver -f ffserver.conf
推流
ffmpeg -re -i test.mp3 http://120.78.155.169:8090/feed1.ffm
播放
ffplay http://120.78.155.169:8090/test.mp3
广播可以了,直接试下传输音视频,配置如下
HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
<Feed feed1.ffm>
File /tmp/feed2.ffm
FileMaxSize 2000K
</Feed>
<Stream test.flv>
Feed feed1.ffm
Format flv
AudioCodec aac
Strict -2
AudioBitRate 128
AudioChannels 2
AudioSampleRate 32000
AVOptionAudio flags +global_header
VideoCodec libx264
VideoBitRate 600
VideoFrameRate 25
VideoSize 640x480
VideoGopSize 25
AVOptionVideo flags +global_header
</Stream>
<Stream stat.html>
Format status
ACL allow 127.0.0.1
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>
运行ffserver服务
ffserver -f ffserver.conf
推流
ffmpeg -re -i test.flv http://120.78.155.169:8090/feed1.ffm
播放
ffplay http://120.78.155.169:8090/test.flv
直接推流摄像头
ffserver -f ffserver.conf
推流
ffmpeg -re -i /dev/video0 http://120.78.155.169:8090/feed1.ffm
播放
ffplay http://120.78.155.169:8090/test.flv
也可以将上面几份配置写在同一个文件中,如下
HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 2000K
</Feed>
<Feed feed2.ffm>
File /tmp/feed2.ffm
FileMaxSize 2000K
</Feed>
<Feed feed3.ffm>
File /tmp/feed3.ffm
FileMaxSize 2000K
</Feed>
<Stream test.mp3>
Feed feed1.ffm
AudioBitRate 64
audioSampleRate 44100
AudioChannels 2
Format mp2
</Stream>
<Stream test.flv>
Feed feed2.ffm
Format flv
AudioCodec aac
Strict -2
AudioBitRate 128
AudioChannels 2
AudioSampleRate 32000
AVOptionAudio flags +global_header
VideoCodec libx264
VideoBitRate 600
VideoFrameRate 25
VideoSize 640x480
VideoGopSize 25
AVOptionVideo flags +global_header
</Stream>
<Stream camera.flv>
Feed feed3.ffm
Format flv
VideoFrameRate 25
VideoSize 640x480
VideoCodec libx264
NoAudio
</Stream>
<Stream stat.html>
Format status
ACL allow 127.0.0.1
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>
推流的时候,ffmpeg -re -i input http://ip:8090/feedx.ffm,修改对应的feedx即可.
网页可通过ip:port/stat.html查看ffserver状态
遇到的最大问题是出现推流时出现Invalid data found when processing input错误,后面发现是公司的网络问题,换一个网络环境推流成功.