Öncelikle piyasada bir çok oynatici var ancak ücretsiz olanlardan çok azi is görecek kalitede. Göreceli olarak en çok ragbet gördügünü jw player''i kullanacagim.
Öncelikle su adresten http://www.jeroenwijering.com/upload/mediaplayer.zip en son versiyonu indirin. Baslangiçta söylemekte fayda var ki JW Player''in kullanim sözlesmesi kazanç elde edilen sitelerde lisans satin almadan kullanmayi ihlal sayiyor. Su an ki fiyati tek site için 30€ civari, zaten gelir elde ettiginiz bir siteyse hiç de yüksek bir rakam degil aslinda.Yapilmasi gerekenleri maddeler halinde yazacak olursak.
- Paketin içindeki swfobject.js, yt.swf,preview.jpg,video.flv, player.swf dosyalarini websitenizin giris dizinine kopyalayin
- Video gösterimini yapacagini sayfanin ilgili yerine asagidaki kod parçasini yerlestirin
\t<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österecegimiz tamamen
s1.addParam("flashvars","file=video.flv&image=preview.jpg");
satirindaki parametrelerle belirleniyor. buradaki video.flv görüntüleyecegimiz vide,preview.jpg ise video kullanici tarafindan oynatilmadan önce görüntülenecek görsel.
Ancak burada dikkat edebileceginiz gibi dosyalarin yollari daima disaridan erisilebilir durumda olmasini gerektir.Bu durumda sizin sitenizde host ettiginiz bir dosya baskalarinin kullanimina açik durumda olacaktir. Bu can sikici durumu tampon bir sayfa ile ortadan kaldirabiliriz.Örnegin Video.aspx adinda bir asp.net sayfasi olusturabilir ve içerisine asagidaki kodu koyabiliriz.
Ancak bunu yapmadan önce IIS''in flv dosyalarini stream edebilmesi için bir kaç ufak degisiklige ihtiyaci var.
Öncelikle IIS yönetim konsolunda websitesinin Home Directory -> Configuration bölümüne tiklayin.Karsiniza gelecek olan ekran su olacaktir.
Bu ekranda Add butonuna tiklayin ve Gelen ekrani asagidaki gibi doldurun
Buradaki aspnet_isapi.dll i bulabilmek için start menüden run''i seçip %WinDIR%Microsoft.NETFrameworkv2.0.50727 yazip enter''a basarsaniz dosyanin bulundugu klasörü tespit edebilirsiniz.
Sonrasinda web.config dosyaniza
verb="*" path="*.flv" type="FLVStreaming" />
satirlarini ekleyin.Ve simdi de asagidaki kodu App_Code klasöründe FlvStreaming.cs adinda bir dosya olusturarak içine yapistirin.
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;
}
}
Artik IIS''imiz flv dosyalarini stream etmeye hazir.Simdi de kendi flv dosyalarimizi video player''a tamponlayacak Video.aspx dosyasini olusturalim
public partial class Video : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["fn"] != null)
{
\t string dir = "C:Inetpubwwwroot"; //Buraya videolarin bulundugu 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);
}
}
}
Simdi oynatilacak video dosyasini belirledigimiz parametreyi düzenleyelim
\ts1.addParam("flashvars","file=video.aspx?fn=video.flv&image=preview.jpg");
Eger bir hata yoksa düzgün bir sekilde video görüntüleyebilir durumda olacagiz. Böylelikle videolarin bulundugu klasörü websitenin yayinlandigi klasörün alt klasörlerinden biri olmaktan kurtarmis oluyoruz.Eger dilerseniz Video.aspx içerisine kendi referer kontrolümüzü yaparak dis baglantilara farkli videolar gösterebiliriz.
Kaynaklar
http://blogs.ugidotnet.org/kfra/archive/2006/10/04/50003.aspx
http://www.jeroenwijering.com/?item=JW_FLV_Media_Player