頻是網(wǎng)頁承載內(nèi)容很重要的一個元素,也是必不可少的網(wǎng)頁表現(xiàn)形式(圖、文、表、視、音)之一。曾經(jīng)網(wǎng)頁要想播放視頻、制作游戲,必須得用第三方插件flash。不僅編寫代碼要使用額外的語言,瀏覽器也必須得裝第三方插件,非常不方便。隨著html5標準逐漸普及,移動端、pc端開始拋棄flash,如今幾乎所有的瀏覽器都使用html5來制作視頻。
目標
flash是Adobe公司其中之一的產(chǎn)品。它發(fā)起于W3C與WHATWG的第五代web標準之爭,它撿了個大便宜,乘機定義網(wǎng)頁媒體標準。
W3C與WHATWG的第五代web標準之爭
flash填補了當時網(wǎng)頁只有文字和圖片的單調(diào)世界,將媒體(視頻、音頻、游戲)引入了網(wǎng)頁,將網(wǎng)頁帶進多彩的世界。
Flash能夠用僅僅十幾K到幾百K的體積,呈現(xiàn)出放大也不會失真的矢量彩色動圖,甚至還能夠做出足以令人沉迷一整天的Flash小游戲。
火柴人
Flash用第三方插件的身份,幾乎制霸了網(wǎng)頁媒體的標準,讓W3C尷尬不已,甚至從某種程度上說,讓真正的網(wǎng)頁標準推廣受阻。
2010年4月,蘋果CEO公開表示從此蘋果所有產(chǎn)品不再支持flash。flash從此慢慢喪失移動端的市場和地位。
喬布斯支持html5
2012年,安卓宣布不再支持Flash,從此flash徹底失去了移動端市場和地位。
2012年html5標準確立,html5在逐漸制霸移動端的地位時,也直接沖擊了flash僅剩的桌面市場,flash桌面市場的份額在逐步下降。
各大瀏覽器逐步默認禁用Flash,現(xiàn)2019年幾乎都全部禁用。
默認禁用Flash
Adobe將在2020年停止開發(fā)和更新flash。
2020年停止開發(fā)和更新flash
Flash以第三方插件的身份,做著平臺該做的事情,但沒有推動行業(yè)標準統(tǒng)一化,反而企圖私立標準。
隨著功能的增多,能解碼編碼H.264,能進行3D渲染,能播放7.1聲道環(huán)繞聲等,功能集于一身變得臃腫,效率變得低下。
Flash非常不安全。Flash能夠運行相當復雜的代碼,這讓Flash非常容易被滲透。加上Adobe在安全方面的不上心,這令Flash安全問題頻發(fā)。
Flash很不穩(wěn)定。作為一個插件,它自身頻頻崩潰也就罷了,還經(jīng)常拉著瀏覽器乃至操作系統(tǒng)一起殉情。
Flash加劇了手機的耗電量。
作用是在 HTML 頁面中嵌入視頻元素。Video定義視頻,比如電影片段或其他視頻流。
視頻播放
有四個是必須的屬性:src、controls、width、height屬性。
視頻播放代碼
<video> 元素支持三種視頻格式: MP4, WebM, 和 Ogg。
<source> 元素可以鏈接不同格式的視頻文件。瀏覽器將使用第一個可識別的格式。
支持多格式的視頻
video標簽體系
在QWebEngineView中播放HTML視頻,可以使用HTML5的video元素。首先,確保你已經(jīng)加載了包含視頻標簽的HTML頁面。然后,在QWebEngineView中執(zhí)行以下步驟:
1. 獲取QWebEnginePage對象:
```cpp
QWebEnginePage *page = view->page();
```
2. 注冊一個JavaScript回調(diào)函數(shù)來處理視頻事件:
```cpp
QObject::connect(page, &QWebEnginePage::loadFinished, [=](bool ok) {
if (ok) {
page->runJavaScript("document.getElementsByTagName('video')[0].addEventListener('ended', function() { window.videoEnded(); });");
}
});
```
這個示例中,我們注冊了一個名為`videoEnded()`的JavaScript函數(shù)來處理視頻結(jié)束事件。
3. 在C++代碼中定義一個槽函數(shù)來處理視頻結(jié)束事件:
```cpp
public slots:
void handleVideoEnded();
```
4. 將槽函數(shù)與JavaScript回調(diào)函數(shù)關(guān)聯(lián)起來:
```cpp
QObject::connect(page, &QWebEnginePage::javaScriptWindowObjectCleared, [=]() {
page->mainFrame()->addToJavaScriptWindowObject("window", this);
});
```
5. 在槽函數(shù)中實現(xiàn)邏輯:
```cpp
void MyClass::handleVideoEnded()
{
// 處理視頻結(jié)束事件的邏輯
}
```
6. 在JavaScript中調(diào)用C++槽函數(shù):
```javascript
function videoEnded() {
window.videoEnded();
}
```
通過這些步驟,你就可以在QWebEngineView中播放和處理HTML視頻了。請注意,這里只提供了基本的示例,具體實現(xiàn)可能需要根據(jù)你的具體需求進行調(diào)整。
、HTML代碼如下:
<div id="player"></div>
二、JavaScript代碼如下:
<script src="http://cdn.jsdelivr.net/npm/xgplayer/browser/index.js" charset="utf-8"></script> <script src="http://cdn.jsdelivr.net/npm/xgplayer-flv.js/browser/index.js" charset="utf-8"></script> <script type="text/javascript"> new window.FlvJsPlayer({ id: 'player', isLive: false, playsinline: true, url: '/test/test.flv', autoplay: true, height: window.innerHeight, width: window.innerWidth }); </script>
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。