ปัญหาเกี่ยวกับช่องเสียงที่ไม่ได้ใช้ในการจับภาพ QuickTime

ฉันเขียนแอปพลิเคชันที่บันทึกเสียงและวิดีโอจากอุปกรณ์หลายเครื่องพร้อมกัน โดยใช้ QTKit capture API เมื่อไม่นานนี้

อย่างไรก็ตาม ฉันได้เรียนรู้ว่าในบางครั้ง สื่อที่บันทึกจากกล้องวิดีโอ DV ปรากฏ ไม่มีเสียงใดๆ ที่เกี่ยวข้อง ในความเป็นจริง แทร็กเสียงมีอยู่ในไฟล์อย่างดี แต่ช่องต่างๆ ถูกตั้งค่าเป็น "ไม่ได้ใช้" ใน QuickTime Player Pro ดังนั้นจึงเงียบลง

เนื่องจากฉันไม่สบายใจที่จะให้ผู้ใช้สัมผัสกับสิ่งหลอกลวงเหล่านี้ ฉันจึงต้องการโพสต์การบันทึกและแก้ไขเลย์เอาต์ของช่องโดยอัตโนมัติหากจำเป็น

น่าเสียดายที่ฉันมีช่วงเวลาที่ยากลำบากในการหาวิธี!

คำถามของฉันคือสองเท่า:

  1. เป็นไปได้ไหมที่จะตรวจพบว่าช่องเสียงของแทร็กถูกทำเครื่องหมายว่า "ไม่ได้ใช้" จาก QTKit หรือไม่
  2. เนื่องจากฉันคิดว่าคำตอบข้างต้นคือ "ไม่" ฉันจึงได้ค้นหาโครงสร้างของไฟล์ภาพยนตร์บางไฟล์ที่ทำงานอย่างถูกต้องด้วย "Atom Inspector" — จนถึงตอนนี้ก็ยังไม่ประสบความสำเร็จ:
    อะไร/อยู่ที่ไหน QuickTime Atom ที่จัดเก็บข้อมูลนี้ไว้
    ฉันสามารถดูจำนวนช่องสัญญาณที่ถูกต้องใน stsd Atom (มีอยู่ใน stbl Atom) แต่ฉันไม่เห็นว่ามีการแมปเกิดขึ้นที่ใด

person danyowdee    schedule 21.03.2011    source แหล่งที่มา


คำตอบ (1)


คำถามแรก: ดูไม่เหมือนเลย

คุณจะต้องใช้ QTGetTrackPropertyInfo API กับ kQTPropertyClass_Audio, kQTAudioPropertyID_ChannelLayout เพื่อรับเค้าโครงช่อง หากโครงสร้าง AudioChannelLayout ที่ส่งคืนมีแท็ก != 0 คุณสามารถแก้ไขได้ผ่าน AudioFormatGetPropertyInfo ด้วย kAudioFormatProperty_ChannelLayoutForTag; มิฉะนั้น ฟิลด์ AudioChannelDescription จะใช้ได้ โดยตั้งค่า mChannelLabel เป็น kAudioChannelLabel_Unused (0) แน่นอนว่าทั้งหมดนี้ใช้ได้เฉพาะใน 32 บิตเท่านั้น อย่าลืม #include <AudioToolbox/AudioToolbox.h>

คำถามที่สอง:
อะตอม stsd ของแทร็กเสียงควรมีนามสกุล 'chan' ส่วนขยายนี้ดูเหมือนจะเป็น UInt32 ที่ตั้งค่าเป็นศูนย์ ตามด้วยโครงสร้าง AudioChannelLayout ดูเหมือนจะไม่ได้รับการบันทึกไว้ในข้อกำหนดไฟล์ QT หรือข้อกำหนด MP4

ขอให้โชคดี!

person jfortmann    schedule 22.03.2011