Bagikan melalui


Mengirimkan dari File Tipe-2

[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.]

Untuk mengirimkan file tipe-2 saat mempratinjau, gunakan grafik filter yang diperlihatkan dalam diagram berikut.

transmisi tipe-2 dengan pratinjau

File tipe-2 memiliki dua aliran, satu aliran audio dan satu aliran video yang dikodekan DV. Grafik ini menggunakan filter DV Muxer untuk menggabungkan aliran audio dan video. Ini mengirimkan aliran yang diselingi ke filter MSDV, tetapi membagi aliran lagi untuk pratinjau.

Bangun grafik ini sebagai berikut:

// Add the DV Mux filter to the graph.
IBaseFilter *pDVMux;
hr = CoCreateInstance(CLSID_DVMux, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pDVMux));
hr = pGraph->AddFilter(pDVMux, L"DV Mux");

// Add the File Source filter to the graph.
IBaseFilter *pFileSource;
hr = pGraph->AddSourceFilter(L"C:\\Example2.avi", L"Source", 
    &pFileSource);

hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);
hr = pBuilder->RenderStream(0, 0, pFileSource, 0, pDVMux);

// Add the Infinite Pin Tee filter to the graph.
IBaseFilter *pTee;
hr = CoCreateInstance(CLSID_InfTee, 0, CLSCTX_INPROC_SERVER
    IID_IBaseFilter, reinterpret_cast<void**>)(&pTee));
hr = pGraph->AddFilter(pTee, L"Tee");

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pTee);
hr = pBuilder->RenderStream(0, 0, pTee, 0, pDV);
hr = pBuilder->RenderStream(0, &MEDIATYPE_Interleaved, pTee, 0, 0);

Kode ini melakukan beberapa panggilan ke RenderStream:

Dua yang pertama menghubungkan filter sumber ke Pemisah AVI dan Pemisah AVI ke DV Mux. Dalam panggilan pertama, Capture Graph Builder secara otomatis menambahkan AVI Splitter ke grafik dan menghubungkan salah satu pin output AVI Splitter ke DV Mux. Dalam panggilan kedua, Capture Graph Builder menemukan pin output kedua AVI Splitter dan menghubungkannya ke DV Mux.

Panggilan ketiga ke RenderStream menyambungkan DV Muxer ke filter Infinite Pin Tee. Panggilan berikutnya menghubungkan satu aliran dari Infinite Pin Tee ke filter pengambilan MSDV. Aliran ini ditransmisikan ke perangkat. Panggilan terakhir ke RenderStream membangun bagian pratinjau grafik.

Jika Anda tidak ingin mempratinjau saat mengirimkan, Anda dapat menghilangkan Infinite Pin Tee, dan cukup sambungkan DV Mux ke filter MSDV:

hr = pBuilder->RenderStream(0, 0, pDVMux, 0, pDV);

Video Digital di DirectShow