FFmpeg สามารถเผยแพร่แหล่งทดสอบ RTMP ไปยังปลายทางที่กำหนดได้ แต่การที่คำสั่งทำงานเสร็จไม่ใช่ผลการยอมรับ ใช้อินพุตที่ทราบผล ปกป้อง URL และคีย์ แล้วตรวจสอบกิจกรรมของผู้เผยแพร่ สื่อที่ถอดรหัสได้ และเส้นทางตัวรับที่เลือก
เลือกโหมดการเข้าถึงก่อน
ในโหมดควบคุม ผู้เผยแพร่และผู้รับเป็นบทบาทแยกกันบนชื่อสตรีมที่กำหนดค่าเดียวกัน และสามารถใช้ URL RTMP เดียวกันได้ ในโหมด Guest ให้เปิดปลายทางโดยเจตนาและใช้ชื่อสตรีมที่ไม่ว่าง ผู้รับต้องใช้ชื่อนั้นเดียวกัน
ก่อนเผยแพร่
รับ URL สำหรับเผยแพร่ RTMP และคีย์สตรีมจากการปรับใช้ อย่าวางคีย์จริงลงในประวัติ shell ทิกเก็ต หรือบทความ ยืนยันว่าบิลด์ FFmpeg ของคุณรองรับ RTMP: เอกสารโปรโตคอลของ FFmpeg อธิบายตัวเลือกโปรโตคอล ส่วนเอกสารรูปแบบครอบคลุมพฤติกรรมของ muxer
ffmpeg -protocols | grep rtmp
ผลลัพธ์ที่คาดหวัง: คำสั่งจะแสดงรูปแบบโปรโตคอล RTMP ที่บิลด์นั้นรองรับ หากไม่แสดง ให้ปรับการทดสอบให้เข้ากับบิลด์ที่ติดตั้ง แทนที่จะสมมติว่าแพ็กเกจมีโปรโตคอลนี้
เผยแพร่ไฟล์ตามความเร็วเวลาจริง
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"
ผลลัพธ์ที่คาดหวัง: FFmpeg จะรายงานความคืบหน้าของเฟรมอย่างต่อเนื่อง แทนที่จะส่งไฟล์เร็วเท่าที่สตอเรจอนุญาต -re อ่านไฟล์ตามอัตราปกติสำหรับการทดสอบที่มีขอบเขตนี้ แทนที่ตัวแทนด้วยค่าที่ออกให้สำหรับ listener อย่าเปลี่ยนเส้นทางแอปพลิเคชันหรือคีย์
แปลงรหัสเมื่อสัญญาผลลัพธ์ต้องการ
ffmpeg -re -stream_loop -1 -i input.mov -c:v libx264 -pix_fmt yuv420p -g 60 -c:a aac -ar 48000 -b:a 128k -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"
ผลลัพธ์ที่คาดหวัง: ผู้รับเห็นผู้เผยแพร่ที่ต่อเนื่องพร้อมวิดีโอและเสียงที่ถอดรหัสได้ นี่คือตัวอย่าง ไม่ใช่ข้อกำหนดการเข้ารหัสที่ใช้ได้ทุกกรณี: เลือกอัตราเฟรม ช่วง GOP/คีย์เฟรม บิตเรต ความละเอียด และพารามิเตอร์เสียงให้เหมาะกับผู้รับและเวิร์กโฟลว์การส่งจริง
ตรวจสอบที่เซิร์ฟเวอร์ แล้วจึงตรวจสอบผลลัพธ์ที่ตั้งใจไว้
- ยืนยันว่า RTMP Server รายงานผู้เผยแพร่ที่คาดไว้และบิตเรตขาเข้า
- ตรวจภาพและเสียงจากผู้รับหรือจุดมอนิเตอร์ที่กำหนดค่าไว้
- ทดสอบเอาต์พุตปลายทางที่ตั้งใจไว้เพียงรายการเดียว ได้แก่ การบันทึก เส้นทาง หรือโปรแกรมเล่นบนเบราว์เซอร์
- หยุดกระบวนการหนึ่งครั้งและตรวจสอบสถานะผู้รับกับแผนการกู้คืน
สำหรับอุปกรณ์รับภาพสด ให้แทนที่อินพุตไฟล์ด้วยไวยากรณ์อินพุต FFmpeg ที่มีเอกสารรองรับ และคงการตรวจรับฝั่งเซิร์ฟเวอร์ชุดเดิมไว้ หลีกเลี่ยงลูปเชื่อมต่อใหม่อัตโนมัติจนกว่าคุณจะทราบว่า listener จัดการเซสชันซ้ำอย่างไร เพราะลูปอาจบดบังข้อผิดพลาดแรกที่มีประโยชน์
เลือกโปรโตคอลของปลายทางที่ให้มา
ใช้โปรโตคอลปลายทางที่ให้มาสำหรับงานนี้ Callaba RTMP Server ให้บริการ listener กฎการเข้าถึง และมุมมองกิจกรรม ส่วนการดูผ่านเบราว์เซอร์ใช้ออกพุตที่กำหนดค่าแยกต่างหาก
การกำหนดค่าที่เกี่ยวข้อง
กำหนดค่า listener ในCallaba RTMP Server ใช้คู่มือผู้ปฏิบัติงานสำหรับการตรวจสอบการเข้าถึงและสถานะ หรือไปที่RTMP เป็น HLSเมื่อผลลัพธ์ที่ต้องการคือการส่งผ่านเบราว์เซอร์
ผู้ส่งและผู้รับสำหรับการวินิจฉัยในเครื่อง
ffmpeg -re -f lavfi -i testsrc2=size=1280x720:rate=30 -f lavfi -i sine=frequency=1000:sample_rate=48000 -c:v libx264 -pix_fmt yuv420p -g 60 -c:a aac -b:a 128k -f flv "rtmp://INGEST_HOST:PORT/APP/STREAM_NAME_OR_KEY"
ผลลัพธ์ที่คาดหวัง: FFmpeg รายงานเฟรมวิดีโอที่ราว 30 fps และสตรีมเสียงหนึ่งรายการ Callaba รายงานบิตเรตขาเข้า ค่า GOP 60 ให้คีย์เฟรมทุกสองวินาทีที่ 30 fps ซึ่งเป็นจุดเริ่มต้นที่ใช้งานได้สำหรับเวิร์กโฟลว์เซกเมนต์สองวินาที ไม่ใช่การตั้งค่าเซิร์ฟเวอร์ที่บังคับใช้
คัดลอกต่อเมื่อได้ตรวจสอบอินพุตแล้ว: ffprobe -v error -show_entries stream=codec_name,codec_type -of default=nw=1 input.mp4 ใช้ผลลัพธ์นี้เปรียบเทียบโคเดกอินพุตและรายละเอียดเสียงกับสัญญาที่ผู้รับบันทึกไว้ การคัดลอกจึงสมเหตุสมผลเมื่อทั้งสองตรงกันเท่านั้น สำหรับผู้รับเพื่อการวินิจฉัย ffplay -fflags nobuffer "rtmp://RECEIVER_HOST:PORT/APP/STREAM_NAME_OR_KEY" ควรเปิดภาพและโทนเสียงหลังผู้รับเชื่อมต่อแล้ว ดูแหล่งฟิลเตอร์ FFmpegสำหรับ testsrc2 และ sine
ขั้นตอนถัดไป
กำหนดค่า listener ในCallaba RTMP Server แล้วตรวจสอบการเข้าถึงและกิจกรรมในคู่มือผู้ปฏิบัติงาน