无心学习,把最近这段时间的所想所思寄托在这片土地上,算是对自己的一个交代,也是对各位大大们的一种感激。
原料:
(1)海康威视摄像头一个
(2)PC机一台
(3)阿里ip一个
实现的原理:
(1)ffmpeg的转码
(2)发送到ffserver服务器等待监听,
(3)转发到阿里云ip,
(4)手机,浏览器 就可以通过输入ip地址查看。
解决步骤1:
rtsp视频流
这里的视频流我当时是从海康那里得到的
rtsp://admin:[email protected]:554/h264/ch1/main/av_stream
解释下:rtsp:视频流格式,admin:SELJQJ00 :设置用户名和密码 192.168.31.247:554 设置的是视频流ip和端口号 h264表示编码
解决步骤2:
ffmpeg的配置与安装
考虑到我们的最终目标是实现无插件的视频的播放,我视频流的封装格式采用了支持html5的webm格式。
webm格式的视频流的编码方式为vpx,而海康威视摄像头是rtsp视频流,采用的是H264格式编码,因此要进行对视频流的转码。
因此安装ffmpeg时候,需要libx264和libvpx的安装包。
编译安装流程
创建文件包存放目录
mkdir ~/ffmpeg_sources
安装yasm
sudo apt-get install yasm
编译安装libx264包
cd ~/ffmpeg_sources
wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
tar xjvf last_x264.tar.bz2
cd x264-snapshot*
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --disable-opencl
PATH="$HOME/bin:$PATH" make
make install
make distclean
编译安装libfdk-aac(音频可装也可以不安装)
cd ~/ffmpeg_sources
wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install
make distclean
编译安装libvpx
cd ~/ffmpeg_sources
wget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.0.tar.bz2
tar xjvf libvpx-1.6.0.tar.bz2
cd libvpx-1.6.0
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests
PATH="$HOME/bin:$PATH" make
make install
make clean
编译安装ffmpeg
cd ~/ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree
PATH="$HOME/bin:$PATH" make
make install
make distclean
hash -r
xiaofei@ubuntu:~$ cd bin/
xiaofei@ubuntu:~/bin$ ls
feed1.ffm ffmpeg ffprobe ffserver x264
xiaofei@ubuntu:~/bin$
解决步骤3:
ffserver.conf配置文件的书写(一般放在etc下面)
sudo vi /etc/ffserer.conf
HTTPPort 9999
RTSPPort 9990
HTTPBindAddress 0.0.0.0
MaxClients 1000
MaxBandwidth 100000
CustomLog -
File ./feed1.ffm
FileMaxSize 400M
ACL allow localhost
Feed feed1.ffm
Format webm
VideoCodec libvpx
VideoFrameRate 10
VideoBitRate 300
VideoSize 480x320
NoAudio
PreRoll
StartSendOnKey
#AVPresetVideo default
#AVPresetVideo baseline
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 10
AVOptionVideo qmax 42
AVOptionVideo quality good
#AudioCodec libfaac
#AudioBitRate 32
#AudioChannels 2
#AudioSampleRate 22050
AVOptionAudio flags +global_header
Format status
解决步骤4:
启动服务器
cd bin
./ffserever -f /etc/ffserver.conf
启动ffmpeg
cd bin
./ffmpeg -f rtsp -rtsp_transport tcp -i rtsp://admin:[email protected]:554/h264/ch1/main/av_stream http://localhost:9999/feed1.ffm
在本地浏览器上输入http://192.168.37.247:9999/test.webm 就可以查看了,不需要插件的其中这里的ip我用的是虚拟机的ip。
解决步骤5:
如果想通过外网访问,我采用的是frp内网穿透的方式
将frps和frps.ini放在阿里服务器上
frps.ini配置文件
[common]
# A literal address or host name for IPv6 must be enclosed
# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
bind_addr = 0.0.0.0
bind_port = 7000
# if you want to support virtual host, you must set the http port for listening (optional)
vhost_http_port = 80
#vhost_https_port = 443
# if you want to configure or reload frps by dashboard, dashboard_port must be set
#dashboard_port = 7500
# dashboard assets directory(only for debug mode)
# assets_dir = ./static
# console or real logFile path like ./frps.log
log_file = ./frps.log
# debug, info, warn, error
log_level = info
log_max_days = 3
# if you enable privilege mode, frpc can create a proxy without pre-configure in frps when privilege_token is correct
#privilege_mode = true
#privilege_token = 12345678
# only allow frpc to bind ports you list, if you set nothing, there won't be any limit
#privilege_allow_ports = 2000-3000,3001,3003,4000-50000
# pool_count in each proxy will change to max_pool_count if they exceed the maximum value
max_pool_count = 500
[Video]
type = tcp
auth_token = 123
bind_addr = 0.0.0.0
listen_port = 9999
frpc和frpc.ini放在本机上
frpc.ini配置文件
# [common] is integral section
[common]
# A literal address or host name for IPv6 must be enclosed
# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
server_addr = ip
server_port = 7000
# console or real logFile path like ./frpc.log
log_file = ./frpc.log
# debug, info, warn, error
log_level = info
log_max_days = 3
# for authentication
auth_token = 123
# for privilege mode
privilege_token = 12345678
# ssh is the proxy name same as server's configuration
[ssh]
# tcp | http, default is tcp
type = tcp
local_ip = 127.0.0.1
local_port = 22
# true or false, if true, messages between frps and frpc will be encrypted, default is false
use_encryption = true
# default is false
use_gzip = false
# connections will be established in advance, default value is zero
pool_count = 10
[Video]
type = tcp
local_ip = 127.0.0.1
local_port = 9999
启动frpc
cd bin
./frpc -c ./frpc.ini
浏览器上输入http:// ip:9999/test.webm 就可以查看了 当然也可以写上简单的页面来查看