RTSP视频流的远程播放的实现

无心学习,把最近这段时间的所想所思寄托在这片土地上,算是对自己的一个交代,也是对各位大大们的一种感激。

原料:

(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

这样基本上就安装好啦 你会发现在你的用户目录的bin文件夹下发现四个可执行文件

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 就可以查看了 当然也可以写上简单的页面来查看


    
       
    
    
        
RTSP视频流的远程播放的实现_第1张图片






你可能感兴趣的:(RTSP视频流的远程播放的实现)