แท็ก <วิดีโอ> และ <แหล่งที่มา>

คุณได้เตรียมไฟล์วิดีโอสำหรับเว็บอย่างถูกต้องแล้ว คุณได้ระบุขนาดและความละเอียดที่ถูกต้องแล้ว คุณยังได้สร้างไฟล์ WebM และ MP4 แยกต่างหากสำหรับเบราว์เซอร์อื่นๆ

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

ระบุไฟล์เดียว

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

<video src="chrome.webm" type="video/webm">
    <p>Your browser cannot play the provided video file.</p>
</video>

ระบุรูปแบบไฟล์หลายรูปแบบ

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

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

<video controls>
  <source src="https://storage.googleapis.com/web-dev-assets/video-and-source-tags/chrome.webm" type="video/webm">
  <source src="https://storage.googleapis.com/web-dev-assets/video-and-source-tags/chrome.mp4" type="video/mp4">
  <p>Your browser cannot play the provided video file.</p>
</video>

ลองใช้ใน Glitch

คุณควรเพิ่มแอตทริบิวต์ type ลงในเหตุการณ์แท็ก <source> เสมอ แม้ว่าจะเลือกไม่เพิ่มก็ได้ วิธีนี้ช่วยให้มั่นใจว่าเบราว์เซอร์จะดาวน์โหลดเฉพาะไฟล์ที่เล่นได้

วิธีนี้มีข้อดีมากกว่าการแสดง HTML หรือสคริปต์ฝั่งเซิร์ฟเวอร์ที่แตกต่างกัน โดยเฉพาะอย่างยิ่งบนอุปกรณ์เคลื่อนที่

  • คุณระบุรูปแบบได้ตามลำดับที่ต้องการ
  • การเปลี่ยนฝั่งไคลเอ็นต์จะช่วยลดเวลาในการตอบสนอง เนื่องจากมีการสร้างคำขอเพียงรายการเดียวเพื่อรับเนื้อหา
  • การปล่อยให้เบราว์เซอร์เลือกรูปแบบจะง่าย รวดเร็ว และน่าเชื่อถือกว่าการใช้ฐานข้อมูลการสนับสนุนฝั่งเซิร์ฟเวอร์กับการตรวจหา User Agent
  • การระบุประเภทของแหล่งที่มาของไฟล์แต่ละแหล่งจะช่วยปรับปรุงประสิทธิภาพเครือข่าย เนื่องจากเบราว์เซอร์จะเลือกแหล่งที่มาของวิดีโอได้โดยไม่ต้องดาวน์โหลดวิดีโอบางส่วนเพื่อ "สแกนสอดแนม" รูปแบบ

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

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

ระบุเวลาเริ่มต้นและเวลาสิ้นสุด

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

หากต้องการใช้ข้อมูลโค้ดของสื่อ ให้เพิ่ม #t=[start_time][,end_time] ลงใน URL ของสื่อ เช่น หากต้องการเล่นวิดีโอจากวินาทีที่ 5 ถึง 10 ให้ระบุ

<source src="video/chrome.webm#t=5,10" type="video/webm">

คุณระบุเวลาใน<hours>:<minutes>:<seconds>ได้ด้วย ตัวอย่างเช่น #t=00:01:05 จะเริ่มต้นวิดีโอที่นาทีที่ 1:05 หากต้องการเล่นเฉพาะนาทีแรกของวิดีโอ ให้ระบุ #t=,00:01:00

คุณสามารถใช้ฟีเจอร์นี้เพื่อแสดงหลายมุมมองในวิดีโอเดียวกัน เช่น จุดเริ่มโฆษณาในดีวีดี โดยไม่ต้องเข้ารหัสและแสดงหลายไฟล์

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

แต่คุณดำเนินการนี้ได้ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของเบราว์เซอร์ เช่น ใน Chrome ตัวเลือกนี้จะอยู่ในแผงเครือข่าย มองหาส่วนหัว Accept-Ranges และตรวจสอบว่าส่วนหัวดังกล่าวระบุว่า bytes ในรูปภาพนั้น ฉันวาดกล่องสีแดงไว้รอบส่วนหัวนี้ หากไม่เห็นค่า bytes คุณจะต้องติดต่อผู้ให้บริการโฮสติ้ง

ภาพหน้าจอของ Chrome DevTools: Accept-Ranges: bytes
ภาพหน้าจอ Chrome DevTools: ช่วงที่ยอมรับ: ไบต์

ใส่ภาพโปสเตอร์

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

<video poster="poster.jpg" ...>
  …
</video>

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

ไม่ควรทำ
หากไม่มีภาพปกสำรอง วิดีโอจะดูไม่สมบูรณ์
หากไม่มีโปสเตอร์สำรอง วิดีโอจะดูไม่สมบูรณ์
ควรทำ
โปสเตอร์สำรองจะทำให้ดูเหมือนว่ามีการจับเฟรมแรกไว้แล้ว
โปสเตอร์สำรองทำให้ดูราวกับว่าได้จับภาพเฟรมแรกแล้ว

ตรวจสอบว่าวิดีโอไม่ล้นคอนเทนเนอร์

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

ภาพหน้าจอ Chrome ของ Android ในแนวตั้ง: องค์ประกอบวิดีโอที่ไม่มีการจัดสไตล์แสดงเกินขอบเขตการแสดงผล
ภาพหน้าจอของ Android Chrome แนวตั้ง: องค์ประกอบวิดีโอที่ไม่มีรูปแบบเกินวิวพอร์ต
ภาพหน้าจอ Chrome ของ Android ในแนวนอน: องค์ประกอบวิดีโอที่ไม่มีการจัดสไตล์แสดงเกินขอบเขตการแสดงผล
ภาพหน้าจอ Chrome ของ Android ในแนวนอน: องค์ประกอบวิดีโอที่ไม่มีการจัดสไตล์แสดงผลเกินขอบเขตของวิวพอร์ต

คุณควบคุมขนาดวิดีโอได้โดยใช้ CSS หาก CSS ไม่ตอบโจทย์ความต้องการของคุณทั้งหมด ไลบรารีและปลั๊กอิน JavaScript เช่น FitVids สามารถช่วยคุณได้ แม้กระทั่งวิดีโอจาก YouTube และแหล่งที่มาอื่นๆ ทรัพยากรเหล่านี้อาจทำให้ขนาดเพย์โหลดของเครือข่ายเพิ่มขึ้น ซึ่งมีผลเสียต่อรายได้ของคุณและกระเป๋าเงินของผู้ใช้

สำหรับการใช้งานง่ายๆ อย่างเช่นที่ผมกำลังอธิบายอยู่นี้ ให้ใช้คำค้นหาสื่อ CSS เพื่อระบุขนาดขององค์ประกอบตามขนาดวิวพอร์ต โดย max-width: 100% คือเพื่อนของคุณ

สำหรับเนื้อหาสื่อใน iframe (เช่น วิดีโอ YouTube) ให้ลองใช้แนวทางที่ตอบสนองได้ (เช่น แนวทางที่ John Surdakowski เสนอ)

CSS

.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0;
    height: 0;
    overflow: hidden;
}

.video-container iframe,
.video-container object,
.video-container embed {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

HTML

<div class="video-container">
  <iframe
    src="//www.youtube.com/embed/l-BA9Ee2XuM"
    frameborder="0"
    width="560"
    height="315"
  ></iframe>
</div>

ลองใช้

เปรียบเทียบตัวอย่างที่ตอบสนองกับเวอร์ชันที่ไม่ตอบสนอง ดังที่คุณเห็น เวอร์ชันที่ไม่ตอบสนองนั้นไม่ใช่ประสบการณ์การใช้งานที่ยอดเยี่ยม

การวางแนวของอุปกรณ์

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

Safari บน iPhone สามารถสลับระหว่างแนวตั้งและแนวนอน ได้ดี:

ภาพหน้าจอของวิดีโอที่เล่นใน Safari บน iPhone ในแนวตั้ง
ภาพหน้าจอของวิดีโอที่เล่นใน Safari บน iPhone ในโหมดแนวตั้ง
ภาพหน้าจอของวิดีโอที่เล่นใน Safari บน iPhone ในโหมดแนวนอน
ภาพหน้าจอของวิดีโอที่เล่นใน Safari บน iPhone, แนวนอน

การวางแนวอุปกรณ์ใน iPad และ Chrome ใน Android อาจทำให้เกิดปัญหาได้ ตัวอย่างเช่น หากไม่มีการปรับเปลี่ยนใดๆ วิดีโอที่เล่นบน iPad ในแนวนอนจะมีลักษณะดังนี้

ภาพหน้าจอของวิดีโอที่กำลังเล่นใน Safari บน iPad, โหมดแนวนอน
ภาพหน้าจอของวิดีโอที่เล่นใน Safari บน iPad, แนวนอน

การตั้งค่าวิดีโอเป็น width: 100% หรือ max-width: 100% ด้วย CSS ช่วยแก้ปัญหาการจัดวางการวางแนวอุปกรณ์ได้หลายอย่าง

เล่นอัตโนมัติ

แอตทริบิวต์ autoplay จะควบคุมให้เบราว์เซอร์ดาวน์โหลดและเล่นวิดีโอทันที วิธีการที่แน่ชัดจะขึ้นอยู่กับแพลตฟอร์มและเบราว์เซอร์

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

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

  • Safari: ที่ผ่านมาต้องใช้ท่าทางสัมผัสของผู้ใช้ แต่ได้ผ่อนปรนข้อกำหนดดังกล่าวในเวอร์ชันล่าสุด โปรดดูรายละเอียดที่หัวข้อนโยบายใหม่สำหรับ <video> ใน iOS

แม้ในแพลตฟอร์มที่เปิดใช้การเล่นอัตโนมัติได้ คุณก็ควรพิจารณาว่าควรเปิดใช้หรือไม่ โดยพิจารณาจากปัจจัยต่อไปนี้

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

โหลดล่วงหน้า

แอตทริบิวต์ preload บอกใบ้ให้เบราว์เซอร์ทราบว่าควรโหลดข้อมูลหรือเนื้อหาล่วงหน้าเท่าใด

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

แอตทริบิวต์ preload มีผลแตกต่างกันในแพลตฟอร์มต่างๆ เช่น Chrome บัฟเฟอร์วิดีโอ 25 วินาทีบนเดสก์ท็อป แต่ไม่มีบัฟเฟอร์ใน iOS หรือ Android ซึ่งหมายความว่าบนอุปกรณ์เคลื่อนที่อาจมีความล่าช้าในการเริ่มเล่นซึ่งไม่เกิดขึ้นบนเดสก์ท็อป ดูรายละเอียดเพิ่มเติมได้ที่การเล่นแบบเร็วด้วยการโหลดเสียงและวิดีโอล่วงหน้าหรือบล็อกของ Steve Souders

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