ฉันกำลังพยายามซิงโครไนซ์การเล่น VLC สองอินสแตนซ์ ในการดำเนินการนี้ ฉันกำลังใช้แพ็กเก็ต UDP จากผู้เล่นรอง ฉันส่งแพ็กเก็ตไปยังผู้เล่นหลักที่มีตำแหน่งปัจจุบัน และคำตอบหลักพร้อมตำแหน่งปัจจุบัน จากนั้นฉันใช้ข้อมูลนี้เพื่อประเมินเวลาแฝง สิ่งนี้ใช้ได้ดีจนถึงที่นี่ และรันไทม์ทั้งหมดของการสนทนา UDP นั้นเล็กน้อย (ทำงานบนโฮสต์เดียวกันคือ ~ 0.00017s บนการเชื่อมต่อ LAN แบบมีสายมากกว่าเล็กน้อย)
ปัญหาเริ่มต้นขึ้นเมื่อฉันพยายามทำให้สตรีมรองเข้าแถว หากความแตกต่างใหญ่ ฉันก็แค่กำหนดตำแหน่ง สิ่งนี้จบลงด้วยความไม่แม่นยำมากนัก เนื่องจากผู้เล่นต้องใช้เวลาพอสมควรเพื่อค้นหาตำแหน่งใหม่
ดังนั้น หากความแตกต่างค่อนข้างน้อย ฉันก็ลองตั้งค่าอัตราการเล่นให้เร็วขึ้นหรือช้าลงเล็กน้อยจนกว่าจะอยู่ในเฟรมเดียวกัน (เช่น เฟรมควรเท่ากับเฟรม is) ปัญหาคือผู้เล่นยังค้างอยู่นิดหน่อย
media_player.set_rate()
ฉันได้ลองใช้ค่าที่ใหญ่กว่า (1.2 / 0.9) และค่าที่น้อยกว่า (1.01 / 0.99) ผลลัพธ์ก็ใกล้เคียงกัน
ฉันยังได้รับสิ่งนี้ค่อนข้างมาก:
[00007f6b8d9d7ab0] main decoder error: Timestamp conversion failed (delay 1000000, buffering 100000, bound 9000000)
[00007f6b8d9d7ab0] main decoder error: Could not convert timestamp 148752813836 for FFmpeg
และนี่:
[00007f548002e180] main decoder error: Timestamp conversion failed for 41083001: no reference clock
[00007f548002e180] main decoder error: Could not convert timestamp 0 for FFmpeg
อย่างหลังโดยเฉพาะอย่างยิ่งถ้าฉันคลั่งไคล้ความถี่ในการอัปเดตเล็กน้อย
ฉันสงสัยว่ามีวิธีอื่น / ที่ดีกว่าในการบรรลุเป้าหมายนี้หรือไม่? ฉันสงสัยว่าอาจมีการคำนวณบางอย่างที่เกี่ยวข้องที่ฉันสามารถทำได้เพื่อให้อัตราใหม่สอดคล้องกับการอ้างอิงเวลาภายในดีขึ้นหรือไม่ ข้อผิดพลาดครั้งที่สอง (ไม่มีนาฬิกาอ้างอิง) ทำให้ฉันคิดว่ามีบางอย่างภายในถูกเริ่มต้นใหม่ และเนื่องจากไม่สามารถใช้งานได้ชั่วขณะหนึ่ง
ความช่วยเหลือได้รับการชื่นชมอย่างมาก