视频支持拖动进度条播放的实现(基于nginx)
http协议下的flv/mp4流式播放支持的三个要点:
1 服务器端要支持flv/mp4流式播放,现在nginx或者lighttpd都是支持这样的应用的,还支持mp4的流式播放(默认编译版本一般都是打开了flv流式播放,而mp4要自己编译,若需要,也可以自己编译),但要专门配置。
参考文章《使用Nginx搭建flv流媒体服务器》
http://www.yanghengfei.com/archives/475/
2 播放的flv/mp4有完整的mete信息,其中包括视频分辨率、帧率等信息。有相应的软件对一般的flv上添加这样的标记信息,添加后的也支持一般的应用,而且数据量增加不多
参考文章《x264编码器参数完整对照表》
http://www.php-oa.com/2009/03/09/ffmpeg_x264.html
3 客户端允许发生请求流式播放的请求,并且能够处理获取的流式数据,从随机点开始播放。
如jwplayer支持播放http流媒体。
参考文章《JW Player使用简介》
http://j-coriolanus.blog.163.com/blog/static/64211038200992011745532/
参考文章《基于nginx+jwplayer的flv流媒体》
http://www.iinuu.eu/en/it-guru/flv-streaming-using-nginx-and-jw-player-5-1
首先配置nginx服务支持flv模块功能
⑴查看你的nginx是否已支持flv功能模块
[root@localhost ~]# /usr/local/nginx/sbin/nginx -V //查看nginx服务支持
结果:
nginx version: nginx/0.8.24
built by gcc 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC)
configure arguments: --prefix=/usr/local/nginx --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module
分析:我的nginx版本0.8.24,http_flv_module已经开启,支持flv服务。
⑵安装支持flv模块的nginx服务器:
#tar zxvf nginx-0.8.24.tar.gz
#cd nginx-0.8.24
#./configure --prefix=/usr/local/nginx --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module //开启flv模块
#make && make install
#/usr/local/nginx/sbin/nginx //启Nginx
⑶nginx服务器配置(nginx.conf文件)
server
{
listen 80;
server_name localhost;
charset utf-8;
location / {
root html;
index index.php index.html index.htm;
}
location ~ \.flv {
flv;
limit_rate_after 10m;
limit_conn one 1;
limit_rate 85k;
}
}
使用location 将 .flv的文件指向flv模块即可。
以上使用limit_rate 是为了限速,当 flv视频下载超过10M,则限速到85K,只允许用户开1个进程,也就是先快速缓存可以播放,后面的慢慢下载。
⑷安装支持flv拖放进度条的播放器
上面三步都是安装支持nginx服务支持flv功能的,现在需要支持flv拖放进度条的播放器。
你需要有一个能够播放Flv视频的播放器,很显然,它还需要能够嵌入到网页中。目前比较流行的,功能上也还比较完善的一个Flv播放器就是 JW FLV Media Player(也称为 jwplayer)。它的网址是:
http://www.longtailvideo.com/players/jw-flv-player/
这个播放器支持视频加入广告和视频节目单功能,下载包里面有很全的实例和使用方式,将包中的player.swf(如果是带有Viral插件的,就是player-viral.swf)放到你的网站内,这就是用来提供视频播放的播放器。至于包中其它的文件,都可以不要。
接下来,将播放器嵌入到你的视频播放网页中,直接嵌入,使用Object/Embed代码嵌入:
<embed
type="application/x-shockwave-flash"
id="player2"
name="player2"
src="player.swf"
width="328"
height="200"
allowscriptaccess="always"
allowfullscreen="true" flashvars="file=http://192.168.40.135/test.flv&image=http://192.168.40.135/preview.jpg&autostart=false&type=http&streamer=start"
> </embed>
file:"video.flv", // FLV视频地址
type:"http", // 数据类型,本文是基于http模式的,这个必须写滴
image:"preview.jpg",// 开始播放之前的预览图
autostart:"false", // 是否自动播放
streamer:"start", // 参数为 “start”,这个参数用于传递给服务器从特定的关键帧开始播放,nginx编译了 flv 模块 所以是支持的。
在使用jwplayer播放视频,并进行跳转时,会赂nginx服务器发起请求,类似
"GET /video.flv?start=27503944 HTTP/1.1" 200 1752013"
"GET /video.flv?start=88336188 HTTP/1.1" 200 13564873"
⑸添加关键帧
如果一个Flv视频要能够被拖到特定点播放,该Flv需要在其metadata中有关键帧的信息。
使用mencoder转换成的flv视频默认每250帧加入一个关键帧。
如果你的Flv视频制作的时候没有这些信息,也是不能拖放播放的。可以使用yamdi来为你的视频加上关键帧信息 :
安装:
1) [root@localhost ~]#wget http://sourceforge.net/projects/yamdi/files/yamdi/1.4/yamdi-1.4.tar.gz/download
2) [root@localhost ~]#tar zxvf yamdi-1.4.tar.gz
3 )[root@localhost ~]#cd yamdi-1.4/
4) [root@localhost yamdi-1.4]#make && make install
使用方法:
yamdi -i source.flv -o dest.flv //原视频 输出视频
补充
通过使用nginx-rtmp-module https://github.com/arut/nginx-rtmp-module 来增加对HLS的支持;
nginx-rtmp-module 本身也支持RTMP协议,从而也可以基于nginx来搭建在线直播系统。
视频支持拖动进度条播放的实现(基于nginx)的更多相关文章
- Android——音乐播放器完善——进度条显示当前播放进度,加可拖动进度条(未待解决完问题)
效果: 问题:可拖动进度条随进度条移动时,会致使音乐卡顿(待解决) xml <?xml version="1.0" encoding="utf-8"?&g ...
- [Android] SeekBar---可拖动进度条
SeekBar---可拖动进度条 ()setMax //设置SeekBar最大数值 ()setProgress //设置SeekBar当前数值 ()setSecondaryProgress//设置Se ...
- UISlider无法拖动进度条的问题解决
UISlider无法拖动进度条的问题解决 最近业务中的视频播放使用到了UISlider,但是有一个奇怪的问题,就是在Modar出来的控制器中UISlider是可以正常使用的,但是在Push出来的控制器 ...
- android中SeekBar拖动进度条的使用及事件监听
下面和大家分享一下android中SeekBar拖动进度条的使用,以及事件监听.拖动进度条的事件监听需要实现SeekBar.OnSeekBarChangeListener接口,调用SeekBar的se ...
- Html5中 视频 音频标签 进度条问题
最近项目中使用Html5的video和audio标签来在线播放视频和音频文件,但是遇到个奇葩的问题,页面上播放之后进度条无效, 查看w3c之后发现html代码并没有什么不同,之后猜想如果用静态的htm ...
- canvas-弧形可拖动进度条
一.效果如下: See the Pen XRmNRK by pangyongsheng (@pangyongsheng) on CodePen. 链接dome 二. 本文是实现可拖动滑块实现的基本,及 ...
- canvas-圆弧形可拖动进度条
一.效果如下: See the Pen XRmNRK by pangyongsheng (@pangyongsheng) on CodePen. 链接dome 二. 本文是实现可拖动滑块实现的基本思路 ...
- Jquery实现可拖动进度条demo
html <div class="progress"> <div class="progress_bg"> <div class= ...
- 基于<MediaElement>的WPF视频播放器(可拖拽进度条播放)【1】
一.前言 前两天上峰要求做一个软件使用向导,使用WPF制作.这不,这两天从一张白纸开始学起,做一个播放演示视频的使用向导.以下是粗设计的原型代码: 二.效果图 三.代码 前台代码: < ...
随机推荐
- js二进制转换十进制
var a = 1010;alert(a.toString(2)); //转成二进制 alert(parseInt( "101110100 ",2)) ;//转成十进制 null
- python 清空列表
# lst = ["篮球","排球","乒乓球","足球","电子竞技","台球" ...
- IE8 JSON is not defined
问题原因: 昨天遇到了一个问题.就是用ajax从后台查询数据时,返回信息无法显示,经过提示发现是IE控制台提示: JSON is not defined 错误. 而且这个问题在本人自己的电脑上是不存在 ...
- UVA-12118 Inspector's Dilemma (欧拉回路)
题目大意:一个有v个顶点的完全图,找一条经过m条指定边的最短路径. 题目分析:当每条边仅经过一次时,路径最短.给出的边可能构成若干棵树.在一棵树中,奇点个数总为偶数,若一棵树的奇点个数为0,则这棵树可 ...
- UVA-810 A Dicey Problem (BFS)
题目大意:滚骰子游戏,骰子的上面的点数跟方格中的数相同时或格子中的数是-1时能把格子滚过去,找一条从起点滚到起点的路径. 题目大意:简单BFS,状态转移时细心一些即可. 代码如下; # include ...
- angularJs---route
route route---‘路由’ ajax的弊端: 1.ajax请求不会留下history记录 2.用户无法直接通过url进入应用中的指定页面(保存书签,分享朋友?) 3.ajax不利于SEO 前 ...
- do-while语句和while的区别
do-while语句是一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件.其实就是,代码在刚开始执行的时候,都是要先走一遍do循环体内的代码,然后在与while里面的条件进行判断,成 ...
- [批处理]自动修改本机IP地址
前言 抱着笔记本经常到处跑的人,今天回宿舍上网,明天去机房上网,后面去办公室上网,每到一个地方,都要更换一次IP网关掩码 如果都是DHCP还好,关键是为了组织为了方便管理这些地方都是使用的静态IP,所 ...
- 流程设计器jQuery + svg/vml(Demo1 - 构建设计器UI界面)
之前用Silverlight实现过一个流程设计器(Demo),使用起来不是很方便.打算参考GooFlow,结合自己对工作流的理解,用jQuery改造实现一个,力求简单实用. 第一步是要构建设计器的UI ...
- SQL中注意数据类型对性能的影响
在数据存储的时候有时我们不太注意字符编码对性能影响,但小问题往往造成很大的影响.在数据量小的时候感觉不出来,一旦上到百万级以上的时候就非常明显了 看下面两个SQL语句 ---SQL1 SELECT * ...