Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
sunu saati, sununun saat saatini oluşturan bir nesnedir. Sunu saati tarafından bildirilen saat, sunu zamanı olarak adlandırılır. Sunudaki tüm akışlar sunu zamanıyla eşitlenir. Sunu saati aşağıdaki arabirimleri kullanıma sunar.
| Arayüz | Açıklama |
|---|---|
| IMFPresentationClock | Sunu saatini kullanmak için birincil arabirim. |
| IMFRateControl | Saat hızını denetler. |
| IMFTimer | Zamanlayıcı geri çağırması sağlar. |
| IMFShutdown | Sunu saatini kapatır. |
Medya havuzları, örneklerin işlenme zamanını zamanlamak için sunu zamanını kullanır. Bir medya havuzu yeni bir örnek aldığında, örnekten zaman damgasını alır ve örneği belirtilen zamanda veya mümkün olduğunca yakın bir zamanda işler. Bir topolojideki tüm medya havuzları aynı sunu saatini paylaştığından, birden çok akış (ses ve video gibi) eşitlenir. Medya kaynakları ve dönüşümleri, örneklerin ne zaman teslim edilmeleri zamanlanmadığından sunu saatini kullanmaz. Bunun yerine, işlem hattı yeni bir örnek istediğinde örnekler üretir.
Kayıttan yürütme için Medya Oturumu kullanıyorsanız, Medya Oturumu sunu saatini oluşturma, bir saat kaynağı seçme ve medya havuzlarına bildirme ile ilgili tüm ayrıntıları işler. Uygulamanız, kayıttan yürütme sırasında geçerli sunu saatini almak için sunu saatini kullanabilir, ancak aksi takdirde sunu saatinde herhangi bir yöntem çağırmaz.
Saat Saat ve Saat Durumları
Sunu saatinden en son saat saatini almak için IMFPresentationClock::GetTimeçağrısı yapın. Saat süreleri her zaman 100 nanosaniye cinsindendir, bu nedenle bir saniye 10.000.000 (10^7) değer çizgisidir. Bu, 10 MHz frekansa karşılık gelir.
Sunu saatinin üç durumu vardır: Çalışıyor, duraklatıldı ve durduruldu.
- Saati çalıştırmak için IMFPresentationClock::Startçağrısında bulunur. Başlangıç yöntemi saatin başlangıç saatini belirtir. Saat çalışırken, saat saati başlangıç saatinden geçerli saat hızına göre artar.
- Saati duraklatmak içinIMFPresentationClock::P çağrısında bulunur. Saat duraklatılırken, saat süresi ilerlemez ve GetTimesaatin duraklatıldığı saati döndürür.
- Saati durdurmak için IMFPresentationClock::Stopçağrısında bulunur. Saat durdurulduğunda, saat süresi ilerlemez ve GetTimesıfır döndürür.
Varsayılan olarak, saat 100 nanosaniye başına 1 değer çizgisi anlamına gelen 1,0 oranında ilerler. Saatin ilerleme hızını değiştirmek için, IMFRateControl arabiriminin sunu saatini sorgulayıp IMFRateControl::SetRateçağrısı yapın.
Nesneler, sunu saatinden durum değişiklikleri (hız değişiklikleri dahil) bildirimleri alabilir. Bildirim almak için IMFClockStateSink arabirimini uygulayın ve sunu saatinde IMFPresentationClock::AddClockStateSinkçağırın. Kapatmadan önce, nesnenin kaydını kaldırmak için IMFPresentationClock::RemoveClockStateSink çağırın. Medya havuzları, saat bildirimleri almak için bu mekanizmayı kullanır.
Sunu Saatleri
Ortam havuzu, her örneği doğru zamanda veya mümkün olduğunca doğru saate yakın bir şekilde işlenmek üzere zamanlamayı dener. Aşağıdaki tanımlar geçerlidir:
- Sunu zamanı. Bir örneğin işlenmesi gereken zaman. Süre 100 nanosaniyelik birimler halinde verilir.
- Medya süresi. İçeriğin başlangıcına göre zaman. Örneğin, bir video dosyası 10 saniye uzunluğundaysa, dosyanın yarısındaki noktanın medya süresi 5 saniyedir.
- Zaman damgası. Medya örneğinde işaretlenen süre. Zaman damgasını almak için IMFSample::GetSampleTimearayın. Bir medya kaynağı bir örnek ürettiğinde, zaman damgasını medya zamanına eşit olarak ayarlar. Medya Oturumu, zaman damgasını sunu zamanına çevirir.
Varsayılan olarak, medya zamanı ve sunu zamanı aynıdır. Örneğin, kaynak dosyada bir video çerçevesi 5 saniye görünürse, medya süresi ve sunu süresi 5 saniyedir. Sıralayıcı Kaynağıkullanıyorsanız, segmentler arasında sorunsuz geçişler sağlamak için zamanlama modeli biraz daha karmaşıktır. Sıralayıcı kaynağının zamanlama modeli hakkında daha fazla bilgi için bkz. Sıralı Sunu Zamanları.
Medya kaynağı her zaman zaman damgasını medya zamanına eşit olarak ayarlar. Sunu zamanı medya zamanıyla uyumlu değilse, Medya Oturumu medya örneklerindeki zaman damgalarını dönüştürür. Havuz bir örnek aldığında, örneğin zaman damgası sunu zamanına dönüştürülür. Havuz, örneği sunu saatinin geçerli saatiyle zamanlar. (Hızsız havuzlar, sunu saatini yoksaydıkları için özel durumlardır.)
Uygulama yeni bir konum ararsa, Medya Oturumu belirtilen arama zamanında sunu saatini yeniden başlatır. Örneğin, uygulama dosyadaki 5 saniyelik konumu ararsa, Medya Oturumu saati 5 saniyede başlatır. Arama zamanı bir anahtar çerçevesi sınırına düşmezse, medya kaynağı biraz daha erken bir zaman damgasına sahip örnekler sunabilir. Kod çözücülerin tüm çerçevelerin kodunu çözebilmesi için bu gereklidir. Medya Oturumu, istenen arama süresini eşleştirmek için medya havuzlarına ulaşmadan önce örnekleri bırakır veya keser. Örneğin, arama süresi 5 saniye ise, ilk ses örneği 4,5 saniyede başlayabilir. Medya Oturumu, kodu çözülen ilk ses örneğinden ilk 0,5 saniyeyi kırpacaktır.
Sunu Saati Oluşturma
Sunu saatini oluşturmak için MFCreatePresentationClockçağrısı yapın. Saati kapatmak için IMFShutdown arabirimini sorgulayın ve IMFShutdown::Shutdownçağrısı yapın. MFCreatePresentationClock çağıranı, Shutdownçağrısından sorumludur; çoğu durumda, bu uygulama yerine Medya Oturumudur.
Sunu Zamanı Kaynakları
Adına rağmen, sunu saati aslında bir saat uygulamaz. Bunun yerine, sunu saat kaynağıolarak adlandırılan başka bir nesneden saat saatlerini alır. Zaman kaynağı, doğru saat değerleri oluşturan ve IMFPresentationTimeSource arabirimini kullanıma sunan herhangi bir nesne olabilir. Aşağıdaki çizimde bu işlem gösterilmektedir.
Sunu saati ile sunu saat kaynağı arasındaki ilişkiyi gösteren 
Sunu saati ilk oluşturulduğunda, bir zaman kaynağı yoktur. Zaman kaynağını ayarlamak için, imfPresentationClock::SetTimeSourceçağırarak zaman kaynağının IMFPresentationTimeSource arabirimini işaret edin. Zaman kaynağı, sunu saatiyle aynı durumları destekler (çalışıyor, duraklatıldı ve durduruldu) ve IMFClockStateSink arabirimini uygulaması gerekir. Sunu saati, saat kaynağının durumu ne zaman değiştireceğini bildirmek için bu arabirimi kullanır. Bu şekilde, zaman kaynağı saat işaretlerini sağlar, ancak sunu saati saat içindeki durum değişikliklerini başlatır.
Bazı medya havuzları doğru bir saate erişebilir ve bu nedenle IMFPresentationTimeSource arabirimini kullanıma sunar. Özellikle ses işleyicisi ses kartının frekansını saat olarak kullanabilir. Ses kayıttan yürütmede, videonun ses kayıttan yürütme hızıyla eşitlenmesi için ses işleyicisinin zaman kaynağı olarak davranması yararlıdır. Bu genellikle sesi bir dış saatle eşleştirmeye çalışmaktan daha iyi sonuçlar verir.
Media Foundation ayrıca sistem saatini temel alan bir sunu zamanı kaynağı sağlar. Bu nesneyi oluşturmak için MFCreateSystemTimeSourceçağrısı yapın. Hiçbir medya havuzu bir zaman kaynağı sağlamadığında sistem zaman kaynağı kullanılabilir.
Genel olarak, bir medya havuzu, sunu saatinin kullandığı saat kaynağından bağımsız olarak, ona sağlanan sunu saatini kullanmalıdır. Bu kural, bir medya havuzu IMFPresentationTimeSourceuyguladığında bile geçerlidir. Sunu saati başka bir zaman kaynağı kullanıyorsa, medya havuzu kendi iç saatini değil bu zaman kaynağını izlemelidir.
Medya havuzu sunu saatini izlemediğinde iki durum vardır:
Bazı medya havuzları hızsız. Medya havuzu hızsızsa, örnekleri sunu saatine göre zamanlamadan mümkün olan en kısa sürede tüketir. Genellikle, hızsız havuzlar bir dosyaya veri yazar, bu nedenle işlemi mümkün olan en kısa sürede tamamlamak istenir. Hızsız havuz, IMFMediaSink::GetCharacteristics yönteminde MEDIASINK_RATELESS bayrağını döndürür. Bir topolojideki tüm havuzlar hızsız olduğunda, Medya Oturumu verileri işlem hattı üzerinden mümkün olan en kısa sürede gönderir.
Bazı medya havuzları, oranları kendilerinden farklı bir zaman kaynağıyla eşleştiremez. Bu durumda havuz, GetCharacteristics yönteminde MEDIASINK_CANNOT_MATCH_CLOCK bayrağını döndürür. İşlem hattı başka bir zaman kaynağı kullanmaya devam edebilir, ancak sonuçlar en iyi durumdan daha az olacaktır. Lavabo büyük olasılıkla geri kalır ve kayıttan yürütme sırasında hatalara neden olur.
İlgili konular