想通过远程查看家中的摄像头,查阅相关资料,通过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错误,后面发现是公司的网络问题,换一个网络环境推流成功.