windows下IIS让flv视频网站进度条随意拖放[C#]
来源:互联网 发布:软件定义存储产品 编辑:程序博客网 时间:2024/05/01 22:17
在做一个视频网站项目时,要求视频能够任意拖动播放,即使是没有缓冲完也需要
网上查了下资料,主要需要3点
- 播放器要支持
- flv视频要有关键帧和meta信息
- 服务器端要支持
首先,播放器的问题。
我用的播放器是flowplayer 3.2.7 下载地址:http://releases.flowplayer.org/flowplayer/flowplayer-3.2.7.zip
这个播放器默认是不支持拖放的,还需要插件,下载地址是:http://releases.flowplayer.org/flowplayer.pseudostreaming/flowplayer.pseudostreaming-3.2.7.zip
解压之后,将插件文件夹里的两个flash文件拷到播放器文件夹下。
然后将example文件夹下的javascript脚本改为如下情形
<script> flowplayer("player", "../flowplayer-3.2.7.swf", { // configure clip to use "lighthttpd" plugin for providing video data clip: { url: 'http://pseudo01.hddn.com/vod/demo.flowplayervod/Extremists.flv', autoPlay:false , url: 't4.flv', provider: 'lighttpd' }, // streaming plugins are configured normally under the plugins node plugins: { lighttpd: { url: '../flowplayer.pseudostreaming-3.2.7.swf' } } }); </script>
至此播放器支持了。
2、给flv视频加入关键帧和meta信息
上面提到,flv需要有meta信息才能正确地被分析并根据时间获取偏移量。有两个工具可以补全meta信息:
flvtool2:ruby写的一个著名工具,地址:https://rubyforge.org/projects/flvtool2/
jamdi:另外一个补全meta信息的工具,地址:http://yamdi.sourceforge.net/
两者都是命令行工具,也都有windows版本,下载了直接用就好。这里简单介绍一下用法:
flvtool2:
flvtool2 –U <input file> <output file>
/// <summary> /// 处理flv实现添加matedata信息 /// </summary> /// <param name="toolpath">toolpath="/FilesList/Exe/VideoTools/flvtool2.exe"</param> /// <param name="filepath">视频地址</param> public void flvtodrog(string toolpath, string filepath) { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(toolpath); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; startInfo.UseShellExecute = false; startInfo.CreateNoWindow = false; startInfo.Arguments = " -U " + filepath; try { System.Diagnostics.Process.Start(startInfo); } catch (Exception e) { // } }
jamdi:
jamdi –i <input file> –o <output file>
如此,meta信息就补全了。
3.在视频网站下新建一个handler,代码如下,使flv文件流输出
using System;using System.IO;using System.Web;public class FLVStreaming : IHttpHandler{ private static readonly byte[] _flvheader = HexToByte("464C5601010000000900000009"); public FLVStreaming() { } public void ProcessRequest(HttpContext context) { try { int pos; int length; // Check start parameter if present string filename = Path.GetFileName(context.Request.FilePath); using (FileStream fs = new FileStream(context.Server.MapPath(filename), FileMode.Open, FileAccess.Read, FileShare.Read)) { string qs = context.Request.Params["start"]; if (string.IsNullOrEmpty(qs)) { pos = 0; length = Convert.ToInt32(fs.Length); } else { pos = Convert.ToInt32(qs); length = Convert.ToInt32(fs.Length - pos) + _flvheader.Length; } // Add HTTP header stuff: cache, content type and length context.Response.Cache.SetCacheability(HttpCacheability.Public); context.Response.Cache.SetLastModified(DateTime.Now); context.Response.AppendHeader("Content-Type", "video/x-flv"); context.Response.AppendHeader("Content-Length", length.ToString()); // Append FLV header when sending partial file if (pos > 0) { context.Response.OutputStream.Write(_flvheader, 0, _flvheader.Length); fs.Position = pos; } // Read buffer and write stream to the response stream const int buffersize = 16384; byte[] buffer = new byte[buffersize]; int count = fs.Read(buffer, 0, buffersize); while (count > 0) { if (context.Response.IsClientConnected) { context.Response.OutputStream.Write(buffer, 0, count); //Starts sending to client right away context.Response.Flush(); count = fs.Read(buffer, 0, buffersize); } else { count = -1; } } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } } public bool IsReusable { get { return true; } } private static byte[] HexToByte(string hexString) { byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; }}
在web.config中添加
<?xml version="1.0" encoding="UTF-8"?><configuration> <system.webServer> <handlers> <add name="FLVStreaming" path="*.flv" verb="*" type="FLVStreaming" resourceType="Unspecified" preCondition="integratedMode" /> </handlers> </system.webServer></configuration>
还有一点别忘了,要在MIME类型添加.flv flv-application/octet-stream
运行IIS服务管理器,右键点击默认Web站点,选择属性,移动到主目录选项页,并点击配置按钮。应用程序配置对话框弹出来了。点击添加按钮并在可执行字段输入aspnet_isapi.dll文件路径,在扩展字段输入.flv
ps:如果你的操作系统是XP SP2的话,在输入aspnet_isapi.dll路径时需要手工输入,不能用复制粘贴的形式,否则保存按钮变灰。浏览时去掉check file exit选项。
至此就大功告成了,现在,播放flv视频就可以任意拖动了
- windows下IIS让flv视频网站进度条随意拖放[C#]
- windows下flv视频网站进度条随意拖放
- windows下flv视频网站进度条随意拖放
- IIS服务器配置flv格式视频处理程序实现进度条随意拖动
- windows+lighttpd+php+flash cs3搭建随意拖放视频网站(1)-lighttpd的搭建
- windows+lighttpd+php+flash cs3搭建随意拖放视频网站(2)-PHP配置
- windows+lighttpd+php+flash cs3搭建随意拖放视频网站(3)-flash cs3视频播放器的编写
- Windows服务器环境下flv视频播放——对未缓冲进度条实现拖动
- Windows服务器环境下flv视频播放——对未缓冲进度条实现拖动
- IIS支持.FLV视频
- 让IIS支持FLV
- 让Iis支持FLV
- 让iis支持FLV文件
- 让windows2003 IIS支持FLV
- Nginx下搭建flv视频服务器且支持视频拖动进度条播放
- Nginx下搭建flv视频服务器且支持视频拖动进度条播放
- Nginx下搭建flv视频服务器且支持视频拖动进度条播放
- Nginx下搭建flv视频服务器且支持视频拖动进度条播放
- Bad JNI version passed to AttachCurrentThread:
- jQuery动态添加删除select项(实现代码)
- AngularJS学习地址
- itv留言板模块
- solr部署
- windows下IIS让flv视频网站进度条随意拖放[C#]
- 一步步学习SPD2010--第二章节--处理SP网站(6)---- 探索SP网站
- LeetCode :: Palindrome
- Oracle用户口令
- linux deepin 2013 使用svn提示**gnome keyring **
- java.lang.NoClassDefFoundError问题的解决办法
- 随着帝企鹅这一系列的组合拳,腾讯将在移动时代以微信为杀伤性核武器
- 如何将App程序发布到苹果App Store
- ThinkPHP 项目分组URL生成与URL访问