Öncelikle piyasada bir çok oynatıcı var ancak ücretsiz olanlardan çok azı iş görecek kalitede. Göreceli olarak en çok rağbet gördüğünü jw player'ı kullanacağım.
Öncelikle şu adresten http://www.jeroenwijering.com/upload/mediaplayer.zip en son versiyonu indirin. Başlangıçta söylemekte fayda var ki JW Player'ın kullanım sözleşmesi kazanç elde edilen sitelerde lisans satın almadan kullanmayı ihlal sayıyor. Şu an ki fiyatı tek site için 30€ civarı, zaten gelir elde ettiğiniz bir siteyse hiç de yüksek bir rakam değil aslında.Yapılması gerekenleri maddeler halinde yazacak olursak.
- Paketin içindeki swfobject.js, yt.swf,preview.jpg,video.flv, player.swf dosyalarını websitenizin giriş dizinine kopyalayın
- Video gösterimini yapacağını sayfanın ilgili yerine aşağıdaki kod parçasını yerleştirin
<div id="container"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</div> <script type="text/javascript" src="swfobject.js"></script> <script type="text/javascript"> var s1 = new SWFObject("player.swf","ply","328","200","9","#FFFFFF"); s1.addParam("allowfullscreen","true"); s1.addParam("allowscriptaccess","always"); s1.addParam("flashvars","file=video.flv&image=preview.jpg"); s1.write("container");
</script>
Hangi video'yu göstereceğimiz tamamen
s1.addParam("flashvars","file=video.flv&image=preview.jpg");
satırındaki parametrelerle belirleniyor. buradaki video.flv görüntüleyeceğimiz vide,preview.jpg ise video kullanıcı tarafından oynatılmadan önce görüntülenecek görsel.
Ancak burada dikkat edebileceğiniz gibi dosyaların yolları daima dışarıdan erişilebilir durumda olmasını gerektir.Bu durumda sizin sitenizde host ettiğiniz bir dosya başkalarının kullanımına açık durumda olacaktır. Bu can sıkıcı durumu tampon bir sayfa ile ortadan kaldırabiliriz.Örneğin Video.aspx adında bir asp.net sayfası oluşturabilir ve içerisine aşağıdaki kodu koyabiliriz.
Ancak bunu yapmadan önce IIS'in flv dosyalarını stream edebilmesi için bir kaç ufak değişikliğe ihtiyacı var.
Öncelikle IIS yönetim konsolunda websitesinin Home Directory -> Configuration bölümüne tıklayın.Karşınıza gelecek olan ekran şu olacaktır.
Bu ekranda Add butonuna tıklayın ve Gelen ekranı aşağıdaki gibi doldurun
Buradaki aspnet_isapi.dll i bulabilmek için start menüden run'ı seçip %WinDIR%Microsoft.NETFrameworkv2.0.50727 yazıp enter'a basarsanız dosyanın bulunduğu klasörü tespit edebilirsiniz.
Sonrasında web.config dosyanıza
verb="*" path="*.flv" type="FLVStreaming" />
satırlarını ekleyin.Ve şimdi de aşağıdaki kodu App_Code klasöründe FlvStreaming.cs adında bir dosya oluşturarak içine yapıştırın.
using System;
using System.IO;
using System.Web;
public class FLVStreaming : IHttpHandler
{
// FLV header
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);
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;
}
}
Artık IIS'imiz flv dosyalarını stream etmeye hazır.Şimdi de kendi flv dosyalarımızı video player'a tamponlayacak Video.aspx dosyasını oluşturalım
public partial class Video : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["fn"] != null)
{
string dir = "C:Inetpubwwwroot"; //Buraya videoların bulunduğu klasörü fiziksel yolu
string fileName = Request.QueryString["fn"];
Response.Clear();
Response.ContentType = "video/x-flv";
Response.AddHeader("Content-Disposition", "filename=" + fileName);
byte[] fileData = File.ReadAllBytes(dir + fileName);
Response.BinaryWrite(fileData);
}
}
}
Şimdi oynatılacak video dosyasını belirlediğimiz parametreyi düzenleyelim
s1.addParam("flashvars","file=video.aspx?fn=video.flv&image=preview.jpg");
Eğer bir hata yoksa düzgün bir şekilde video görüntüleyebilir durumda olacağız. Böylelikle videoların bulunduğu klasörü websitenin yayınlandığı klasörün alt klasörlerinden biri olmaktan kurtarmış oluyoruz.Eğer dilerseniz Video.aspx içerisine kendi referer kontrolümüzü yaparak dış bağlantılara farklı videolar gösterebiliriz.
Kaynaklar
http://blogs.ugidotnet.org/kfra/archive/2006/10/04/50003.aspx
http://www.jeroenwijering.com/?item=JW_FLV_Media_Player