亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
最近一位客戶要求我制作一個無障礙視頻播放器,她非常希望其中一個功能是音頻描述。音頻描述面向盲人或視力障礙者,提供額外的語音信息來描述重要的視覺細(xì)節(jié)。傳統(tǒng)上,帶有音頻描述的視頻必須專門制作,音頻編碼在單個視頻文件的單獨音軌中。這需要相當(dāng)專業(yè)的視頻編輯設(shè)備來編碼這些音頻軌道,這使得大多數(shù)內(nèi)容創(chuàng)作者難以實現(xiàn)。我在網(wǎng)上看到的所有帶有音頻描述的內(nèi)容都是這樣的。例如,BBC iPlayer 提供了一些此類內(nèi)容,但視頻播放器無法控制相對音量,也無法關(guān)閉音頻描述——您只能觀看節(jié)目的單獨描述版本或非描述版本。HTML5 的登場
HTML5 視頻規(guī)范確實提供了 audioTracks 對象,這使得實現(xiàn)開關(guān)按鈕并分別控制音頻和視頻音量成為可能。但它的瀏覽器支持幾乎不存在——在撰寫本文時,只有 IE10 支持此功能。無論如何,我的客戶想要的是一個單獨文件中的音頻描述,可以將其添加到視頻中,而無需創(chuàng)建單獨的版本,并且無需使用專用軟件即可輕松制作。當(dāng)然,它必須在相當(dāng)多的瀏覽器中運行。所以我的下一個想法是使用 MediaController,這是 HTML5 音頻和視頻的一項功能,允許您同步多個來源。但是,對它的瀏覽器支持同樣很少——在撰寫本文時,只有 Chrome 支持此功能。但是您知道——即使沒有這種支持,同時啟動兩個媒體文件顯然也不是問題,只是需要保持同步。那么,我們能否使用現(xiàn)有的、廣泛實現(xiàn)的功能來實現(xiàn)這一點呢?視頻事件
當(dāng)然,這只是一個簡單的概念驗證演示——沒有初始功能檢測,它只具有本機“controls”屬性提供的基本控件。對于正確的實現(xiàn),它需要自定義控件,以提供(除其他外)一個開關(guān)音頻的按鈕和單獨的音量滑塊。界面也應(yīng)該可以通過鍵盤訪問,這在某些瀏覽器的本機控件中并非如此。它還需要正確處理緩沖——實際上,如果您搜索到視頻已預(yù)加載的點之后,音頻將繼續(xù)自由播放,直到視頻加載足夠多以將其重新同步為止。我還想提一下,描述本身幾乎達不到專業(yè)標(biāo)準(zhǔn)!那是您可以聽到我的聲音,使用 Audacity 錄制和轉(zhuǎn)換。但就是這樣,我認(rèn)為它有效地演示了這種方法的技術(shù)門檻有多低。我不必編輯視頻,而且我用免費軟件在一小時內(nèi)制作了音頻。作為一個概念證明,我認(rèn)為它非常成功——我相信我的客戶會非常滿意!關(guān)于 HTML5 視頻的可訪問音頻描述的常見問題解答 (FAQ)
HTML5 視頻中可訪問音頻描述的重要性是什么?
如何在我的 HTML5 視頻中添加音頻描述?
為什么我的 HTML5 視頻無法播放?
HTML5 視頻支持哪些常用格式?
如何修復(fù)“找不到 HTML5 視頻文件”錯誤?
如何使我的 HTML5 視頻具有響應(yīng)性?
我可以向我的 HTML5 視頻添加字幕或旁白嗎?
如何控制我的 HTML5 視頻的播放?
我可以在我的網(wǎng)站上嵌入 HTML5 視頻嗎?
使用 HTML5 進行視頻播放的好處是什么?
首頁 web前端 js教程 HTML5視頻的可訪問音頻說明

HTML5視頻的可訪問音頻說明

Feb 23, 2025 am 08:48 AM

Accessible Audio Descriptions for HTML5 Video

要點總結(jié)

  • 傳統(tǒng)的視障人士輔助音頻描述需要專業(yè)的視頻編輯設(shè)備進行編碼,將其嵌入視頻文件的單獨音軌中。對大多數(shù)內(nèi)容創(chuàng)作者來說,這個過程通常不切實際。
  • HTML5 視頻規(guī)范提供了 audioTracks 對象,理論上允許為音頻描述實現(xiàn)開關(guān)按鈕,并分別控制音頻和視頻音量。但是,目前瀏覽器對該功能的支持有限。
  • 另一種解決方案是使用 MediaController,這是 HTML5 音頻和視頻的一項功能,允許同步多個來源。此功能目前在瀏覽器支持方面也受到限制,但可以使用現(xiàn)有的、廣泛實現(xiàn)的功能同時啟動兩個媒體文件并保持同步。
  • 視頻 API 提供了諸如“播放”、“暫?!薄ⅰ敖Y(jié)束”和“timeupdate”之類的事件,可用于將音頻播放與視頻事件同步。“timeupdate”事件對于此目的尤為重要,平均每秒觸發(fā) 3-5 次。這種方法允許創(chuàng)建可訪問的音頻描述,而無需專門的軟件或視頻的單獨版本。

最近一位客戶要求我制作一個無障礙視頻播放器,她非常希望其中一個功能是音頻描述。音頻描述面向盲人或視力障礙者,提供額外的語音信息來描述重要的視覺細(xì)節(jié)。傳統(tǒng)上,帶有音頻描述的視頻必須專門制作,音頻編碼在單個視頻文件的單獨音軌中。這需要相當(dāng)專業(yè)的視頻編輯設(shè)備來編碼這些音頻軌道,這使得大多數(shù)內(nèi)容創(chuàng)作者難以實現(xiàn)。我在網(wǎng)上看到的所有帶有音頻描述的內(nèi)容都是這樣的。例如,BBC iPlayer 提供了一些此類內(nèi)容,但視頻播放器無法控制相對音量,也無法關(guān)閉音頻描述——您只能觀看節(jié)目的單獨描述版本或非描述版本。HTML5 的登場

HTML5 視頻規(guī)范確實提供了 audioTracks 對象,這使得實現(xiàn)開關(guān)按鈕并分別控制音頻和視頻音量成為可能。但它的瀏覽器支持幾乎不存在——在撰寫本文時,只有 IE10 支持此功能。無論如何,我的客戶想要的是一個單獨文件中的音頻描述,可以將其添加到視頻中,而無需創(chuàng)建單獨的版本,并且無需使用專用軟件即可輕松制作。當(dāng)然,它必須在相當(dāng)多的瀏覽器中運行。所以我的下一個想法是使用 MediaController,這是 HTML5 音頻和視頻的一項功能,允許您同步多個來源。但是,對它的瀏覽器支持同樣很少——在撰寫本文時,只有 Chrome 支持此功能。但是您知道——即使沒有這種支持,同時啟動兩個媒體文件顯然也不是問題,只是需要保持同步。那么,我們能否使用現(xiàn)有的、廣泛實現(xiàn)的功能來實現(xiàn)這一點呢?視頻事件

視頻 API 提供了許多我們可以掛鉤的事件,這些事件應(yīng)該可以使音頻播放與視頻事件同步:

  • “播放”事件(視頻播放時觸發(fā))。
  • “暫停”事件(視頻暫停時觸發(fā))。
  • “結(jié)束”事件(視頻結(jié)束時觸發(fā))。
  • “timeupdate”事件(視頻播放時持續(xù)觸發(fā))。

“timeupdate”事件非常關(guān)鍵。它觸發(fā)的頻率沒有指定,實際上差異很大——但作為一個粗略的整體平均值,它相當(dāng)于每秒 3-5 次,這足以滿足我們的目的。我見過類似的方法來嘗試同步兩個視頻文件,但這并不特別成功,因為即使是很小的差異也很明顯。但是音頻描述通常不需要如此精確地同步——無論哪種方式,100 毫秒的延遲都是可以接受的——而且播放音頻文件對瀏覽器的負(fù)擔(dān)要小得多。因此,我們只需要使用現(xiàn)有的視頻事件來將音頻和視頻播放鎖定在一起:

  • 視頻播放時,播放音頻。
  • 視頻暫停時,暫停音頻。
  • 視頻結(jié)束時,同時暫停視頻和音頻。
  • 時間更新時,如果音頻時間與視頻時間不同,則將音頻時間設(shè)置為與視頻時間匹配。

經(jīng)過一番試驗,我發(fā)現(xiàn)通過比較以秒為單位的時間可以獲得最佳效果,如下所示:

if(Math.ceil(audio.currentTime) != Math.ceil(video.currentTime)) {
  audio.currentTime = video.currentTime;
}

這看起來違反直覺,起初我以為我們需要盡可能精確的數(shù)據(jù),但事實似乎并非如此。通過使用視頻音軌的文字音頻副本(即音頻和視頻都產(chǎn)生相同的聲音)進行測試,很容易聽到同步效果好壞。根據(jù)這個基礎(chǔ)進行實驗,我發(fā)現(xiàn)四舍五入數(shù)字比不四舍五入得到更好的同步效果。因此,這是最終腳本。如果瀏覽器支持 MediaController,我們只需使用它,否則我們將實現(xiàn)手動同步,如下所述:

var video = document.getElementById('video');
var audio = document.getElementById('audio');

if(typeof(window.MediaController) === 'function') {
  var controller = new MediaController();
  video.controller = controller;
  audio.controller = controller;
} else {
  controller = null;
}

video.volume = 0.8;
audio.volume = 1;

video.addEventListener('play', function() {
  if(!controller && audio.paused) {
    audio.play();
  }
}, false);

video.addEventListener('pause', function() {
  if(!controller && !audio.paused) {
    audio.pause();
  }
}, false);

video.addEventListener('ended', function() {
  if(controller) {
    controller.pause();
  } else {
    video.pause();
    audio.pause();
  }
}, false);

video.addEventListener('timeupdate', function() {
  if(!controller && audio.readyState >= 4) {
    if(Math.ceil(audio.currentTime) != Math.ceil(video.currentTime)) {
      audio.currentTime = video.currentTime;
    }
  }
}, false);

請注意,MediaController 本身僅通過腳本定義,而可以使用靜態(tài)“mediagroup”屬性定義控制器:

<video mediagroup="foo"></video> ... <audio mediagroup="foo"> ... </audio>

如果我們這樣做,那么它將在 Chrome 中無需 JavaScript 即可工作。它將同步媒體源,但用戶無法控制音頻(包括無法將其關(guān)閉),因為瀏覽器不知道音頻代表什么。在這種情況下,最好將音頻編碼到視頻中,因為然后它可以出現(xiàn)在 audioTracks 對象中,瀏覽器可以識別它并能夠提供本機控件。但是由于我們沒有 audioTracks 數(shù)據(jù),所以這是一個無關(guān)緊要的問題!因此,如果腳本不可用,音頻將根本無法播放。這是最終演示,它可以在任何最新版本的 Opera、Firefox、Chrome、Safari 或 IE9 或更高版本中運行:- 音頻描述演示

當(dāng)然,這只是一個簡單的概念驗證演示——沒有初始功能檢測,它只具有本機“controls”屬性提供的基本控件。對于正確的實現(xiàn),它需要自定義控件,以提供(除其他外)一個開關(guān)音頻的按鈕和單獨的音量滑塊。界面也應(yīng)該可以通過鍵盤訪問,這在某些瀏覽器的本機控件中并非如此。它還需要正確處理緩沖——實際上,如果您搜索到視頻已預(yù)加載的點之后,音頻將繼續(xù)自由播放,直到視頻加載足夠多以將其重新同步為止。我還想提一下,描述本身幾乎達不到專業(yè)標(biāo)準(zhǔn)!那是您可以聽到我的聲音,使用 Audacity 錄制和轉(zhuǎn)換。但就是這樣,我認(rèn)為它有效地演示了這種方法的技術(shù)門檻有多低。我不必編輯視頻,而且我用免費軟件在一小時內(nèi)制作了音頻。作為一個概念證明,我認(rèn)為它非常成功——我相信我的客戶會非常滿意!關(guān)于 HTML5 視頻的可訪問音頻描述的常見問題解答 (FAQ)

HTML5 視頻中可訪問音頻描述的重要性是什么?

可訪問音頻描述在使 HTML5 視頻更具包容性和用戶友好性方面發(fā)揮著至關(guān)重要的作用。它們提供了視覺信息的聽覺等效項,這對視力障礙用戶尤其有益。這些描述敘述了主要音軌無法理解的重要視覺細(xì)節(jié)。通過加入可訪問的音頻描述,內(nèi)容創(chuàng)作者可以確保他們的視頻能夠被更廣泛的受眾訪問,從而促進數(shù)字包容性。

如何在我的 HTML5 視頻中添加音頻描述?

將音頻描述添加到 HTML5 視頻包括幾個步驟。首先,您需要創(chuàng)建一個單獨的音頻軌道來描述視頻的視覺元素。這可以使用各種音頻編輯軟件來完成。一旦音頻描述軌道準(zhǔn)備就緒,您可以使用帶有設(shè)置為“descriptions”的 kind 屬性的 元素將其添加到您的 HTML5 視頻中。這將確保音頻描述軌道被識別并與視頻一起播放。

為什么我的 HTML5 視頻無法播放?

您的 HTML5 視頻無法播放可能有幾個原因。這可能是由于視頻文件本身的問題,例如未正確編碼。這也可能是由于 Web 瀏覽器或視頻播放器不支持視頻格式的問題。要進行故障排除,請嘗試在不同的瀏覽器或不同的設(shè)備上播放視頻。如果問題仍然存在,您可能需要檢查視頻文件并確保其格式受 HTML5 支持。

HTML5 視頻支持哪些常用格式?

HTML5 視頻支持幾種常見的視頻格式,包括 MP4、WebM 和 Ogg。MP4 格式在所有主要瀏覽器和設(shè)備中都得到廣泛支持,使其成為網(wǎng)絡(luò)視頻的熱門選擇。WebM 和 Ogg 是開源格式,也得到廣泛支持,盡管它們可能并非在所有瀏覽器中都能正常工作。

如何修復(fù)“找不到 HTML5 視頻文件”錯誤?

“找不到 HTML5 視頻文件”錯誤通常發(fā)生在瀏覽器找不到 <video></video> 元素的 source 屬性中指定的視頻文件時。要修復(fù)此錯誤,請確保 source 屬性中的文件路徑正確,并且視頻文件位于指定的路徑中。如果文件路徑正確,請檢查視頻文件是否采用 HTML5 和瀏覽器支持的格式。

如何使我的 HTML5 視頻具有響應(yīng)性?

要使您的 HTML5 視頻具有響應(yīng)性,您可以使用 CSS 將視頻的寬度設(shè)置為 100%,高度設(shè)置為 auto。這將確保視頻按比例放大或縮小以適應(yīng)其容器的寬度,使其能夠響應(yīng)不同的屏幕尺寸。

我可以向我的 HTML5 視頻添加字幕或旁白嗎?

是的,您可以使用帶有設(shè)置為“captions”或“subtitles”的 kind 屬性的 元素向您的 HTML5 視頻添加字幕或旁白。您需要創(chuàng)建一個包含字幕或旁白的 WebVTT 文件,然后在 元素的 src 屬性中引用此文件。

如何控制我的 HTML5 視頻的播放?

HTML5 提供了幾種內(nèi)置的視頻播放控件,包括播放、暫停、音量和全屏??梢酝ㄟ^向 <video></video> 元素添加 controls 屬性來啟用這些控件。此外,您可以使用 JavaScript 創(chuàng)建自定義控件和交互。

我可以在我的網(wǎng)站上嵌入 HTML5 視頻嗎?

是的,您可以使用 <video></video> 元素在您的網(wǎng)站上嵌入 HTML5 視頻。您需要使用 src 屬性指定視頻文件的來源,還可以添加可選屬性(如 controls、autoplay 和 loop)來自定義視頻播放。

使用 HTML5 進行視頻播放的好處是什么?

HTML5 為視頻播放提供了許多好處。它支持多種視頻格式,提供內(nèi)置的視頻播放控件,并允許添加諸如字幕和音頻描述之類的輔助功能。此外,HTML5 視頻可以具有響應(yīng)性,確保它們在所有設(shè)備和屏幕尺寸上看起來都很好。最后,由于 HTML5 是 Web 標(biāo)準(zhǔn),因此所有現(xiàn)代 Web 瀏覽器都支持它,無需額外的插件或軟件。

以上是HTML5視頻的可訪問音頻說明的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機制通過標(biāo)記-清除算法自動管理內(nèi)存,以減少內(nèi)存泄漏風(fēng)險。引擎從根對象出發(fā)遍歷并標(biāo)記活躍對象,未被標(biāo)記的則被視為垃圾并被清除。例如,當(dāng)對象不再被引用(如將變量設(shè)為null),它將在下一輪回收中被釋放。常見的內(nèi)存泄漏原因包括:①未清除的定時器或事件監(jiān)聽器;②閉包中對外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。V8引擎通過分代回收、增量標(biāo)記、并行/并發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時間。開發(fā)時應(yīng)避免不必要的全局引用、及時解除對象關(guān)聯(lián),以提升性能與穩(wěn)定性。

如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基于Promise的第三方庫,語法簡潔且功能強大,支持async/await、自動JSON轉(zhuǎn)換、攔截器等,推薦用于簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基于Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助于編寫更穩(wěn)定可靠的代碼。

React與Angular vs Vue:哪個JS框架最好? React與Angular vs Vue:哪個JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個JavaScript框架最好?答案是根據(jù)需求選擇最適合的。1.React靈活自由,適合需要高度定制、團隊有架構(gòu)能力的中大型項目;2.Angular提供完整解決方案,適合企業(yè)級應(yīng)用和長期維護的大項目;3.Vue上手簡單,適合中小型項目或快速開發(fā)。此外,是否已有技術(shù)棧、團隊規(guī)模、項目生命周期及是否需要SSR也都是選擇框架的重要因素??傊?,沒有絕對最好的框架,適合自己需求的就是最佳選擇。

JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本周的JavaScript新聞!本周我們將重點關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強大的開發(fā)者工具。讓我們開始吧!Oracle與Deno的商標(biāo)之爭Oracle試圖注冊“JavaScript”商標(biāo)的舉動引發(fā)爭議。Node.js和Deno的創(chuàng)建者RyanDahl已提交請愿書,要求取消該商標(biāo),他認(rèn)為JavaScript是一個開放標(biāo)準(zhǔn),不應(yīng)由Oracle

立即在JavaScript中立即調(diào)用功能表達式(IIFE) 立即在JavaScript中立即調(diào)用功能表達式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義后立即執(zhí)行的函數(shù)表達式,用于變量隔離和避免污染全局作用域。它通過將函數(shù)包裹在括號中使其成為表達式,并緊隨其后的一對括號來調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量沖突,防止多個腳本間的命名重復(fù);2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見;3.模塊化代碼,便于初始化工作而不暴露過多變量。常見寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達式、結(jié)

處理諾言:鏈接,錯誤處理和承諾在JavaScript中 處理諾言:鏈接,錯誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機制,理解鏈?zhǔn)秸{(diào)用、錯誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。1.鏈?zhǔn)秸{(diào)用通過.then()返回新Promise實現(xiàn)異步流程串聯(lián),每個.then()接收上一步結(jié)果并可返回值或Promise;2.錯誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,并可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個完成即返回)和Promise.allSettled()(等待所有完成)

什么是緩存API?如何與服務(wù)人員使用? 什么是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗。1.它允許開發(fā)者手動存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個緩存;4.通過ServiceWorker監(jiān)聽fetch事件實現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用于離線支持、加快重復(fù)訪問速度、預(yù)加載關(guān)鍵資源及后臺更新內(nèi)容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機制的區(qū)別。

See all articles