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
- RTSP视频流的远程播放的实现
- 基于EasyDarwin的实现远程视频传输--(RTSP之RTSPSession)
- 安卓篇:小白的神经质--RTSP视频流的播放
- IOS 上如何播放RTSP协议的视频流
- 网页播放rtsp视频流
- 基于EasyDarwin的实现无人机远程视频传输--RTSP协议分析篇
- 基于EasyDarwin的实现无人机远程视频传输--RTSP初始化程序分析
- 基于EasyDarwin的实现无人机(4G)远程视频传输--(RTSP之TaskThread)
- 基于ffpmeg和sdl的rtsp视频播放器
- 基于libVLC的视频播放器(支持RTSP协议)
- 基于VLC的Unity视频播放器(支持本地视频和rtmp、rtsp等视频流)
- Android使用VideoView播放live555服务端的RTSP视频流demo
- Android ffmpeg 3.4 JNI移植 NDK编译播放 ffserver 推送的 Rtsp 视频流
- Android VideoView如何播放RTSP的流
- Android VideoView如何播放RTSP的流
- Android VideoView如何播放RTSP的流
- 使用VideoView播放rtsp视频流
- 使用vlc sdk播放rtsp视频流
- Java进阶代码
- 使用转换mnist数据库保存为bmp图片
- 向python脚本传递参数的方法
- cos组件实现文件上传
- 【java】消息队列
- RTSP视频流的远程播放的实现
- HDU2031进制转换
- python Non-ASCII character '\xe5' in file...的问题
- 经典算法之一:快速排序
- bzoj 4008 [HNOI2015]亚瑟王 期望dp
- SVN错误:由于目标机器积极拒绝,无法连接 的解决方法
- codeforces 747D Winter Is Coming
- java.lang.OutOfMemoryError: Java heap space
- leetcode之C#篇1