BLOG

LEVEL51 Multi Steamer

จะคบใครดี Facebook Live, Twitch หรือ YouTube Gaming ? เอาหมดทั้งสามเจ้าน่ะแหละดี!


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

สำหรับเครื่องมือที่เราเลือกใช้ก็คงหนีไม่พ้น OBS เพราะมีของเล่นให้เล่นเยอะมาก แต่ติดอย่างเดียวคือ OBS ไม่มีความสามารถในตัวที่จะใช้ Stream ออกหลายแห่งพร้อมกันได้ แต่เราอยากจะ Stream ทีเดียว ไปลงทั้ง Facebook, Twitch, YouTube จบในครั้งเดียวเลยนี่นา!

ตัวเลือกแรกที่โผล่ขึ้นมาก็คือบริการออนไลน์ แต่ลองส่องๆ หลายที่ละ ส่วนใหญ่ถ้าจะเอาสามเจ้านี้พร้อมกันจะต้องเสียเงิน เรื่องอะไร ความรู้เรามี ทำเองสิฟระ!!

จากการลุยหาอ่านไป ก็ไปเจอกับ Guide บนเว็บ OBS เกี่ยวกับเรื่องการตั้ง Server RTMP ขึ้นมาเอง ซึ่งตอนแรกผมก็ไม่ค่อยเข้าใจเหมือนกันว่าเราจะทำแบบนั้นไปทำไม จนมาถึงบางอ้อว่า เขาใช้สำหรับการอัดเก็บไว้ ทำเป็น Hilight หรือไม่ก้อเล่น Transcoding (แปลงวีดีโอซ้ำอีกรอบ) น่ะเอง โดยจุดที่ทำให้เราสามารถเล่นแบบนี้ได้ มาจากการที่ RTMP Module ของ Nginx นั้น มันมีความสามารถสำคัญเลย คือการที่มันสามารถในการส่งต่อข้อมูลไปยััง Server RTMP อื่นต่อได้ (push directive) โดยที่มันไม่ได้ทำการ Transcode อะไรเลย แค่ส่งต่อไปดื้อๆ

ดูก็น่าจะไม่ยากใช่ไหมละ ก็แบบนี้ ทำ Server RTMP ขึ้นมาด้วย Nginx แล้วเอา OBS ต่อเข้าไป แค่นี้ก็ส่งภาพต่อไปยัง Twitch, YouTube, Facebook ได้เลย

ถ้าชีวิตเราเรียบง่าย

แต่ความซับซ้อนมาเกิดตรงที่ พี่มาร์คของเรานั้น กำหนดมาว่า Facebook Live จะรองรับวีดีโอแค่ 1280x720 30fps และบิตเรทไม่เกิน 4Mbps เท่านั้น เราจึงเหลือทางเลือกแค่สองทางคือ ส่งภาพเป็นแบบ 1280x720 30fps ตาามที่ Facebook ต้องการ แต่ก็จะทำให้คนดูบน Twitch, YouTube Gaming ต้องทนดูภาพแบบกากๆ ไปด้วย ซึ่งถ้าเคยลองเปิดู จะเห็นว่าภาพบน Twitch มันลื่นมาก เพราะว่าเราสามารถส่งภาพแบบ 1920x1080 60fps ได้

ดังนั้น เราจึงต้องหาผู้ช่วย (ซึ่งต้องฟรีด้วย) อีกหนึ่งคนเข้ามาเพื่อการนี้ และผู้ช่วยคนเก่งของเราก็คือ FFMPEG ซึ่งเป็นโปรเจคเรื่องมัลติมีเดียที่อยู่คู่สังคม Open Source มาอย่างยาวนานมาก (17 ปีแล้ว ตะกี้ไปดูใน Wikipedia...) และก็โชคดีมาก ที่ตัว FFMPEG เอง มันสามารถ ดึงวีดีโอจากสตรีม RTMP และส่งวีดีโอเข้า RTMP ได้ในตัวเลยด้วย โอ้ สบายละทีนี้ (ตอนแรกนึกว่าจะต้องหา Library RTMP ใน C# ซะแล้ว) ดังนั้น การทำงานของเราง่ายเลย แค่จับแพชนเกะ อาศัยความรู้สมัย ม. ต้นของผม ที่บ้า Encode เพลง Encode หนังเป็นประจำ ในการออกแบบ Command Line เล็กน้อย ก็เป็นผลสำเร็จ (สมัยมัธยมนี่ บ้าเก็บสะสมซีดี ไม่อยากเอามันมาฟัง และสะสมหนังด้วย ก็ไม่อยากอ่านแผ่นมันบ่อยๆ อีก ปรากฏโดนน้ำท่วมปี 52 เละหมดเยย >.< แต่ตอนนั้นไปบวชเพิ่งสึกมา รู้สึกปลงๆ ละ เลยไม่เสียดายมาก :P) ออกมาเป็นการทำงานตามภาพนี้แหละจ้า

นั่นก็คือ เราเปิด Nginx ทำการรับ RTMP/ส่งต่อ ตามปกติ และเราก็คอนฟิกให้ FFMPEG ทำการดูด Stream จาก Nginx ออกมา จากนั้นทำการ ย่อภาพเหลือ 1280x720 และตัดเฟรมเรทเหลือ 30fps แล้ว Encode (หรือจะเรียกให้ถูก เรียก Transcode) จากนั้นก็ส่งภาพกลับเข้า Nginx ให้มันไปส่งต่อให้ Facebook อีกที เรียบร้อย!

บางคนอาจจะสงสัยว่า อ้าว แล้วทำไมไม่เอา FFMPEG ส่งให้ Facebook ไปเลยละ จะได้ไม่ต้องส่งกันไปมาหลายรอบ เหตุผลก็คือ เราจะได้สามารถ Preview ดูภาพที่จะส่งไป Facebook ไปด้วยได้ระหว่างกำลัง Live และก็ใน Nginx มันสามารถบอก Statistic ต่างๆ ว่า ภาพที่กำลังถ่ายทอดความละเอียดเท่าไหร่ ใช้ Bandwidth เยอะมั๊ย :)

ทีนี้ก็มาถึงพาร์ทสำคัญคือ...ทำยังไง!

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

LEVEL51 Multi Streamer!

โปรแกรมฟรี แถมยัง Open Source สำหรับ Streamer มือใหม่ มือเก่า ให้ใช้กันได้ถ้วนหน้า ไม่ต้องเสียเวลา ไม่ต้องโดนกำแพงความรู้ทางเทคนิคมาบดบัง จะได้รวยๆ ดังๆ ปังๆ ไปด้วยกัน เย้~

วิธีการใช้งาน

อย่างแรกเลย โปรแกรมนี้ทดสอบบน Windows 10 64-bit เวอร์ชั่น Falls Creator Update เท่านั้นนะ วินโดวส์อื่น ลองทดสอบกันว่าใช้ได้ ใช้ไม่ได้อย่างไร แล้วมาบอกกล่าวกันบ้างแล้วกัน นะ ถ้ามี Windows 10 แล้ว ก็แค่โหลดโปรแกรมจากลิงค์นี้ http://bit.ly/lv51-multistreamer แล้วก็ Open ได้เลย


แล้วมันจะเปิดหน้าติดตั้งขึ้นมา ก็กด Install

จากนั้น มันจะทำการดาวน์โหลดโปรแกรมขึ้นมา พร้อมขู่ว่า อีคนทำโปรแกรมนี้มันไม่ปัญญาจ่ายตังค์ซื้อ Certificate นะ แกว่าโปรแกรมมันจะไหวเหรอ ก็กด More Info แล้วเลือก Run Anyway



หน้าแรกก็เป็นโฆษณาแฝงนิดหน่อย :)


ถัดมาก็คือเราจะต้องหา Steam Key จากบริการทั้งหลายมาใส่ เริ่มจาก Facebook ก่อนเลย ของ Facebook ถ้าเกิดว่าเป็น Page ทำได้ตามนี้

สำหรับ YouTube จะมีสองวิธีในการเอา Stream Key ออกมา ทางแรกก็คือ กด Live เดี๋ยวนั้นเลย จะได้ Stream Key รายครั้งออกมา แต่ถ้าเลือกเป็น Schedule Event เราจะสามารถสร้าง Stream Key แบบถาวร เก็บไว้ได้ครับ ขอแสดงวิธีเฉพาะกด Live โดยตรงเลยนะ

ส่วนของ Twitch นั้น ตอนแรกหาแทบไม่เจอ ต้องให้ OBS พาไป ตามนี้

เรียบร้อยแล้ว ต่อไปก็แค่ นำเอามันไปใส่ในหน้าจอของ Multi Streamer ในหน้าจอ Keys  สำหรับ Key ของ Facebook, Twitch มันใช้ Key เดิมได้ตลอด ก็เซฟไว้ได้เลย

จากนั้น ก็ไปที่หน้า LIVE! เพื่อเริ่มเตรียม Live ได้!


โดยตัวเลือก Start OBS คือ ตัวโปรแกรมจะทำการเปิด OBS พร้อมกับตั้งค่าให้ OBS Stream ภาพเข้ามายัง Nginx ที่ตัวโปรแกรม Multi Streamer เป็นคนเปิดขึ้นมาให้ด้วย โดยมันจะเข้าไปเซ็ตค่าให้ตาม Profile ที่เลือก แต่ถ้าเกิดว่าไม่อยากให้เราเปิด OBS ขึ้นมาเอง ก็ไม่ต้องเลือกนะ ซึ่งถ้าไม่เลือก หรือว่าไม่ได้ใช้ OBS ก็แค่ตั้งค่าให้ โปรแกรมที่ใช้ ส่ง Stream มาที่ rtmp://localhost/ingest โดยใส่ Stream Key ว่า 1  เท่านั้น

อีกจุดคือ Facebook Bitrate ตอนนี้สูงสุดอยู่ที่ 4000 (4Mbps) และเราตั้งมาให้ก่อน 4Mbps เลย ซึ่งมันคือ Bandwidth ที่ต้องใช้เพิ่มขึ้น ในการอัพโหลดข้อมูลไปที่ Facebook ด้วย ลองคำนวณจาก Bandwidth ที่เรามีด้วยละ

ส่วนการตั้งค่า Settings ของ OBS ควรจะตั้งค่าตามนี้ โดยเราอ้างอิงจาก Twitch นะ

หน้า Output:

  1. Mode: Advanced
  2. Audio Track: 1
  3. Encoder: Hardware เลือกตัวที่ไม่ใช่ Quick Sync เช่น NVENC
  4. Rate Control: CBR
  5. Bitrate: 6000
  6. Keyframe Interval: 2
  7. Profile: main
  8. ไปที่หน้า Audio เลือก Bitrate 160

หน้า Video:

  1. Canvas Resolution: 1920x1080
  2. Output Resolution: 1920x1080
  3. Downscale Filter: Bilinear
  4. Common FPS Values: 60

หลังกด Start แล้ว ก็จะต้องปรากฏหน้าจอแบบนี้ จะให้ดี ควรทดสอบ Offline ก่อน โดยการเลือก Offline Test ดูว่า Quick Sync ติดไหม โดยจะต้องมีโลโก้ขึ้นมา ซึ่งถ้ามันไม่ติด มันจะต้องใช้ CPU ในการ Transcode ซึ่งจะกินไปประมาณ 40% ของเครื่องแบบ Quad Core/8 Thread เลยทีเดียว

และอย่าลืมว่า เราส่งข้อมูลไปสามที่ ถ้าตั้ง 6,000 (แปลว่า 6 Mbps) นั่นคือ Internet เราต้อง Upload มากกว่า 6+6+4 = 16Mbps นะ ถ้าเน็ตอัพโหลดไม่ถึง ก็เน้นให้ Twitch/YouTube มากหน่อย เพราะว่าคุณภาพจะได้ดีหน่อย โดย Facebook อาจจะลดเหลือ 2000 หรือ 2Mbps ก็ได้)

(การเปิดครั้งแรก โปรแกรมจะทำการดาวน์โหลด ffmpeg และ nginx มาจากอินเตอร์เน็ต ดังนั้นควรกดทดลองก่อนรอบนึง เพื่อจะได้ไม่ต้องรอดาวน์โหลด)

อีกเรื่องคือ บางที่ ก็พบว่า FFMPEG มันชอบดับเอง แต่จะเป็นเฉพาะช่วงที่กำลังเริ่ม Stream เท่านั้น ถ้าผ่านช่วงนี้ไปได้ มันก็จะทำงานได้ปกติ ซึ่งถ้าเกิด FFMPEG ดับไปช่วงภายใน 2 นาทีแรก หลังกด Start เราก็จะขึ้นหน้าจอมาเตือน ให้กดเปิดมันขึ้นมาใหม่ได้เลย

และ Windows อาจจะขึ้นถามว่า จะให้อนุญาตให้ Nginx ทะลุ Firewall ได้ไหม ก็อย่าลืมตอบอนุญาตละ


และเพื่อความสะดวก ในโปรแกรมมีหน้า Monitor เอาไว้ดูภาพที่ส่งออกไปด้วย ไม่ต้องเปิดหลายโปรแกรม โดยมันจะใช้ VLC ในการเล่น ซึ่งถ้าเกิดว่าในเครื่องไม่มี VLC มันก็จะดาวน์โหลดมาเองเหมือนกัน (ขนาดประมาณ 45MB) และหน้าจอขาวๆ ด้านบน จะ Refresh ทุกๆ 5 วินาที เอาไว้ดูว่า Stream เรายังทำงานอยู่ไหม มีข้อมูลวิ่งเข้าส่งออกบ้างหรือเปล่า และขนาดภาพ กะบิตเรตถูกต้องไหม

ทำไปทำมา เพื่อนบอกว่า ทำมาซะขนาดนี้ แกไม่ทำขายซะเลยละ :D ก็แอบคิดเหมือนกันว่า อาจจะมีบริการจาก LEVEL51 ที่เกี่ยวกับเรื่อง Live นี้ออกมา เพราะเราเองก็ชอบเล่นชอบจับพวกนี้อยู่แล้ว 

ส่วนถ้าคุณเป็น Streamer เราก็ขอแนะนำโครงการ SQUAD51 ที่เราช่วย Sponsor ของรางวัลเป็น เป้ กะ โค๊ดส่วนลด สำหรับเอาไว้แจกคน Follow ของคุณได้ แถมถ้าเกิดว่าคนที่ Follow ซื้อเครื่อง เราก็แจกเมาส์ กับส่วนแบ่ง (ค่าคอมมิชชั่น) ให้ด้วยนะ

เอาละ ขอบคุณที่อ่านมาถึงตรงนี้ ถ้ามีอะไรสงสัยก็ สอบถามเข้ามาได้ทางคอมเมนต์นะ ส่วน Source เราก็ปล่อยฟรีด้วย MIT License เลย เข้าไป Clone ได้จาก https://github.com/nantcom/multistreamer

แล้วเจอกันบน Live!~

BLOG