คำถามติดแท็ก ms-media-foundation

1
การแปลงสีจาก DXGI_FORMAT_B8G8R8A8_UNORM เป็น NV12 ใน GPU โดยใช้ตัวแปลงพิกเซล DirectX11
ฉันกำลังทำงานกับโค้ดเพื่อจับภาพเดสก์ท็อปโดยใช้การทำสำเนาเดสก์ท็อปและเข้ารหัสเช่นเดียวกับ h264 โดยใช้ Intel hardwareMFT ตัวเข้ารหัสยอมรับเฉพาะรูปแบบ NV12 เป็นอินพุต ฉันมีตัวแปลง DXGI_FORMAT_B8G8R8A8_UNORM เป็น NV12 ( https://github.com/NVIDIA/video-sdk-samples/blob/master/nvEncDXGIOutputDuplicationSample/Preproc.cpp ) ที่ทำงานได้ดีและเป็นไปตาม DirectXcess ปัญหาคือ VideoProcessor บนฮาร์ดแวร์กราฟิก Intel บางรุ่นรองรับการแปลงจาก DXGI_FORMAT_B8G8R8A8_UNORM ถึง YUY2 เท่านั้น แต่ไม่ใช่ NV12 ฉันได้ยืนยันแบบเดียวกันโดยการระบุรูปแบบที่สนับสนุนผ่าน GetVideoProcessorOutputFormats แม้ว่า VideoProcessor Blt จะประสบความสำเร็จโดยไม่มีข้อผิดพลาดใด ๆ และฉันเห็นว่าเฟรมในวิดีโอที่ส่งออกเป็นพิกเซลเล็กน้อยฉันสามารถสังเกตได้ถ้าฉันมองมันอย่างใกล้ชิด ฉันเดาว่า VideoProcessor นั้นล้มเหลวไปที่ฟอร์แมตเอาท์พุตถัดไปที่รองรับ (YUY2) และฉันป้อนเข้าไปยังเครื่องเข้ารหัสโดยไม่รู้ตัวว่าคิดว่าอินพุตอยู่ใน NV12 ตามที่กำหนดค่าไว้ ไม่มีความล้มเหลวหรือความเสียหายที่สำคัญของเฟรมเนื่องจากข้อเท็จจริงที่ว่ามีความแตกต่างเพียงเล็กน้อยเช่นลำดับไบต์และการย่อยระหว่าง NV12 และ YUY2 นอกจากนี้ฉันไม่มีปัญหาเกี่ยวกับพิกเซลบนฮาร์ดแวร์ที่รองรับการแปลง NV12 ดังนั้นผมจึงตัดสินใจที่จะทำแปลงสีโดยใช้เฉดสีพิกเซลซึ่งจะขึ้นอยู่กับรหัสนี้ …

2
ฮาร์ดแวร์กราฟิก Intel H264 MFT การประมวลผลการเรียกใช้ล้มเหลวหลังจากป้อนตัวอย่างอินพุตไม่กี่ตัวซึ่งทำงานได้ดีกับฮาร์ดแวร์ Nvidia MFT
ฉันใช้เดสก์ท็อปโดยใช้ DesktopDuplication API และแปลงตัวอย่างจาก RGBA เป็น NV12 ใน GPU และให้อาหารแบบเดียวกันกับฮาร์ดแวร์ MediaFoundation H264 MFT ใช้งานได้ดีกับกราฟิก Nvidia และตัวเข้ารหัสซอฟต์แวร์ แต่ล้มเหลวเมื่อมีเฉพาะฮาร์ดแวร์กราฟิก Intel MFT เท่านั้น รหัสทำงานได้ดีบนเครื่องกราฟิก Intel เดียวกันหากฉันเลือกใช้ซอฟต์แวร์ MFT ฉันยังมั่นใจได้ว่าการเข้ารหัสจะทำจริงในฮาร์ดแวร์บนเครื่องกราฟิก Nvidia ในกราฟิก Intel, MFT ผลตอบแทน MEError ( ข้อผิดพลาด "ไม่ได้ระบุ" ) ซึ่งเกิดขึ้นเพียงหลังจากที่ตัวอย่างแรกจะถูกป้อนและโทรตามมา ProcessInput (เมื่อกำเนิดเหตุการณ์ทริกเกอร์ METransformNeedInput) ผลตอบแทน"ผู้ถูกเรียกในปัจจุบันคือการไม่ยอมรับการป้อนข้อมูลต่อไป" เป็นเรื่องยากที่ MFT จะใช้ตัวอย่างเพิ่มเติมไม่กี่ตัวอย่างก่อนส่งคืนข้อผิดพลาดเหล่านี้ พฤติกรรมนี้สับสนฉันให้อาหารตัวอย่างเฉพาะเมื่อตัวสร้างเหตุการณ์ทริกเกอร์ METransformNeedInput แบบอะซิงโครนัสผ่าน IMFAsyncCallback และตรวจสอบอย่างถูกต้องว่า METransformHaveOutput ถูกทริกเกอร์ทันทีที่ตัวอย่างถูกป้อน …

3
รับหน้าจอสีเขียวใน ffplay: สตรีมเดสก์ท็อป (พื้นผิว DirectX) เป็นวิดีโอ H264 ผ่านสตรีม RTP โดยใช้ Live555
ฉันกำลังพยายามสตรีมเดสก์ท็อป (พื้นผิว DirectX ในรูปแบบ NV12) เป็นวิดีโอ H264 ผ่านสตรีม RTP โดยใช้ตัวเข้ารหัสฮาร์ดแวร์ของ Live555 & Windows Media Foundation บน Windows10 และคาดว่าจะแสดงผลโดย ffmpeg (ffmpeg 4.2) แต่จะได้รับหน้าจอสีเขียวเหมือนด้านล่าง ฉันเรียกMFWebCamToRTP mediafoundation- ตัวอย่าง & การเข้ารหัสพื้นผิว DirectX โดยใช้ฮาร์ดแวร์ MFTสำหรับการใช้ FrameSource ของ live555 และเปลี่ยนแหล่งอินพุตให้เป็นพื้นผิว DirectX แทน webCam นี่คือข้อความที่ตัดตอนมาจากการใช้งานของฉันสำหรับการโทรกลับ doGetNextFrame ของ Live555 เพื่อป้อนตัวอย่างอินพุตจากพื้นผิว directX: virtual void doGetNextFrame() { if (!_isInitialised) { …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.