ffmpeg+ffserver媒体服务搭建小记

linux pc机下的配置:
1、首先编译好ffmpeg,主要有ffmpeg、ffserver、ffplay三个主要可执行文件,具体编译这里就不详细说明了
2、准备好摄像头,作为输入文件,采集摄像头数据(当然用视频文件代替摄像头也行,不过没啥意思)
3、配置ffserver.conf文件,下面是我的配置

#基本信息设置
Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
NoDaemon

#媒体流文件设置
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 2M
ACL allow 127.0.0.1
</Feed>

#压缩为asf格式
<Stream test.asf>
Feed feed1.ffm
Format asf
VideoFrameRate 15
VideoSize 352x240
VideoBitRate 256
VideoBufferSize 40
VideoGopSize 30
StartSendOnKey
NoAudio
</Stream>

#rm格式视频
<Stream test.rm>
Feed feed1.ffm
Format rm
VideoSize 640x480
AudioBitRate 32
VideoBitRate 128
VideoFrameRate 25
VideoGopSize 25
NoAudio
</Stream>

#可以查看ffserver的启动状态
<Stream stat.html>
Format status
ACL allow localhost
</Stream>

#不起作用
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>

4、启动ffserver
ffserver -f /etc/ffserver.conf (假设ffserver.conf存放在etc目录下)
可以在网页输入:http://115.156.196.242:8090/stat.html查看ffserver运行状态

5、启动ffmpeg
ffmpeg -f video4linux2 -i /dev/video0 http://localhost:8090/feed1.ffm
如果有采集视频的信息,说明ffmpeg运行正确

6、实时播放
ffplay播放:ffplay http://115.156.196.242:8090/test.rm
mplayer也可以播放:mplayer http://115.156.196.242:8090/test.rm
windows media player播放:文件->URL链接输入http://115.156.196.244:8090/test.asf
我试过用快播和realplayer也可以播放


arm-linux嵌入式系统下的配置(我的硬件是tiny6410的板子):
1、同样需要交叉编译好ffmpeg,主要有ffmpeg、ffserver、ffplay三个主要可执行文件,并且库文件和可执行文件打包拷贝到嵌入式系统上,具体过程这里就不详细说明了
2、准备好摄像头,作为输入文件,采集摄像头数据(当然用视频文件代替摄像头也行,不过没啥意思)
3、配置ffserver.conf文件,下面是我的配置,与物理机基本一致

#基本信息设置
Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
NoDaemon

#媒体流文件设置
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 2M
ACL allow 127.0.0.1
</Feed>

#压缩为asf格式
<Stream test.asf>
Feed feed1.ffm
Format asf
VideoFrameRate 15
VideoSize 352x240
VideoBitRate 256
VideoBufferSize 40
VideoGopSize 30
StartSendOnKey
NoAudio
</Stream>

#rm格式视频
<Stream test.rm>
Feed feed1.ffm
Format rm
AudioBitRate 32
VideoBitRate 128
VideoFrameRate 25
VideoGopSize 25
NoAudio
</Stream>

#可以查看ffserver的启动状态
<Stream stat.html>
Format status
ACL allow localhost
</Stream>

#不起作用
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>

4、编写运行shell文件,下面是我的shell文件
#!/bin/sh
#基本的库文件设置为全局变量
export LD_LIBRARY_PATH=/usr/local/sheryuan/ffmpeg/lib:$LD_LIBRARY_PATH
#启动ffserver
./bin/ffserver -f ffserver.conf &
#这里延时主要是为了保证ffserver完全启动后才启动ffmpeg
sleep 20
#启动ffmpeg,注意。IP用127.0.0.1,用localhost和115.156.196.244会报错
./bin/ffmpeg -f video4linux2 -i /dev/video2 http://127.0.0.1:8090/feed1.ffm &
#启动ffplay查看视频流,我的板子上ffplay有点问题,所以我用的是mplayer,如果触摸屏上显示了图像说明成功
mplayer http://115.156.196.244:8090/test.rm
./bin/ffplay http://115.156.196.244:8090/test.rm

6、远端也可以监控
另外一台linux机下ffplay播放:ffplay http://115.156.196.244:8090/test.rm
mplayer也可以播放:mplayer http://115.156.196.244:8090/test.rm
PC机下windows media player播放:文件->URL链接输入http://115.156.196.244:8090/test.asf
我试过用快播和realplayer也可以播放

感觉ARM上采集视频流播放比较滞后,不太实用,一些参数都需要自己去摸索尝试

ARM上可能出现下面错误:

Failed to resolve hostname localhost: Temporary failure in name resolution
http://localhost:8090/feed1.ffm: Input/output error

一般是启动ffmpeg出现这样的错误,肯能没用127.0.0.1,也可能是ffserver.conf视频配置参数有问题

猜你喜欢

转载自blog.csdn.net/xiaoyangger/article/details/8996328