Bagikan melalui


Metode ICaptureGraphBuilder2::RenderStream (strmif.h)

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine , dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Metode ini RenderStream menghubungkan pin output pada filter sumber ke filter sink, secara opsional melalui filter perantara.

Sintaks

HRESULT RenderStream(
  [in] const GUID  *pCategory,
  [in] const GUID  *pType,
  [in] IUnknown    *pSource,
  [in] IBaseFilter *pfCompressor,
  [in] IBaseFilter *pfRenderer
);

Parameter

[in] pCategory

Penunjuk ke GUID yang menentukan salah satu kategori pin yang tercantum dalam Sematkan Kumpulan Properti. Untuk mencocokkan pin apa pun, terlepas dari kategorinya, atur parameter ini ke NULL. Nilai umum termasuk yang berikut ini.

  • PIN_CATEGORY_CAPTURE
  • PIN_CATEGORY_PREVIEW
  • PIN_CATEGORY_CC

[in] pType

Penunjuk ke GUID jenis utama yang menentukan jenis media pin output; atau NULL untuk menggunakan pin apa pun, terlepas dari jenis media. Untuk daftar nilai yang mungkin, lihat Jenis Utama.

[in] pSource

Menentukan penunjuk ke filter awal untuk koneksi, atau ke pin output.

[in] pfCompressor

Penunjuk ke antarmuka IBaseFilter dari filter perantara, seperti filter pemadatan. Bisa NULL.

[in] pfRenderer

Penunjuk ke antarmuka IBaseFilter dari filter sink, seperti penyaji atau filter mux. Jika nilainya ADALAH NULL, metode menggunakan perender default (lihat Keterangan).

Mengembalikan nilai

Mengembalikan nilai HRESULT . Nilai yang mungkin dikembalikan termasuk yang berikut ini.

Menampilkan kode Deskripsi
S_OK
Berhasil.
VFW_S_NOPREVIEWPIN
Pratinjau dirender melalui Filter Smart Tee.
E_FAIL
Kegagalan.
E_INVALIDARG
Argumen tidak valid.
E_POINTER
Argumen pointer NULL.
VFW_E_NOT_IN_GRAPH
Filter tidak ada dalam grafik filter. Kesalahan ini dapat terjadi jika Anda tidak memanggil AddFilter untuk menambahkan pSource, pIntermediate, atau pSink ke grafik. Ini juga dapat terjadi jika Anda tidak memanggil SetFiltergraph untuk menyambungkan grafik Anda ke Capture Graph Builder; dalam hal ini, objek Capture Graph Builder secara otomatis membuat grafik filternya sendiri. Lihat Tentang Capture Graph Builder.

Keterangan

Metode ini merender aliran dengan menghubungkan dua filter atau lebih bersama-sama dalam rantai:

  • Parameter pSource menentukan awal rantai, baik filter atau pin output.
  • Parameter pIntermediate menentukan filter perantara, biasanya filter kompresi. Parameter ini bisa NULL.
  • Parameter pSink menentukan filter di akhir rantai. Biasanya, filter ini adalah perender untuk pratinjau, atau mux untuk pengambilan file.
Metode ini menghubungkan pSource ke pIntermediate, lalu menyambungkan pIntermediate ke pSink. Jika pIntermediateADALAH NULL, metode ini hanya menghubungkan pSource ke pSink. Semua filter yang ditentukan oleh pSource, pIntermediate, dan pSink harus ditambahkan ke grafik sebelum memanggil metode . Metode ini menggunakan Intelligent Connect, sehingga filter tambahan seperti dekode mungkin ditambahkan ke grafik.

Jika parameter pSinkADALAH NULL, metode mencoba menggunakan perender default. Untuk video, ia menggunakan Video Renderer, dan untuk audio, ia menggunakan DirectSound Renderer.

Jika pSource adalah filter, metode mencari pin output pada filter tersebut. Dalam hal ini, gunakan parameter pCategory dan pType untuk mempersempit pencarian. Misalnya, jika filter memiliki pin terpisah untuk pratinjau dan pengambilan, Anda dapat menentukan PIN_CATEGORY_CAPTURE atau PIN_CATEGORY_PREVIEW. Jika pSource adalah pin output, atur pCategory dan pType ke NULL.

Dalam semua kasus, metode mencari pin yang tidak terhubung. Jika lebih dari satu pin memenuhi kriteria yang ditentukan, metode ini menggunakan pin pertama yang ditemukannya.

Perhatikan bahwa untuk pengambilan DV, jika jenis media MEDIATYPE_Interleaved dan parameter pSink adalah NULL, metode membagi aliran yang diselingi menjadi aliran audio dan aliran video, dan merender kedua aliran tersebut.

Metode ini RenderStream menangani banyak detail yang diperlukan untuk menangkap grafik:

Smart Tee. Beberapa filter pengambilan memiliki pin tangkapan tetapi tidak ada pin pratinjau. Untuk mempratinjau, pin pengambilan harus tersambung ke Smart Tee Filter. Filter ini membagi data menjadi dua aliran, aliran pengambilan, dan aliran pratinjau. Saat Anda menentukan PIN_CATEGORY_PREVIEW atau PIN_CATEGORY_CAPTURE, metode menyisipkan filter Smart Tee jika diperlukan. Kemudian merender aliran yang ditentukan pada filter Smart Tee. Jika Anda merender aliran pratinjau dan metode menggunakan filter Smart Tee, itu mengembalikan VFW_S_NOPREVIEWPIN.

Teks Tertutup. Anda dapat menggunakan metode ini untuk mengambil atau mempratinjau keterangan tertutup. Beberapa filter tangkapan mengirimkan data Vertical Blanking Interval (VBI), yang lain mengirimkan data teks tertutup. Untuk menangani salah satu kasus, panggil metode dua kali, sekali menggunakan PIN_CATEGORY_VBI dan sekali menggunakan PIN_CATEGORY_CC. Metode ini menyisipkan filter apa pun yang diperlukan untuk mengonversi data VBI menjadi teks tertutup. Untuk mempratinjau data, atur parameter pSink ke NULL. Untuk mengambil data ke file, gunakan penunjuk antarmuka IBaseFilter filter multiplexer. Anda dapat mengambil dan mempratinjau data dalam grafik yang sama. Panggil metode sekali menggunakan NULL dan sekali lagi menggunakan multiplexer. Atur parameter pIntermediate ke NULL.

Pin Port Video. Filter yang berfungsi dengan perangkat keras penangkapan video ekstensi port video (VPE) mungkin memiliki pin port video (PIN_CATEGORY_VIDEOPORT) alih-alih pin pratinjau. Agar pratinjau atau pengambilan berfungsi, pin port video harus tersambung ke Filter Mixer Overlay. Metode menangani detail ini. Anda tidak perlu menentukan PIN_CATEGORY_VIDEOPORT. Tentukan PIN_CATEGORY_PREVIEW atau PIN_CATEGORY_CAPTURE, dan metode akan menghubungkan pin dengan benar. Dengan cara yang sama, beberapa filter mengirimkan data VBI menggunakan pin port video (PIN_CATEGORY_VIDEOPORT_VBI). Seperti halnya PIN_CATEGORY_VIDEOPORT, metode menangani detail ini. Anda tidak perlu menentukan PIN_CATEGORY_VIDEOPORT_VBI.

Filter Pendukung. Jika perangkat pengambilan menggunakan driver Windows Driver Model (WDM), grafik mungkin memerlukan filter tertentu di hulu dari Filter Pengambilan Video WDM, seperti Filter Tuner TV atau Filter Crossbar Video Analog. Jika metode ini berhasil merender aliran, metode ini juga menyisipkan filter WDM apa pun yang diperlukan dalam grafik Anda. Metode ini meminta pin input pada filter tangkapan untuk menentukan media apa yang mereka dukung, dan menghubungkannya ke filter yang cocok.

Contoh Kode

Untuk grafik pengambilan umum, sambungkan pin pratinjau ke perender default, tanpa filter perantara:
C++
// Video: 
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, 
    pCaptureFilter, NULL, NULL); 
// Audio:
pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Audio, 
    pCaptureFilter, NULL, NULL); 
Sambungkan pin pengambilan ke filter mux atau filter penulis file, tergantung pada jenis file apa yang ingin Anda keluarkan. Untuk file AVI, gunakan filter AVI Mux . Untuk file ASF, gunakan filter Penulis WM ASF . Biasanya, Anda akan mendapatkan penunjuk ke filter ini dari parameter ppf metode ICaptureGraphBuilder2::SetOutputFileName .
C++
pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"C:\\Example.avi", 
    &ppf, &pSink);
pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
    pCaptureFilter, NULL, ppf);

Sumber File

Anda dapat menggunakan metode ini untuk mentranskode atau mengkompresi ulang file. Diskusi berikut mengasumsikan bahwa file memiliki paling banyak satu aliran video dan satu aliran audio, atau satu aliran yang saling terkait. Jika tidak, metode tidak akan berfungsi dengan benar.

Sumber file memiliki satu pin output, jadi atur pCategory dan pType ke NULL. Panggil metode dua kali—sekali untuk merender streaming video, dan sekali untuk merender aliran audio. Panggilan pertama menghubungkan filter sumber ke filter pengurai dan merender salah satu pin output filter pengurai. Panggilan kedua merender pin output parser yang tersisa. Jika Anda mengompresi satu aliran tetapi bukan yang lain, pastikan untuk menentukan filter kompresor dalam panggilan pertama. Metode ini akan secara otomatis memilih aliran yang benar berdasarkan jenis kompresi.

C++
pBuilder->RenderStream(NULL, NULL, pSrc, pCompressor, pMux);
pBuilder->RenderStream(NULL, NULL, pSrc, NULL, pMux);
Untuk contoh lengkapnya, lihat Mengkompresi Ulang File AVI.

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header strmif.h (termasuk Dshow.h)
Pustaka Strmiids.lib

Lihat juga

Membangun Grafik dengan Capture Graph Builder

Kode Kesalahan dan Keberhasilan

Antarmuka ICaptureGraphBuilder2

Pengambilan Video