• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Silverlight ve Smooth Streaming

Silverlight ve Smooth Streaming

10.03.2010

Yazar: Daron Yöndem (Google+)

Kategori: Silverlight

6578

Silverlight ilk çıktığı günden itibaren video konusunda ayrı bir iddaya sahip oldu. 1.0 sürümünden başlayarak Silverlight'ın CPU ve RAM kullanımındaki başarısı ister HD ister FullHD videoların oynatılmasında olsun süper bir performans ile bizleri şaşırtmayı başardı. Bazen keşke bu başarıyı Media Player'da da görsek diyerek kendi kendime serzenişlerde bulunmuyor değilim.

Konumuza dönersek, Silverlight ile beraber gelen bir diğer ilginç video çözümlerinden biri de Smooth Streaming adını taşıyor.  Peki nedir bu Smooth Streaming? Elinizde var sayalım ki normal bir video dosyası var ve bunu internetten paylaşmak istiyorsunuz. Fakat videonuzu paylaştığınız kullanıcıların bir kısmı belki de 1Mbit bağlantıya sahipken diğerleri çok daha yüksek hızlı bağlantılara sahipler. Videomuzun kalitesini ayarlarken hangi kitleyi hedefleyeceğiz? Acaba bağlantısı sağlam arkadaşlara göre mi encode etsek? Bu durumda 1Mbit ile internete bağlananlar videoları neredeyse izleyemeyecektir. Peki gibi de 1Mbit'e göre ayarlasak? Bu sefer de bağlantısı sağlam olan kişilere gerekli kalitede görüntüyü aktaramamış olacağız.

İşte bu iki ucu kokulu değnekten sağ salim kurtulmanın yolu Smooth Streaming. Gelin bir hayal kuralım ve diyelim ki kullanıcıların standart bağlantı hızlarını da es geçip o anki bağlantı hızlarına göre video kalitesini ayarlayabiliyoruz. Hatta ilk başka kullanıcılar videoyu ilk izlemeye başlarken kalitesiz video ile buffer'ı tamamlayıp hemen videoyu oynatsak sonrasında kullanıcının hattı sağlam ise kaliteliye doğru geçip yapsak. En önemlisi tüm bunlar gerçekleşirken kullanıcı hiçbirşeyin farkında olmasa ve videosunu izlemeye rahat bir şekilde devam etse? Güzel bir hayal değil mi? Ama hayal değil, bunların hepsi Smooth Streaming ile bir gerçek.

Nasıl çalışıyor?

Normalde video dosyalarını bir web sunucusu veya Windows Media Services gibi özel altyapılar ile yayınlarız ve bu altyapılar tek bir video dosyasını alarak yayınlamaya uygun şekilde düzenlenmiştir. Oysa elimizde aynı videonun farklı bitrate'ler ile encode edilmiş hali olsa kullanıcılara seçme şansı tanıyabiliriz. Fakat iki soru var; birincisi bant genişliği konusunda kullanıcı seçim yapmamalı. Söz konusu bant genişliği seçimi otomatik olmalı. Bunun için Silverlight tarafında biraz kod yazmak yeterli olacaktır. İkinci sorun ise bant genişliği ile ilgili seçimi sadece video başlarken değil video oynatılırken de kullanıcı farkında olmadan yapabilmek isteriz. Bant genişliği değiştikçe oynatıcı anında daha kaliteli veya kalitesize hızlı bir şekilde geçmeli. İşte bu noktada farklı bir taktik uygulama zorunda olacağımız kesin.

Smooth Streaming ile beraber video dosyaları birden çok bitrate'lerde encode edilerek paketlenip sunucuya yerleştiriliyor. Bu süreçte ayrıca bahsedeceğiz. Sonrasında bu paket IIS üzerine yüklenen IIS Media Services içerisinde Smooth Streaming sistemi tarafından tanınıyor ve kullanıcıdan gelen isteği göre uygun video gönderiliyor. IIS Media Services sadece bu kadarı ile kalmıyor ve video verilerimiz artık 2 ile 4 saniye arasındaki HTTP paketleri ile gönderiliyor. Böylece duruma göre gönderilecek olan 2. veya 4. paket farklı bitrate ile encode edilmiş farklı dosyalardan olabiliyor.

Smooth Streaming mantığı.
Smooth Streaming mantığı.

Yukarıdaki görselde de inceleyebileceğiniz üzere videonun sunucudan istemciye yolculuğunda eski taktik alt kısımda gösterilmiş durumda. Üst kısımdaki ise video 2sn'lik HTTP paketleri şeklinde gönderiliyor. Bu paketli sistemin ilk avantajı arada kalitenin değiştirilebilmesi iken ikinci bir avantaj ise bu paketlerin http paketlerini önbellekleyen bir başka sunucu tarafından önbelleğe alınabilmesi. Böylece son kullanıcıya aynı paketlerin aktarılması için bir noktaya kadar hız avantajı sağlanabiliyor.

Peki Nasıl Yaparız?

İlk olarak tabi ki sunucunuzda IIS Media Services kurulu olmalı. Doğrudan IIS7 üzerine yüklenen bu eklenti ile beraber artık sunucunuza Smooth Streaming desteği gelecektir. Apache tarafında da buradaki downloadları deneyebilirsiniz. Bir sonraki adımda gerekli olan şey elimizde Smooth Streaming'e uygun şekilde paketlenmiş birden çok bitrate'te kaydedilmiş video dosyaları. Bu şekilde bir paket hazırlamanın en kolay yolu Expression Encoder 3'ten geçiyor. Expression Endoer 3 varsayılan ayarları ile Smooth Streaming tanıyor.

Expression Encoder 3 içerisinde Smooth Streaming ayarları.
Expression Encoder 3 içerisinde Smooth Streaming ayarları.

Expression Encoder içerisine bir video ekledikten sonra video profillerinden Smooth Streaming altındaki profillerden birini seçebilirsiniz. Söz konusu seçimi yaptıktan sonra encode etmek istediğiniz ve kullanıcılarınıza ayrı ayrı sunmak istediğiniz her bandwidth'i listeye eklemeniz gerekiyor. Ayarları tamamladıktan sonra video dosyasını encode edebilirsiniz. Sonuçta elinize ism uzantısı ile başlayan dosyalar gelecektir. Yapmış olduğunuz ayarlara göre her encode edilen video dosyası ayrı bir ISMV dosyasında tutulabileceği gibi hepsi bir dosyada da tutulabilir. Bunu Expression Encoder içerisinde "Create separate file per stream" seçeneği ile ayarlayabilirsiniz.

[ISM Dosyası]

<?xml version="1.0" encoding="utf-16"?>

<!--Created with Expression Encoder version 3.0.1332.0-->

<smil xmlns="http://www.w3.org/2001/SMIL20/Language">

  <head>

    <meta

      name="clientManifestRelativePath"

      content="Live stream archive 17.08.2009 15.07.ismc" />

  </head>

  <body>

    <switch>

      <video

        src="Live stream archive 17.08.2009 15.07_305.ismv"

        systemBitrate="305000">

        <param

          name="trackID"

          value="2"

          valuetype="data" />

      </video>

      <video

        src="Live stream archive 17.08.2009 15.07_230.ismv"

        systemBitrate="230000">

        <param

          name="trackID"

          value="2"

          valuetype="data" />

      </video>

      <audio

        src="Live stream archive 17.08.2009 15.07_1644.ismv"

        systemBitrate="64000">

        <param

          name="trackID"

          value="1"

          valuetype="data" />

      </audio>

    </switch>

  </body>

</smil>

Yukarıdaki XML yapısı ISM dosyasının içinde saklı. Yapı ile beraber bu pakette bulunan videoların bitrate'leri ve dosyaların adları bulunuyor. Böylece IIS Media Services rahatlıkla bu dosya üzerinden bilgileri alabilecek. Ayrıca istemci tarafında kullanılacak bilgileri içeren ayrı bir manifest dosyası da ISMC uzantısı ile kayıtlıdır.

[ISMC Dosyası]

<?xml version="1.0" encoding="utf-16"?>

<!--Created with Expression Encoder version 3.0.1332.0-->

<SmoothStreamingMedia

  MajorVersion="2"

  MinorVersion="0"

  Duration="59730000">

  <StreamIndex

    Type="video"

    Chunks="1"

    QualityLevels="8"

    MaxWidth="640"

    MaxHeight="480"

    DisplayWidth="640"

    DisplayHeight="480"

    Url="QualityLevels({bitrate})/Fragments(video={start time})">

    <QualityLevel

      Index="0"

      Bitrate="1644000"

      FourCC="WVC1"

      MaxWidth="640"

      MaxHeight="480"

      CodecPrivateData="250000010FE3F213F0EF8A13F83BF1C0EFC80000010E5A0040" />

    <QualityLevel

      Index="1"

      Bitrate="1241000"

      FourCC="WVC1"

      MaxWidth="640"

      MaxHeight="480"

      CodecPrivateData="250000010FE3E613F0EF8A13F83BF1C0EFC80000010E5A0040" />

    <QualityLevel

      Index="2"

      Bitrate="937000"

      FourCC="WVC1"

      MaxWidth="640"

      MaxHeight="480"

      CodecPrivateData="250000010FE3DC13F0EF8A13F83BF1C0EFC80000010E5A0040" />

    <QualityLevel

      Index="3"

      Bitrate="708000"

      FourCC="WVC1"

      MaxWidth="428"

      MaxHeight="320"

      CodecPrivateData="250000010FE3D613F0EF8A13F83BF1C0EFC80000010E5A0040" />

    <QualityLevel

      Index="4"

      Bitrate="534000"

      FourCC="WVC1"

      MaxWidth="428"

      MaxHeight="320"

      CodecPrivateData="250000010FE3D013F0EF8A13F83BF1C0EFC80000010E5A0040" />

    <QualityLevel

      Index="5"

      Bitrate="403000"

      FourCC="WVC1"

      MaxWidth="428"

      MaxHeight="320"

      CodecPrivateData="250000010FE3CC13F0EF8A13F83BF1C0EFC80000010E5A0040" />

    <QualityLevel

      Index="6"

      Bitrate="305000"

      FourCC="WVC1"

      MaxWidth="364"

      MaxHeight="272"

      CodecPrivateData="250000010FE3C813F0EF8A13F83BF1C0EFC80000010E5A0040" />

    <QualityLevel

      Index="7"

      Bitrate="230000"

      FourCC="WVC1"

      MaxWidth="364"

      MaxHeight="272"

      CodecPrivateData="250000010FE3C613F0EF8A13F83BF1C0EFC80000010E5A0040" />

    <c

      n="0"

      d="58320001">

      <f

        i="0"

        s="438"

        q="7405" />

      <f

        i="1"

        s="327"

        q="5536" />

      <f

        i="2"

        s="237"

        q="4016" />

      <f

        i="3"

        s="195"

        q="3299" />

      <f

        i="4"

        s="137"

        q="2321" />

      <f

        i="5"

        s="101"

        q="1706" />

      <f

        i="6"

        s="75"

        q="1267" />

      <f

        i="7"

        s="63"

        q="1063" />

    </c>

  </StreamIndex>

  <StreamIndex

    Type="audio"

    Index="0"

    FourCC="WMAP"

    Chunks="3"

    QualityLevels="1"

    Url="QualityLevels({bitrate})/Fragments(audio={start time})">

    <QualityLevel

      Bitrate="64000"

      SamplingRate="44100"

      Channels="2"

      BitsPerSample="16"

      PacketSize="2973"

      AudioTag="354"

      CodecPrivateData="1000030000000000000000000000E00042C0" />

    <c

      n="0"

      d="39009523" />

    <c

      n="1"

      d="19504762" />

    <c

      n="2"

      d="1680045" />

  </StreamIndex>

</SmoothStreamingMedia>

Yukarıda gördüğünüz dosyaların yanında sadece farklı bitrate'ler ile encode edilmiş videolar bulunuyor. Olay aslında bu kadar basit. İstemci tarafına baktığımızda ise esas mesele bu yapıyı Silverlight nasıl oynatacak veya kendi bant genişliğini algılayarak nasıl seçim yapacak sorusu geliyor. İşte bu sorularla iglili cevapları içeren kodu sıfırdan yazmamız gerekmiyor. Expression Encoder ile beraber gelen tüm Silverlight şablonları hali hazırda Smooth Streaming desteğine sahip. Unutmayın ki bu şablonların hepsinin kaynak kodları da yine Expression Encoder'ın yüklü olduğu klasörde mevcut. Böylece oluşturulan yapıyı kopyalayarak kendi projelerinizde de rahatlıkla ilerleyebilirsiniz.

Sonuç olarak...

Hemen Smooth Streaming'i denemek isterseniz aşağıdaki adresten örnek bir videoyu izleyebilirsiniz. Hatta söz konusu sitede göreceğiniz Silverlight uygulamalasında kendi bant genişliğinizi üst kısımdan limitleyebilir ve alt solda da hangi kalitede videonun istemciye indirildiğini test edebilirsiniz.

Hepiniz kolay gelsin...

Yazar Hakkında

Daron Yöndem

Daron Yöndem

daron.yondem.com

DEVELOAD Yazılım şirketi kurucusu Daron Yöndem ASP.NET alanında aldığı MVP ünvanını son üç yıldır Silverlight alanında devam ettirmektedir. Microsoft Regional Director ünvanına da sahip olan Daron Yöndem’e 2009, 2010 ve 2011 yıllarında Microsoft tarafından “Gold Global Impact Award” ödülü verilmiştir. Microsoft TechEd, PDC, DevReach, Microsoft DevDays gibi uluslararası konferanslarda konuşmacı olan Daron Yöndem INETA (International .NET Association) Orta-Doğu Afrika Bölge Başkanlığı görevini sürdürürerek 262.000’i aşkın üyesi olan 58 sosyal topluluğa destek vermektedir. Üç Türkçe, üç İngilizce kitabı olan Daron Yöndem’in Wrox Publishing gibi uluslararası yayınevlerinden kitapları bulunmaktadır.

Sosyal Medya

ORANLAR

  • 6578izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 131483
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 78818
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 52211
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ