1. 程式人生 > >windows下IIS讓flv視訊網站進度條隨意拖放[C#]

windows下IIS讓flv視訊網站進度條隨意拖放[C#]

在做一個視訊網站專案時,要求視訊能夠任意拖動播放,即使是沒有緩衝完也需要

網上查了下資料,主要需要3點

  1. 播放器要支援
  2. flv視訊要有關鍵幀和meta資訊
  3. 伺服器端要支援
   <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視訊就可以任意拖動了

相關推薦

windowsIISflv視訊網站進度隨意[C#]

在做一個視訊網站專案時,要求視訊能夠任意拖動播放,即使是沒有緩衝完也需要 網上查了下資料,主要需要3點 播放器要支援flv視訊要有關鍵幀和meta資訊伺服器端要支援 <script> flowplayer("player", "../f

windowsflv視訊網站進度隨意

網站中視訊都轉換成flv格式,奈何flv格式無法拖拽,此問題糾結了好久,最終得以解決。現將解決思路記錄下來,大多數源於網上找到的。 視訊拖拽滿足要求 1.播放器要支援 2.flv視訊要有關鍵幀和meta資訊 3.伺服器端要支援 總體而言分兩步: 一、視訊關鍵幀的處理;二、N

windows server2012 IIS伺服器上釋出網站挖坑記

前幾天在亞馬遜申請了一個一年的免費伺服器,今天終於打算開始弄。 先說一下前期準備: 1. 在freenom上申請一個免費的tk域名。(步驟百度有) 2. 在亞馬遜雲上申請一個免費的EC伺服器(百

Windows搭建Wordpress部落格網站

一:安裝wamp Windows下的Apache+Mysql/MariaDB+Perl/PHP/Python,一組常用來搭建動態網站或者伺服器的開源軟體,本身都是各自獨立的程式,但是因為常被放在一起使用,擁有了越來越高的相容度,共同組成了一個強大的Web應用程

如何配置IIS自己的網站在公網上被訪問

在大學裡網頁製作基本成了我們的必修課,只要簡單的做個個人網站就可以了,有的朋友比較認真把自己的網站申請了域名釋出上去了或者自己掛在自己電腦上讓人家訪問,不管只是學習上的要求還是工作上的要求我們簡單的講下網站通過iis設定來被公網訪問。     這裡訪問網站只能是通過ip地址哦,因為你沒有申請域名沒有放到

windowsIIS+PHP解決大檔案上傳500錯問題

inux下改到iis+php後,上傳大於2M就出500錯,改了php.ini中的upload_max_filesize也不行,最後解決如下: 第一步:修改php.ini 上傳大小限制 (以上傳500M以下大小的檔案為例)  查詢以下選項並修改->  file_u

windows用OPENGL播放視訊

1.下載  2.OPENGL 標準定義了基本的渲染API ,還定義了視窗系統的API ,WINDOWS 用wgl**,定義在 wingdi.h 3.本程式碼採用OPENGL 1.2 支援頂點著色 標頭檔案 #pragma once #include "videodi

基於opencv給視訊加上進度

platform: opencv 3.4.2 &vs 2017 #include "cv.h" #include "highgui.h" int g_slider_position = 0; CvCapture * g_capture = NULL; //再拖動

openCV 播放視訊進度

#include "opencv2/core.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" #include "

我的Android進階之旅------>Android如何通過自定義SeekBar來實現視訊播放進度

首先來看一下效果圖,如下所示:其中進度條如下:接下來說一說我的思路,上面的進度拖動條有自定義的Thumb,在Thumb正上方有一個PopupWindow視窗,窗口裡面顯示當前的播放時間。在SeekBar右邊有一個文字框顯示當前播放時間/總時間。step1、先來看一看Popup

android 視訊錄製進度(分段錄製,回滾刪除,類似美拍錄製)

最近因為公司啟動微視訊專案,負責視訊錄製及視訊編輯這塊工作,而首先視訊錄製這塊需要支援分段錄製,和回滾刪除功能。 所以就做了這麼繼承View自定義了這個一個進度條小demo,有待完善及優化。 效果圖先出場 因為比較簡單加上有註釋,就不再多囉嗦,直接上程式碼

基於vue2.0實現音樂/視訊播放進度元件的思路及具體實現方法+程式碼解釋

基於vue2.0實現音樂/視訊播放進度條元件的方法及程式碼解釋 需求分析: ①:進度條隨著歌曲的播放延長,歌曲播放完時長度等於黑色總進度條長度;時間實時更新。 ②:當滑動按鈕時,實時更新播放時間,橙色進度條長度也會隨著按鈕的滑動而改變,當滑動結束時,橙色區域停留在滑動結束的

Unity UI適配 之 GridLayoutGroup元件的內容適配(進度適配)

好久沒有更新部落格了,藍廋啊。 今天寫一寫關於GripLayoutGroup元件的螢幕適配問題,以在ARPG遊戲中常用的經驗條適配來舉例子,以此來加深自己的記憶,以便在下次需要製作該功能時能夠快速完成。      以上是效果截圖。   一,制定標準寬高 &nbs

微信小程式音樂播放器開發(進度拽)

前言  這篇文章上一版本是用audio元件開發的播放器,隨後反應音訊載入速度慢的問題 又用小程式內建的背景音樂播放的方法寫了一遍,邏輯是一樣的邏輯,希望對大家有所幫助! <view class='audiosBox'> <view c

WINDOWSIIS的負載均衡

無法訪問 ges 配置 如果 容易 截圖 大型 sha 創建 來自http://www.cnblogs.com/allen0118/p/4294066.html 在大型Web應用系統中,由於請求的數據量過大以及並發的因素,導致Web系統會出現宕機的現象,解決這一類問

設置IIS網站擁有“網站目錄外文件”的讀寫權限的操作(圖文)

gpo 展開 權限 fomat post 當前 strong 選擇 clas 一、找到“應用程序池”名稱 1、打開“IIS” (1)、點擊開始菜單找到管理工具,如下圖 (2)、打開管理工具,找到“Internet Infomation Services(IIS)

填坑:Windows使用OpenSSL生成自簽證書(很簡單,一個晚上搞明白的,後來者少走彎路)

vat 都是 環境 csr 過程 環境變量 crypt 報錯 out 最近在學習中發現openssl 中有個坑,所有的教程都是openssl genrsa -des3 -out private.key 1024,但是產生的證書,npm start 之後就報錯如下: erro

LINUX核心模組載入Windows驅動

最近一段時間以來,幾乎每一臺行動式計算機都內建了無線功能,但是它們中有很多並不支援Linux。因此,除非這些計算機設定了雙啟動,這樣做LINUX使用者也未必可以使用無線網絡卡,儘管如此,除非Windows正在執行,否則這些便攜計算機可能依然無法連線到無線網路。   最近一段時間以來,幾乎每一臺行

Windows安裝php_rar 擴充套件,php實現rar檔案的讀取和解壓

PHP Rar Archiving 模組 (php_rar) 是一個讀取和解壓rar檔案的模組,但不提供RAR壓縮(打包)的功能。 1.首先要到PECL的RAR頁面下載DLL. 根據自己的情況選擇下載對應版本的DLL. PHP版本要求:php_rar模組適用於php 5.

Win10IIS配置、MVC專案釋出、IIS新增網站圖解

說明 安裝IIS 開啟控制面板 進入程式 點選啟用或關閉Windows功能 等待幾秒鐘,勾選以下專案 驗證I