徐高翔的个人网站

ffmpeg+ffserver实现基于http的视频点播

2016-12-15

软硬件环境

  • ubuntu 18.04 64bit
  • ffmpeg

简介

ffmpeg是一个开源的音视频处理的开发套件,它包括几个非常实用的命令行工具,ffmpegffprobeffserverffplay。本文实现的是ffmpeg + ffserver来搭建基于http的视频点播系统。

系统架构

下图是一个简单的系统架构。图中的cam.ffm,可以理解为是一个缓存文件,ffmpeg负责从本地或者网络中抓取数据,然后发送给ffserver,如果此时没有客户端连接,那么数据就会被写入到cam.ffm中。

arch

安装环境

1
sudo apt install ffmpeg

启动ffserver

修改文件/etc/ffserver.conf,如果没有就自己创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxClients 10
MaxBandWidth 50000
CustomLog -
#NoDaemon

<Feed cam.ffm>
File /tmp/cam.ffm
FileMaxSize 1G
ACL allow 127.0.0.1
ACL allow localhost
</Feed>
<Stream cam.mjpeg>
Feed cam.ffm
Format mpjpeg
VideoFrameRate 20
VideoBitRate 10240
VideoBufferSize 20480
VideoSize 1920x1080
VideoQMin 3
VideoQMax 31
NoAudio
Strict -1
</Stream>
<Stream stat.html>
Format status
# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.1.0 192.168.1.255
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>

start_ffserver

启动ffmpeg

准备个本地视频文件作为ffmpeg的输入,网络视频流也可以。在ffmpeg启动之前需确保ffserver已经启动

start_ffserver

查看状态

在浏览器中访问http://localhost:8090/stat.html,页面上会显示出当前系统中可以访问的链接,如下图所示,http://localhost:8090/index.html,这个链接我们在ffserver.conf中做了重定向,会直接跳转去访问http://www.ffmpeg.org/,链接http://localhost:8090/cam.mjpeg是我们想要的

start_ffserver

在浏览器中播放mjpeg

start_ffserver

输出格式为flv

修改ffserver.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxClients 10
MaxBandWidth 50000
CustomLog -
#NoDaemon

<Feed cam.ffm>
File /tmp/cam.ffm
FileMaxSize 1G
ACL allow 127.0.0.1
ACL allow localhost
</Feed>
<Stream test>
Feed cam.ffm
Format flv
VideoFrameRate 20
VideoBitRate 10240
VideoBufferSize 20480
VideoSize 1920x1080
VideoQMin 3
VideoQMax 31
NoAudio
Strict -1
</Stream>
<Stream stat.html>
Format status
# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.1.0 192.168.1.255
</Stream>
<Redirect index.html>
URL http://www.ffmpeg.org/
</Redirect>

重新启动ffmpeg

1
ffmpeg -i test.ts http://localhost:8090/cam.ffm

ffplay播放flv

start_ffserver

rtsp作为ffmpeg的输入源

1
2
3
ffmpeg -rtsp_transport tcp -i
rtsp://user:password@192.168.1.100:554/Streaming/Channels/1
http://localhost:8090/cam.ffm

参看资料

  1. https://trac.ffmpeg.org/wiki/ffserver
  2. https://www.ffmpeg.org/ffserver.html

本文链接 https://xugaoxiang.com/2016/12/15/ffmpeg+ffserver实现基于http的视频点播/

推荐文章(由hexo文章推荐插件驱动)

使用支付宝打赏
使用微信打赏

请博主喝咖啡!