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

来源:互联网 发布:铁路 知乎 编辑:程序博客网 时间:2024/06/05 19:00

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

原料:

(1)海康威视摄像头一个

(2)PC机一台

(3)阿里ip一个


实现的原理:

(1)ffmpeg的转码

(2)发送到ffserver服务器等待监听,

(3)转发到阿里云ip,

(4)手机,浏览器 就可以通过输入ip地址查看。


解决步骤1:

rtsp视频流

这里的视频流我当时是从海康那里得到的

rtsp://admin:SELJQJ00@192.168.31.247: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_sourceswget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2tar xjvf last_x264.tar.bz2cd x264-snapshot*PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --disable-openclPATH="$HOME/bin:$PATH" makemake installmake distclean

编译安装libfdk-aac(音频可装也可以不安装)

cd ~/ffmpeg_sourceswget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/mastertar xzvf fdk-aac.tar.gzcd mstorsjo-fdk-aac*autoreconf -fiv./configure --prefix="$HOME/ffmpeg_build" --disable-sharedmakemake installmake distclean
编译安装libvpx

cd ~/ffmpeg_sourceswget http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.0.tar.bz2tar xjvf libvpx-1.6.0.tar.bz2cd libvpx-1.6.0PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-testsPATH="$HOME/bin:$PATH" makemake installmake clean
编译安装ffmpeg

cd ~/ffmpeg_sourceswget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2tar xjvf ffmpeg-snapshot.tar.bz2cd ffmpegPATH="$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-nonfreePATH="$HOME/bin:$PATH" makemake installmake distcleanhash -r

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

xiaofei@ubuntu:~$ cd bin/xiaofei@ubuntu:~/bin$ lsfeed1.ffm  ffmpeg  ffprobe  ffserver  x264xiaofei@ubuntu:~/bin$ 

解决步骤3:

ffserver.conf配置文件的书写(一般放在etc下面)

sudo vi /etc/ffserer.conf

HTTPPort 9999RTSPPort 9990HTTPBindAddress 0.0.0.0MaxClients 1000MaxBandwidth 100000CustomLog -<Feed feed1.ffm>File ./feed1.ffmFileMaxSize 400MACL allow localhost</Feed>    <Stream test.webm>Feed feed1.ffm Format webm    VideoCodec libvpx VideoFrameRate 10VideoBitRate 300VideoSize 480x320NoAudioPreRollStartSendOnKey#AVPresetVideo default#AVPresetVideo baselineAVOptionVideo flags +global_headerAVOptionVideo cpu-used 0AVOptionVideo qmin 10AVOptionVideo qmax 42AVOptionVideo quality good#AudioCodec libfaac#AudioBitRate 32#AudioChannels 2#AudioSampleRate 22050AVOptionAudio flags +global_header</Stream><Stream teststat.html>Format status</Stream>

解决步骤4:

启动服务器

cd bin./ffserever -f /etc/ffserver.conf
启动ffmpeg

cd bin./ffmpeg -f rtsp -rtsp_transport tcp -i rtsp://admin:SELJQJ00@192.168.31.247: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.0bind_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.loglog_file = ./frps.log# debug, info, warn, errorlog_level = infolog_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 valuemax_pool_count = 500[Video]type = tcpauth_token = 123bind_addr = 0.0.0.0listen_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 = ipserver_port = 7000# console or real logFile path like ./frpc.loglog_file = ./frpc.log# debug, info, warn, errorlog_level = infolog_max_days = 3# for authenticationauth_token = 123# for privilege modeprivilege_token = 12345678# ssh is the proxy name same as server's configuration[ssh]# tcp | http, default is tcptype = tcplocal_ip = 127.0.0.1local_port = 22# true or false, if true, messages between frps and frpc will be encrypted, default is falseuse_encryption = true# default is falseuse_gzip = false# connections will be established in advance, default value is zeropool_count = 10[Video]type = tcplocal_ip = 127.0.0.1local_port = 9999
启动frpc

cd bin./frpc -c ./frpc.ini

浏览器上输入http:// ip:9999/test.webm 就可以查看了 当然也可以写上简单的页面来查看

<html lang="en">    <head>       <meta charset=utf-8/>    </head>    <body>        <div id='player'>     <video src="http://ip:9999/test.webm" width="352" height="264" controls autobuffer></video>        </div>    </body></html>







0 0
原创粉丝点击