การทดสอบความเร็ว

Facebook มีเซิร์ฟเวอร์การนำเข้าวิดีโอถ่ายทอดสดทั่วโลก ซึ่งใช้ในการแพร่ภาพวิดีโอถ่ายทอดสดของคุณ โปรดใช้การทดสอบความเร็วเพื่อเลือกเซิร์ฟเวอร์การนำเข้าวิดีโอที่ดีที่สุดสำหรับการแพร่ภาพของคุณ

การทดสอบความเร็วจะเป็นการส่งไฟล์ไบนารีไปยังชุด URL ปลายทางตามลำดับที่ได้รับ การทดสอบแต่ละครั้งจะประเมินการเชื่อมต่อของคุณกับเซิร์ฟเวอร์การนำเข้าวิดีโอของ Facebook ที่เฉพาะเจาะจง โดยเซิร์ฟเวอร์จะตอบกลับพร้อมรายละเอียดเกี่ยวกับความเร็วในการเชื่อมต่อที่วัดได้ เวลาที่ใช้ในการรับส่งข้อมูล และปัจจัยสำคัญอื่นๆ การรวบรวมผลลัพธ์ดังกล่าวในแต่ละการทดสอบที่ต่อเนื่องกันช่วยให้ Facebook สามารถเลือกชุด URL ปลายทางถัดไปได้จนกว่าจะมีการกำหนดเซิร์ฟเวอร์การนำเข้าที่ดีที่สุด จากนั้น API จะตอบกลับด้วยโทเค็นเป้าหมาย เมื่อคุณมีโทเค็นเป้าหมายแล้ว ให้ระบุโทเค็นไว้ทุกครั้งที่คุณสร้างการแพร่ภาพวิดีโอถ่ายทอดสด และ API จะตอบกลับด้วย URL ของสตรีมที่ได้ปรับให้เหมาะสมกับการเชื่อมต่อของคุณ

นอกจากนี้ คุณยังสามารถใช้เครื่องมือ Live Ingests ของ Facebook แทน API การทดสอบความเร็วเพื่อกำหนดเซิร์ฟเวอร์การนำเข้าที่เหมาะสมสำหรับการแพร่ภาพวิดีโอถ่ายทอดสดของคุณได้อีกด้วย

ขั้นตอนที่ 1: เริ่มเซสชั่นการทดสอบใหม่

ในการเริ่มเซสชั่นการทดสอบใหม่ ให้ส่งคำขอไปที่:

GET /traffic_speedtest?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second

ปลายทางจะตอบกลับด้วยอ็อบเจ็กต์ JSON ที่มีรายการกรณีทดสอบ โดยแต่ละกรณีทดสอบจะมี URL ปลายทางและจำนวนไบต์

ตัวอย่างคำขอ

curl -i -X GET "https://graph.facebook.com/v3.3/traffic_speedtest \
 ?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second \
 &access_token={access-token}"

ตัวอย่างการตอบกลับ

{                        //Formatted for clarity
 "next_tests": [
   {
     "byte_count": 3145728,
     "url": "https://edge-star-kut.xx.fbcdn.net/upload-speed-test-api"
   },
   {
     "byte_count": 3145728,
     "url": "https://edge-star-mad.xx.fbcdn.net/upload-speed-test-api"
   },
   {
     "byte_count": 3145728,
     "url": "https://edge-star-ort.xx.fbcdn.net/upload-speed-test-api"
   },
   {
     "byte_count": 3145728,
     "url": "https://edge-star-eze.xx.fbcdn.net/upload-speed-test-api"
   }
 ]
}

ขั้นตอนที่ 2: ทดสอบ URL ปลายทางแต่ละรายการ

ในการทดสอบแต่ละกรณี ให้อัพโหลดไฟล์ไบนารีที่มีขนาดตาม byte_count ที่กำหนดไปยัง URL ปลายทางที่เกี่ยวข้อง

POST /{destination-url}/upload-speed-test

ตัวอย่างคำขอ

ในตัวอย่างนี้ {binary-file} เป็นไฟล์ที่มีไบต์แบบสุ่ม 3145728 ไบต์ ซึ่งแมตช์กับจำนวนไบต์จากการตอบกลับ

curl --data-binary @{binary-file} https://edge-star-kut.xx.fbcdn.net/upload-speed-test-api

ตัวอย่างการตอบกลับ

สตริงแบบทึบจะถูกส่งกลับ

eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO...   //Truncated for brevity

ให้สร้างอาร์เรย์ชื่อ previous_results ที่มีอ็อบเจ็กต์ JSON ซึ่งประกอบด้วยคุณสมบัติและค่าต่อไปนี้:

previous_results=[
 {
   "test_url": "{destination-url}",
   "result_string": "{opaque-string}"
 }
]

หมายเหตุ: ให้ถือว่า result_string เป็นสตริงแบบทึบ และไม่ต้องพยายามแปลการตอบกลับจากปลายทางของการทดสอบ หากตัวเข้ารหัสไม่สามารถเข้าถึง URL ปลายทางได้ ให้เว้นรายการเดียวนั้นไว้ในรายการ previous_results

พารามิเตอร์คำอธิบาย

{destination-url}

URL ปลายทางที่ทำการทดสอบ

{opaque-string}

สตริงผลการทดสอบที่ URL ส่งกลับมา

ตัวอย่างอาร์เรย์ที่มีการตอบกลับการทดสอบรายการเดียว

previous_results=[           // JSON formatted for clarity
 {
   "test_url": "https://edge-star-kut.xx.fbcdn.net/upload-speed-test-api",
   "result_string": "eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO..."   //Truncated for brevity
 }
]

ให้เพิ่มแต่ละ URL ปลายทางและการตอบกลับการทดสอบต่อท้ายอาร์เรย์ previous_results

คำเตือน

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

ขั้นตอนที่ 3: ส่งคำขอชุด URL ปลายทางอีกชุดหนึ่ง

หลังการทดสอบ URL ชุดแรก ให้ส่งคำขอ URL อีกชุดหนึ่งและให้ระบุผลลัพธ์ก่อนหน้านี้เอาไว้ด้วย

GET /traffic_speedtest?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second&previous_results={previous-results}

แทนที่ {previous-results} ด้วยอาร์เรย์ผลการทดสอบที่คุณได้เก็บเอาไว้

ตัวอย่างคำขอ

curl -i -X GET 'https://graph.facebook.com/v3.3/traffic_speedtest \
 ?fields=target_token,next_tests,upload_bandwidth_estimate_bits_per_second \
 &access_token={access-token} \
 &previous_results=[   // JSON formatted for clarity
   { 
     "test_url":"https://edge-star-kut.xx.fbcdn.net/upload-speed-test-api",
     "result_string":
       {
          "eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO..."   //Truncated for brevity
       }
   },
   {
     "test_url":"https://edge-star-bru.xx.fbcdn.net/upload-speed-test-api",
     "result_string":
       {
          "eyJzdGFydFRpbWVNUyI6IjE1NjIxMDk4NDg3ODAiLCJydHQiO..."   //Truncated for brevity
       }
   },
   ...  //Truncated for brevity
 ]'

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

ตัวอย่างการตอบกลับด้วยโทเค็น

{
 "target_token": "atl",   //Testing is complete
 "upload_bandwidth_estimate_bits_per_second": 173557406  //Suggested bps
}
คุณสมบัติคำอธิบาย

target_token

สตริงที่จะต้องระบุเมื่อมีการใช้ API วิดีโอถ่ายทอดสด เมื่อระบุโทเค็นเป้าหมายแล้ว API วิดีโอถ่ายทอดสดจะส่ง URL ของสตรีมที่มีการปรับให้เหมาะสมกับการเชื่อมต่อของคุณกลับมา

upload_bandwidth_estimate_bits_per_second

แบนด์วิธในการอัพโหลดโดยประมาณจากอุปกรณ์ไปยัง Facebook ซึ่งคุณสามารถใช้กำหนดอัตราบิตสูงสุดสำหรับตัวเข้ารหัสวิดีโอของคุณได้ ตัวอย่างเช่น หากค่านี้เป็น 10000000 คุณสามารถกำหนดตัวเข้ารหัสให้แสดงเอาต์พุตสตรีมวิดีโอ 8Mbps ได้

หมายเหตุ: แบนด์วิธอัพโหลดเป็นการประมาณค่า และอาจเปลี่ยนแปลงอย่างมากเมื่อสภาวะเครือข่ายเปลี่ยนไป ตัวอย่างเช่น หากมีการส่งสตรีมไปยังตำแหน่งที่ตั้งต่างๆ เพื่อจัดการความจุ หรือหลีกเลี่ยงจุดบกพร่องร่วมกันระหว่างสตรีมอินพุต แบนด์วิธอัพโหลดอาจมีการเปลี่ยนแปลง

ขั้นตอนที่ 4: รับ URL ของสตรีมที่เหมาะสม

สร้างการแพร่ภาพวิดีโอถ่ายทอดสดตามปกติ จากนั้นสืบค้น ID วิดีโอถ่ายทอดสด และระบุโทเค็นเป้าหมายของคุณ:

GET /{broadcast-id}?fields=secure_stream_url&target_token={target-token}

ปลายทางจะตอบกลับด้วย URL ของสตรีมที่ปลอดภัยซึ่งมีการปรับให้เหมาะสมกับการเชื่อมต่อของคุณ

ตัวอย่างคำขอ

ในตัวอย่างนี้ target_token ที่การทดสอบความเร็วส่งกลับมาคือ atl

curl -i -X GET \
"https://graph.facebook.com/v3.3/{broadcast-id} \
  ?fields=secure_stream_url&target_token=atl \
  &access_token={access-token}"

ตัวอย่างการตอบกลับ

{
 “secure_stream_url”: “rtmps://...”,  //Optimized stream URL
 “id”: “{broadcast-id}”
}

หลักปฏิบัติที่ดีที่สุด

ทำการทดสอบความเร็วในแต่ละกรณีตามลำดับที่ได้รับ ให้เป็นไปตามลำดับ โดยไม่ทำการทดสอบหลายกรณีพร้อมกัน การทดสอบความเร็วหลายกรณีในเวลาเดียวกันจะทำให้คุณได้ผลลัพธ์ที่ไม่แม่นยำ

เมื่อมีการใช้โทเค็นเป้าหมายเพื่อรับ URL ของสตรีม ให้เริ่มเซสชั่นการทดสอบความเร็วใหม่สำหรับการแพร่ภาพวิดีโอถ่ายทอดสดแต่ละรายการ ห้ามนำผลการทดสอบเก่ามาใช้ซ้ำ เนื่องจาก URL การทดสอบ URL การตอบกลับ และโทเค็นเป้าหมายอาจมีการเปลี่ยนแปลง

เราขอแนะนำให้ทำการทดสอบความเร็วอีกครั้งเมื่อเกิดสภาวะใดๆ ต่อไปนี้:

  • การเชื่อมต่อเครือข่ายของคุณมีการเปลี่ยนแปลง เช่น การย้ายจาก Wi-Fi ไปเป็นการเชื่อมต่อแบบใช้สาย
  • ไม่มีการใช้งานแอพของคุณมาระยะหนึ่งแล้ว
  • แอพของคุณตรวจพบว่าสภาวะเครือข่ายมีการเปลี่ยนแปลง เช่น กำลังเติมบัฟเฟอร์การส่ง หรือคุณไม่สามารถสตรีมที่แบนด์วิธที่ประมาณเอาไว้ได้
  • คุณภาพการเชื่อมต่อของคุณมีการเปลี่ยนแปลง เช่น เกิดการติดขัดของลิงก์ระหว่าง ISP 2 รายการ

เมื่อมีการส่งโทเค็นใหม่กลับมา ให้หยุดการใช้งาน URL ของสตรีมปัจจุบัน และเริ่มการใช้งาน URL ของสตรีมใหม่ที่ส่งกลับมาทางโทเค็นใหม่ดังกล่าว

หากสภาวะเครือข่ายไม่ดีพอทำให้เกิดการสตรีมที่ไม่เสถียร แอพของคุณควรเตือนผู้เผยแพร่วิดีโอให้ปรับปรุงการเชื่อมต่อเครือข่าย เช่น โปรดตรวจสอบให้แน่ใจว่าไม่มีแอพอื่นๆ กำลังใช้งานแบนด์วิธอยู่, โปรดเปลี่ยนการเชื่อมต่อแบบไร้สายเป็นแบบใช้สาย, โปรดเพิ่มแบนด์วิธอินเทอร์เน็ตของคุณ หรือโปรดขอผู้ให้บริการอินเทอร์เน็ตของคุณเชื่อมต่อกับ Facebook โดยตรง