ตามที่คุณได้เรียนรู้ในโมดูลรูปภาพ HTML จะเปิดใช้การฝังสื่อลงในหน้าเว็บ ในส่วนนี้ เราจะพูดถึงไฟล์เสียงและวิดีโอ รวมถึงวิธีการฝังไฟล์ การควบคุมผู้ใช้ การให้ตัวยึดตำแหน่งภาพนิ่งสำหรับวิดีโอ และแนวทางปฏิบัติแนะนำซึ่งรวมถึงการทำให้ไฟล์เสียงและวิดีโอเข้าถึงได้
<audio>
และ<video>
คุณใช้องค์ประกอบ <video>
และ <audio>
เพื่อฝังโปรแกรมเล่นสื่อได้โดยตรงด้วยแอตทริบิวต์ src
หรือใช้เป็นองค์ประกอบคอนเทนเนอร์สำหรับชุดองค์ประกอบ <source>
แต่ละรายการ โดยแต่ละองค์ประกอบจะมีคำแนะนำไฟล์ src
แม้ว่าจะใช้ <video>
เพื่อฝังไฟล์เสียงได้ แต่ควรให้องค์ประกอบ <audio>
สำหรับการฝังไฟล์เสียงมากกว่า
แท็กเปิด <video>
และ <audio>
มีแอตทริบิวต์อื่นๆ ได้หลายรายการ ได้แก่ controls
, autoplay
, loop
, mute
, preload
และแอตทริบิวต์ส่วนกลาง องค์ประกอบ <video>
รองรับแอตทริบิวต์ height
, width
และ poster
ด้วย
<video src="videos/machines.webm" poster="images/machine.jpg" controls>
<p>Watch <a href="https://youtube.com/link">video on Youtube</a></p>
</video>
ตัวอย่าง <video>
นี้มีแหล่งที่มาเดียวที่มีแอตทริบิวต์ src
ลิงก์กับแหล่งที่มาของวิดีโอ แอตทริบิวต์ poster
มีรูปภาพที่จะแสดงเมื่อวิดีโอโหลด สุดท้าย แอตทริบิวต์ controls
จะให้การควบคุมวิดีโอสำหรับผู้ใช้
เนื้อหาทางเลือกจะรวมอยู่ระหว่างแท็กเปิดและแท็กปิด หาก User Agent ไม่รองรับ <video>
(หรือ<audio>
ระบบจะแสดงเนื้อหานี้ ต้องใช้แท็กปิด </video>
แม้ว่าจะไม่มีเนื้อหาระหว่างทั้ง 2 ไฟล์ก็ตาม
(แต่ควรมีเนื้อหาสำรองเสมอใช่ไหม)
หากไม่มีแอตทริบิวต์ src
ในแท็กเปิด <video>
หรือ <audio>
ให้ใส่เอลิเมนต์ <source>
อย่างน้อย 1 รายการ โดยแต่ละรายการมีแอตทริบิวต์ src
สำหรับไฟล์สื่อ ตัวอย่างต่อไปนี้ประกอบด้วยตัวเลือกไฟล์สื่อ 3 ตัวเลือก เนื้อหาสำรอง
และคำบรรยายภาษาอังกฤษและฝรั่งเศสระหว่างแท็กเปิดและแท็กปิด
<video controls poster="images/machine.jpg">
<source src="videos/machines.webm" type="video/webm">
<source src="videos/machines.mp4" type="video/mp4">
<source src="videos/machines.ogv" type="video/ogg">
<track label="English" kind="subtitles" srclang="en" src="vtt/subtitles-en.vtt" default />
<track label="Francais" kind="subtitles" srclang="fr" src="vtt/subtitles-fr.vtt" />
<p>Watch <a href="https://youtube.com/link">video on Youtube</a></p>
</video>
ข้อมูลย่อย <source>
แต่ละรายการจะมีแอตทริบิวต์ src
ที่ชี้ไปยังทรัพยากร และแอตทริบิวต์ type
จะแจ้งให้เบราว์เซอร์ทราบถึงประเภทสื่อของไฟล์ที่ลิงก์ ซึ่งจะป้องกันไม่ให้เบราว์เซอร์เรียกไฟล์สื่อที่ไม่สามารถถอดรหัสได้
ในแอตทริบิวต์ type
คุณใส่พารามิเตอร์ codecs
ได้ ซึ่งจะระบุวิธีเข้ารหัสทรัพยากรอย่างชัดเจน ตัวแปลงรหัสให้คุณรวมการเพิ่มประสิทธิภาพสื่อที่ยังไม่รองรับในเบราว์เซอร์ทั้งหมด ตัวแปลงรหัสจะแยกออกจากประเภทสื่อด้วยเครื่องหมายเซมิโคลอน ตัวอย่างเช่น ตัวแปลงรหัสอาจเขียนโดยใช้ไวยากรณ์ที่ไม่ซับซ้อน เช่น <source src="videos/machines.webm" type="video/webm;codecs=vp8,vorbis">
ซึ่งระบุว่าไฟล์ WebM มีวิดีโอ VP8 และเสียง vorbis ตัวแปลงรหัสก็อาจยากกว่าเช่นกัน เช่น <source src="videos/machines.mp4" type="video/mp4; codecs=avc1.4d002a">
ซึ่งระบุว่าการเข้ารหัส MP4 เป็น Advanced Video Coding Main Profile ระดับ 4.2 การอธิบายไวยากรณ์นี้อยู่นอกเหนือ
ขอบเขตของบทเรียนนี้ Jake Archibald มีโพสต์ที่อธิบายวิธีระบุพารามิเตอร์ตัวแปลงรหัสสำหรับวิดีโอ AV1 หากต้องการดูข้อมูลเพิ่มเติม
เมื่อแสดงวิดีโอ โดยค่าเริ่มต้น เฟรมแรกของวิดีโอจะแสดงเป็นภาพนิ่งเมื่อพร้อมใช้งาน
นี่คือสิ่งที่ควบคุมได้ แอตทริบิวต์ poster
ช่วยให้แหล่งที่มาของรูปภาพแสดงขณะที่วิดีโอกำลังดาวน์โหลดและจนกว่าวิดีโอจะเล่น หากวิดีโอเล่นและหยุดชั่วคราวในภายหลัง โปสเตอร์จะไม่แสดงอีก
อย่าลืมกำหนดสัดส่วนภาพของวิดีโอ เนื่องจากเมื่อวิดีโอโหลด ขนาดที่แตกต่างกันระหว่างโปสเตอร์และวิดีโอจะทำให้เกิดการจัดเรียงใหม่และการวาดใหม่
ใส่แอตทริบิวต์ boolean controls
เสมอ ซึ่งทำให้ตัวควบคุมของผู้ใช้มองเห็นได้ โดยผู้ใช้สามารถควบคุมระดับเสียง ปิดเสียงทั้งหมด และขยายวิดีโอให้เต็มหน้าจอได้
การละเว้น controls
จะทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี โดยเฉพาะอย่างยิ่งหากมีการระบุแอตทริบิวต์บูลีน autoplay
ไว้ด้วย โปรดทราบว่าบางเบราว์เซอร์จะไม่ทำตามคำสั่งแอตทริบิวต์ autoplay
หากละเว้นแอตทริบิวต์บูลีน muted
เนื่องจากการเล่นอัตโนมัติในไฟล์สื่อมักทำให้ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี แม้จะปิดเสียงไว้และมีตัวควบคุมที่มองเห็นได้
แทร็ก
ระหว่างแท็กเปิดและแท็กปิดที่จำเป็นของทั้งเสียงและวิดีโอ ให้รวมองค์ประกอบ <track>
อย่างน้อย 1 รายการเพื่อระบุแทร็กข้อความที่กำหนดเวลา ตัวอย่างต่อไปนี้มีไฟล์ <track>
2 ไฟล์ ซึ่งมีคำบรรยายข้อความแบบกำหนดเวลาทั้งภาษาอังกฤษและฝรั่งเศส
<track label="English" kind="subtitles" srclang="en" src="vtt/subtitles-en.vtt" default />
<track label="Français" kind="subtitles" srclang="fr" lang="fr-fr" src="vtt/subtitles-fr.vtt" />
ไฟล์แทร็กที่ระบุในแอตทริบิวต์ src
ควรเป็นรูปแบบ WebVTT (.vtt)
ไฟล์ควรอยู่ในโดเมนเดียวกับเอกสาร HTML เว้นแต่จะระบุแอตทริบิวต์ crossorigin
ไว้
ค่า 5 ค่าสำหรับแอตทริบิวต์ของแทร็ก kind
ได้แก่ subtitles
, captions
, descriptions
, chapters
และ metadata
อื่นๆ
ใส่ subtitles
พร้อมกับแอตทริบิวต์ srclang
สำหรับการถอดเสียงเป็นคำและการแปลบทสนทนา ค่าของแอตทริบิวต์ label
แต่ละรายการ
จะแสดงเป็นตัวเลือกให้แก่ผู้ใช้ เนื้อหาของตัวเลือก VTT ที่เลือกจะปรากฏขึ้นเหนือวิดีโอ คุณจัดสไตล์ของคำบรรยายได้โดยกำหนดเป้าหมาย ::cue/ ::cue()
ค่า kind="caption"
ควรเก็บไว้สำหรับการถอดเสียงเป็นคำและคำแปลที่มีเอฟเฟกต์เสียงและข้อมูลเสียงที่เกี่ยวข้องอื่นๆ
การดำเนินการนี้ไม่ได้มีไว้สำหรับผู้ชมที่หูหนวกเท่านั้น ผู้ใช้อาจหาหูฟังไม่เจอ ผู้ใช้จึงเปิดคำบรรยายแทนเสียง หรือบางทีพวกเขาอาจไม่เข้าใจประเด็นการพูดคุยล่าสุด
จากพอดแคสต์ที่ชอบเลย ผู้ชมจึงต้องการอ่านข้อความถอดเสียงเพื่อยืนยันความเข้าใจ
การมีทางเลือกในการเข้าถึงเนื้อหาเสียงและวิดีโอต่างก็มีความสำคัญและสะดวกสบาย
kind="description"
มีไว้สำหรับข้อความอธิบายเนื้อหาภาพในวิดีโอสำหรับผู้ใช้ที่มองไม่เห็นวิดีโอ ไม่ว่าจะใช้ระบบที่ไม่มีหน้าจออย่าง Google Home หรือ Alexa หรือตาบอดก็ตาม
การใส่คำบรรยายโดยใช้รูปแบบ WebVTT ช่วยให้ผู้ที่มีความบกพร่องทางการได้ยินเข้าถึงวิดีโอได้ อย่าลืมว่าความพิการไม่ใช่สิ่งที่คนๆ หนึ่งและสภาพแวดล้อมในขณะนั้นไม่ตรงกัน ความบกพร่องทางการได้ยินอาจเกิดขึ้นจากการอยู่ในสภาพแวดล้อมที่มีเสียงดัง ลำโพงบกพร่อง หรือหูฟังเสียหาย หรือเนื่องจากผู้ใช้สูญเสียการได้ยินเล็กน้อยหรือหูหนวก การทำให้เนื้อหาเข้าถึงได้จะช่วยเหลือผู้คนได้มากกว่าที่คุณคิด ซึ่งจะช่วยทุกคน
ข้อควรพิจารณาสำหรับวิดีโอพื้นหลัง
ทีมการตลาดหรือทีมออกแบบอาจต้องการให้เว็บไซต์ของคุณมีวิดีโอพื้นหลัง โดยทั่วไปแล้ว ผู้ใช้เหล่านี้ต้องการวิดีโอวนซ้ำ ที่ปิดเสียง เล่นโดยอัตโนมัติ โดยไม่มีการควบคุม HTML อาจมีลักษณะดังนี้
<video autoplay loop muted poster="images/machine.jpg" role="none">
<source src="videos/machines.webm" type="video/webm">
<source src="videos/machines.mp4" type="video/mp4">
<source src="videos/machines.ogv" type="video/ogg">
</video>
เข้าถึงวิดีโอพื้นหลังไม่ได้ ไม่ควรถ่ายทอดเนื้อหาผ่านวิดีโอพื้นหลังโดยไม่ได้ให้ผู้ใช้ควบคุมการเล่นและสิทธิ์เข้าถึงคำบรรยายวิดีโอทั้งหมดได้อย่างเต็มที่ เนื่องจากวิดีโอนี้เป็นเพียงการตกแต่งเท่านั้น จึงมีบทบาท ARIA ของ none
และละเว้นเนื้อหาสำรอง
หากต้องการปรับปรุงประสิทธิภาพของวิดีโอที่ปิดเสียงอยู่เสมอ ให้นำแทร็กเสียงออกจากแหล่งที่มาของสื่อ
หากวิดีโอเล่นได้ไม่เกิน 5 วินาที หลักเกณฑ์การช่วยเหลือพิเศษไม่จำเป็นต้องมีกลไกการหยุดชั่วคราว แต่ทุกสิ่งที่มีแอตทริบิวต์บูลีน loop
จะวนซ้ำโดยค่าเริ่มต้น ซึ่งมากกว่า 5 วินาทีนี้ หรือขีดจำกัดเวลาอื่นๆ โปรดใส่วิธีหยุดวิดีโอชั่วคราวเสมอเพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ดี ซึ่งทำได้ง่ายที่สุดโดยใส่ controls
ลงไป
การควบคุมสื่อที่กำหนดเอง
หากต้องการแสดงตัวควบคุมวิดีโอหรือเสียงที่กำหนดเองแทนการควบคุมในตัวของเบราว์เซอร์ ให้ใส่แอตทริบิวต์ controls
จากนั้นใช้ JavaScript เพื่อเพิ่มการควบคุมสื่อที่กำหนดเองและนำแอตทริบิวต์การควบคุมออก เช่น เพิ่ม <button>
ที่สลับสถานะการเล่นของไฟล์เสียงได้
<button id="playPause" aria-controls="idOfAudio"
data-pause-text="Pause audio"
data-play-text="Play audio">Pause audio</button>
ตัวอย่างนี้มีปุ่มที่มีแอตทริบิวต์ dataset
ซึ่งประกอบด้วยข้อความที่จะอัปเดตเมื่อผู้เข้าชมสลับไปมาระหว่างสถานะเล่นและหยุดชั่วคราว แอตทริบิวต์ aria-controls
จะรวมอยู่ใน id
ขององค์ประกอบที่ควบคุมโดยปุ่ม ซึ่งในกรณีนี้คือเสียง แต่ละปุ่มที่ควบคุมเสียงจะมีตัวแฮนเดิลเหตุการณ์
หากต้องการสร้างการควบคุมที่กำหนดเอง ให้ใช้ HTMLMediaElement.play()
และ HTMLMediaElement.pause()
เมื่อสลับสถานะการเล่น
ให้สลับข้อความของปุ่มด้วย ดังนี้
const pauseButton = document.getElementById('playPause');
pauseButton.addEventListener("click", pauseAndPlay, false);
function pauseAndPlay() {
console.log(this);
const media = document.getElementById(this.getAttribute('aria-controls'));
if (media.paused) {
media.play();
this.innerText = this.dataset.pauseText;
} else {
media.pause();
this.innerText = this.dataset.playText;
}
}
เมื่อระบุแอตทริบิวต์ controls
ผู้ใช้จะควบคุมเสียง (หรือวิดีโอ) ได้แม้ว่า JavaScript จะล้มเหลวก็ตาม
นำแอตทริบิวต์การควบคุมออกหลังจากที่สร้างอินสแตนซ์ปุ่มทดแทนแล้วเท่านั้น
document.querySelector('[aria-controls]').removeAttribute('controls');
รวมการควบคุมภายนอกเสมอเมื่อผู้ใช้ไม่สามารถเข้าถึงตัวควบคุม เช่น วิดีโอพื้นหลังที่มีการควบคุมซ่อนอยู่ด้านหลังเนื้อหาเว็บไซต์ การทำความเข้าใจพื้นฐานของข้อกำหนดด้านการเข้าถึงสื่อเพื่ออำนวยความสะดวกให้แก่ผู้ใช้ที่มีความต้องการทางสิ่งแวดล้อมและประสาทสัมผัสที่แตกต่างกัน ซึ่งรวมถึงผู้คนนับล้านที่มีการสูญเสียการได้ยินและความบกพร่องทางสายตา
เราเพิ่งกล่าวถึง HTMLMediaElement
ซึ่งมีพร็อพเพอร์ตี้ เมธอด และเหตุการณ์ที่รับค่ามาจากทั้ง HTMLVideoElement และ HTMLAudioElement โดยที่ HTMLMediaElement
ได้เพิ่มพร็อพเพอร์ตี้ เมธอด และเหตุการณ์ของตนเองบางรายการ ยังมี API สื่ออื่นๆ อีกหลายรายการ ซึ่งรวมถึง TextTrack API คุณสามารถใช้ API การจับภาพและสตรีมสื่อและ MediaDevices เพื่อบันทึกเสียงจากไมโครโฟนของผู้ใช้หรือบันทึกหน้าจอของผู้ใช้ Web Audio API ช่วยให้ควบคุมเสียงและการสตรีมแบบสดและที่บันทึกไว้ล่วงหน้า บันทึก หรือส่งเสียงไปยังองค์ประกอบ <audio>
ได้
ตรวจสอบความเข้าใจของคุณ
ทดสอบความรู้เกี่ยวกับเสียงและวิดีโอ
องค์ประกอบ <track>
ใช้ทำอะไร
แอตทริบิวต์ poster
ควบคุมอะไร