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

คุณได้เตรียมไฟล์วิดีโอสำหรับเว็บอย่างถูกต้องแล้ว คุณระบุขนาดและความละเอียดที่ถูกต้องแล้ว คุณยังสร้างไฟล์ 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 อาจส่งผลต่อประสิทธิภาพเมื่อมีแหล่งที่มาหลายแห่งที่มีประเภทที่ไม่รองรับ

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

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

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

หากต้องการใช้ส่วนย่อยสื่อ ให้เพิ่ม #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 นาที 5 วินาที หากต้องการเล่นเฉพาะนาทีแรกของวิดีโอ ให้ระบุ #t=,00:01:00

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

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

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

ภาพหน้าจอของเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome: ช่วงที่ยอมรับได้: ไบต์
ภาพหน้าจอของ 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 จะควบคุมให้เบราว์เซอร์ดาวน์โหลดและเล่นวิดีโอทันที วิธีการทำงานที่แน่นอนจะขึ้นอยู่กับแพลตฟอร์มและเบราว์เซอร์

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

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

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

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

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

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

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