92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

首頁

簡單講一下vue生命周期 與

前端達人

Vue組件實例在創建、更新和銷毀過程中,會依次觸發一些鉤子函數,這些鉤子函數稱為Vue生命周期函數。Vue的生命周期分為四個階段:創建階段、掛載階段、更新階段和銷毀階段。

  1. 創建階段:

在創建階段,Vue實例正在被創建,這個階段中包含了實例化、數據觀測、事件/鉤子初始化等過程。具體包括以下鉤子函數:

  • beforeCreate: 在實例剛被創建之后,數據觀測 (data observer) 和 event/watcher 事件配置之前被調用。
  • created: 實例已經完成數據觀測 (data observer),屬性和方法的運算,watch/event 事件回調,但還沒有開始 DOM 操作??梢栽L問到computed等屬性。
  1. 掛載階段:

在這個階段,Vue實例將模板渲染成真實的DOM并進行掛載到頁面上。具體包括以下鉤子函數:

  • beforeMount: 在模板編譯/掛載之前被調用。
  • mounted: el被新創建的 vm.$el 替換,并掛載到實例上去之后調用該鉤子函數,此時組件已經出現在頁面中。
  1. 更新階段:

在這個階段,當Vue實例的數據變化時,它會重新渲染虛擬DOM并更新到頁面上。具體包括以下鉤子函數:

  • beforeUpdate: 數據更新時調用,發生在虛擬DOM重新





藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~

希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 



分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

簡單實用layui 實現前端換膚功能

前端達人

使用layui實現前端換膚功能可以通過以下幾個步驟完成:

  1. 安裝layui:我們需要從官方網站下載安裝layui。你可以在https://www.layui.com/下載最新版本。

  2. 引入樣式文件:在HTML頁面中引入需要的樣式文件。我們可以使用layuicss提供的樣式表來實現各種外觀效果。如果您需要自定義樣式,請創建自己的CSS文件,并在HTML中引入。

  3. 創建主題顏色列表:我們需要創建一個包含所有可用主題顏色的列表。您可以使用數組或JSON對象來創建此列表。例如:

javascript復制代碼
var themeColors = [ {name: '默認', color: '#009688'}, {name: '橙色', color: '#FFB800'}, {name: '墨綠', color: '#393D49'}, {name: '紫色', color: '#800080'}, {name: '深藍', color: '#285FD3'} ];
  1. 配置皮膚切換組件:在JavaScript代碼中配置皮膚切換組件。您可以使用layui提供的switch組件或其它插件。例如:
javascript復制代碼
layui.use('colorpicker', function(){ var colorpicker = layui.colorpicker; // 初始化顏色選擇器 colorpicker.render({ elem: '#theme-color-picker', colors





藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~

希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 



分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司

vue 簡介與使用

前端達人

Vue.js是一款非常流行的JavaScript框架,用于構建單頁Web應用程序(SPA)。它的設計目標是簡單、靈活和易于使用。Vue.js提供了許多有用的功能,可以幫助開發人員更輕松地構建響應式、動態的用戶界面。在本文中,我們將介紹Vue.js的基礎知識,以及如何使用Vue.js來創建一個簡單的Web應用程序。

首先,讓我們來看一下Vue.js的核心思想。Vue.js采用了MVVM(Model-View-ViewModel)的架構模式。這種模式將應用程序分為三個部分:模型(Model)、視圖(View)和視圖模型(ViewModel)。模型表示應用程序的數據,視圖表示UI,而視圖模型則是將兩者鏈接起來的橋梁。Vue.js的核心就是它的響應式系統。當模型的狀態發生改變時,視圖會自動更新,反之亦然。這使得開發人員可以更加專注于業務邏輯的實現,而不需要手動處理DOM操作。

接下來,讓我們看一下Vue.js的基礎語法。Vue.js通過指令(Directive)來擴展HTML。指令以v-開頭,并且在表達式中使用。例如,v-bind指令用于將一個屬性綁定到表達式上,v-model指令用于雙向綁定表單元素和應用程序狀態之間的數據。Vue.js還提供了許多其他指令,


一、核心概念

  1. 模板語法:Vue.js使用了一種類似于HTML的模板語法來聲明渲染和組合DOM元素。模板語法被稱為Vue指令,可以通過{{ }}和v-前綴在模板中使用。其中{{ }}用于文本插值,而v-則用于Vue.js提供的各種指令。

  2. 數據綁定:Vue.js的核心是響應式數據綁定系統,它能夠自動跟蹤并響應數據對象和視圖之間的變化。當數據發生變化時,Vue會立即更新視圖以反映這些變化。

  3. 組件化:Vue.js允許我們將UI分解為可重用和獨立的組件。每個組件都有自己的狀態和行為,并且可以與其他組件組合使用。這種組件化方法使得代碼更容易維護、測試和復用。

  4. 生命周期鉤子函數:Vue.js提供了一組生命周期鉤子函數,在不同階段執行自定義邏輯。這些鉤子函數包



藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~

希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 



分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

關于layui的簡介與使用

前端達人

layui是一款基于jQuery的前端UI框架,它的設計理念是“零門檻”,使得開發者可以快速地構建出美觀、易用的界面。下面將從以下幾個方面介紹layui框架的使用。

1. 安裝和引入

你可以從layui官網下載最新版本的layui壓縮包,也可以使用npm進行安裝。在HTML文件中,只需要引入layui.js和layui.css兩個文件即可開始使用:

    
html復制代碼
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>My Webpage</title> <link rel="stylesheet" href="path/to/layui/css/layui.css"> </head> <body> <script src="path/to/layui/layui.js"></script> </body> </html>

2. 常用組件

layui提供了許多常用的UI組件,例如按鈕、表單、彈窗、選項卡等。這些組件可以通過簡單的html標簽和屬性來創建。例如,如果您想要創建一個按鈕,只需要使用以下代碼:

    
html復制代碼
<button class="layui-btn">按鈕</button>

同時,layui還提供了一些特殊類型的按鈕,如次要按鈕、禁用按鈕、圓角按鈕等。

3. 自定義樣式

layui提供了一套默認的主題風格,但是如果您想要自定義樣式,layui同樣提供了很好的支持。您可以通過修改layui.css文件或者使用自定義CSS覆蓋默認樣式,來實現您想要的效果。



layui 是一款基于 jQuery 的前端 UI 框架,它具有簡潔、易用和高效的特點,非常適合快速開發響應式界面。下面是使用 layui 框架的示例。

首先,需要在 HTML 文件中引入 layui 的樣式文件和腳本文件:

    
復制代碼
<!-- 引入樣式文件 --> <link rel="stylesheet" href="https://cdn.staticfile.org/layui/2.5.6/css/layui.min.css"> <!-- 引入腳本文件 --> <script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.staticfile.org/layui/2.5.6/layui.all.min.js"></script>

接著,在 HTML 文件中編寫相應的結構和內容,并使用 layui 提供的組件進行布局和樣式設置。例如,可以使用 layui 的表格組件來展示數據:

    
復制代碼
<table class="layui-table"> <thead> <tr> <th>姓名</th> <th>年齡</th> <th>性別</th> </tr> </thead> <tbody> <tr> <td>張三</td> <td>20</td> <td></td> </tr> <tr> <td>李四</td> <td>22</td> <td></td> </tr> <tr> <td>王五</td> <td>21</td> <td></td> </tr> </tbody> </table>

除了表格組件,layui 還提供了很多其他的組件,如按鈕、輸入等...


藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 

分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

前端直接生成GIF動態圖實踐

前端達人

前言

去年在博客中發了兩篇關于GIF動態生成的博客,GIF圖像動態生成-JAVA后臺生成基于FFmpeg的Java視頻Mp4轉GIF初探,在這兩篇博客中都是采用JAVA語言在后臺進行轉換。使用JAVA的同學經過自己的改造和開發也可以應用在項目上。前段時間有朋友私下問,有沒有不使用Java,甚至不依賴于后臺的,直接基于前端的GIF動圖生成,有沒有這種技術方案。博主個人對前端不是很擅長,后來也是在github上自習搜索了一番,發現了一個比較有意思的,可以直接在前端使用的gif動態圖生成組件。本文重點聊聊gif.js組件,介紹一下gif這個組件的基本原理,在生產中如何進行使用。

一、GIF.JS簡介

1、gif.js是什么

gif.js在github的地址是:gif.js,打開它的官方網站,可以看到如下的介紹:

作為一款成熟的插件,在github上有4.5k的star,足以說明它的受歡迎程度。而且gif.js采用的是寬松的MIT協議,您可以隨意下載這個插件,再此基礎之上改造成自己的工具供別人使用。使用git clone將工程下載到本地后,可以看到gif.js的初始目錄。

2、gif.js基礎依賴

打開工程目錄的package.json文件,這里定義了文件基礎依賴。打開后可以看到如下的定義信息:


  1. {
  2. "name": "gif.js",
  3. "version": "0.2.0",
  4. "description": "JavaScript GIF encoding library",
  5. "author": "Johan Nordberg <code@johan-nordberg.com>",
  6. "main": "index.js",
  7. "repository": "https://github.com/jnordberg/gif.js.git",
  8. "devDependencies": {
  9. "browserify": "^13.1.1",
  10. "coffeeify": "^2.1.0",
  11. "exorcist": "^0.4.0",
  12. "uglify-js": "^2.7.5"
  13. },
  14. "scripts": {
  15. "prepublish": "./bin/build"
  16. },
  17. "browser": "./dist/gif.js",
  18. "keywords": [
  19. "gif",
  20. "animation",
  21. "encoder"
  22. ],
  23. "license": "MIT",
  24. "readmeFilename": "README.md"
  25. }

3、關鍵基礎類解析

在GIFEncoder.js文件中定義了gif.js對象了基本一些屬性,在上面的目錄中打開目標文件后,可以看到屬性定義方法:

核心方法API說明:您可以使用構造方法或者使用setOptions()方法類設置相關的屬性。詳情可以看下面的說明:

Name

Default

Description

repeat

0

repeat count, -1 = no repeat, 0 = forever

quality

10

pixel sample interval, lower is better

workers

2

number of web workers to spawn

workerScript

gif.worker.js

url to load worker script from

background

#fff

background color where source image is transparent

width

null

output image width

height

null

output image height

transparent

null

transparent hex color, 0x00FF00 = green

dither

false

dithering method, e.g. FloydSteinberg-serpentine

debug

false

whether to print debug information to console

二、gif.js實戰

下面采用具體的代碼進行一個實際例子的實踐。

1、新建html工程

這里以video2.html為例,在這個工程中引入了gif.js和gif.worker.js。工程目錄如下,Jquery.js作為非必須依賴。


  1. <head>
  2. <meta charset="utf-8">
  3. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  4. <title>視頻轉GIF</title>
  5. <meta name="description" content="Full-featured JavaScript GIF encoder that runs in your browser.">
  6. <meta name="keywords" content="gif, encoder, animation, browser, unicorn">
  7. <meta name="viewport" content="width=device-width">
  8. <meta property="og:title" content="gif.js">
  9. <meta property="og:url" content="http://jnordberg.github.io/gif.js">
  10. <meta property="og:description" content="Full-featured JavaScript GIF encoder that runs in your browser.">
  11. <meta property="og:type" content="website">
  12. <link rel="stylesheet" href="main.css">
  13. <script src="gif.js?v=3"></script>
  14. <script src="video.js?v=3"></script>
  15. </head>

2、定義gif對象


  1. gif = new GIF({
  2. workers: 4,
  3. workerScript: 'gif.worker.js',
  4. width: 600,
  5. height: 337
  6. });

定義好了gif對象之后,還需要定義相應的響應事件,如下代碼所示:


  1. sample.addEvent('change', sampleUpdate);
  2. button.addEvent('click', function() {
  3. video.pause();
  4. video.currentTime = 0;
  5. gif.abort();
  6. gif.frames = [];
  7. return video.play();
  8. });
  9. gif.on('start', function() {
  10. return startTime = now();
  11. });
  12. gif.on('progress', function(p) {
  13. return info.set('text', "rendering: " + (Math.round(p * 100)) + "%");
  14. });
  15. gif.on('finished', function(blob) {
  16. var delta, img;
  17. img = document.id('result');
  18. img.src = URL.createObjectURL(blob);
  19. delta = now() - startTime;
  20. console.log("done in\n" + ((delta / 1000).toFixed(2)) + "sec,\nsize " + ((blob.size / 1000).toFixed(2)) + "kb");
  21. return info.set('text', "done in\n" + ((delta / 1000).toFixed(2)) + "sec,\nsize " + ((blob.size / 1000).toFixed(2)) + "kb");
  22. });

代碼有點長,這里不一一列出,需要源代碼的可以私信。

3、最后效果

使用nginx進行靜態發布后,可以看到如下的效果:

點擊執行按鈕后,在網頁下面生成gif動態圖,如下所示:

實際生成的動態圖會根據原始視頻的大小,畫質質量,清晰度等因素影響,執行時間也會有影響。在實際項目中需要根據需要調整相應的參數才可以。

4、執行分析

以完成后渲染動圖為例講解合成過程,

可以在變量區看到客戶端開啟了多個Worker進行并行處理。

在這里進行數據合并處理,如下:

最終合成gif圖片,在html中進行dom渲染。

三、總結

以上就是本文的主要內容,本文重點介紹了一款前端基于Javascript的gif.js生成插件,分析了它的源碼結構,最后通過一個實例進行了案例講解,幫您快速的了解和掌握這個組件,文章行文倉促,如有錯誤,請留言交流。



藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~

希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 



分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司

vite.config.js配置-解決跨域問題,以及@vitejs/plugin-vue等報錯

前端達人

  • 開發環境

    在配置的過程中踩了很多坑,還是太菜,有些東西弄不明白什么意思。

    運行項目時的報錯可直接到最下面看vite.config.js文件的注釋

    目前項目用到的模塊并不多,package.json文件如下

    
                                
    1. {
    2. "name": "PsWebV3Abb",
    3. "version": "0.0.0",
    4. "scripts": {
    5. "dev": "vite",
    6. "build": "vite build"
    7. },
    8. "dependencies": {
    9. "@vitejs/plugin-vue": "^1.0.0",
    10. "axios": "^1.2.1",
    11. "element-plus": "^2.2.26",
    12. "vite": "^4.0.3",
    13. "vue": "^3.0.4",
    14. "vue-router": "^4.1.5"
    15. },
    16. "devDependencies": {
    17. "@vue/compiler-sfc": "^3.0.4"
    18. }
    19. }

    其實主要還是這些模塊的版本兼容問題

    vite的版本最開始是1.0.0,后面很多地方搞不下去了才卸載了重裝新的版本

    當然還是建議仔細閱讀一下官方文檔,其實很多重要的點都講的很清楚,只不過是遇到問題的時候才會注意到。官方文檔請移步這里

    下面簡單的說一下這個文件,

    首先是文件的位置,放在其他位置是無效的:

            

    運行vite項目的時候,就會自動解析根目錄下面的這個文件

    我這里的主要目的還是解決項目運行時的跨域問題

    下面是封裝的一個簡單的請求示例,其中service是一個封裝好的axios實例,可以指定一下baseurl,以及請求和響應攔截。

    其他的API都可以像這樣通過給getItem添加方法的方式實現

    
                                
    1. import service from '../utils/requests.js'
    2. const getItem = {}
    3. getItem.getppitem = function (params) {
    4. return service.get('api/AutoSimple/getdata', params)
    5. }
    6. export default getItem

    vite.config.js 具體的配置如下

    
                                
    1. import { defineConfig } from 'vite'
    2. import vue from '@vitejs/plugin-vue'
    3. // import eslintPlugin from 'vite-plugin-eslint'
    4. // https://vitejs.dev/config/
    5. // 這個配置文件可能出現的問題:
    6. // 首先是此文件放置的位置
    7. // 1.未安裝 @vitejs/plugin-vue
    8. // 處理方法:npm i @vitejs/plugin-vue@1.0.0
    9. // 由于本項目vite版本1.0限制,只能用了plugin-vue的1.0.0版本,但在運行的時候又導致了問題2,
    10. // 于是直接卸載vite重新安裝最新的3.0.4,這個版本直接install plugin-vue仍然不行,還是要用1.0.0版本
    11. // 2.顯示不存在函數 defineConfig
    12. // 在此之后npm run dev,又報了一個錯:Cannot find module 'node:path'
    13. // 在掘金上看到是和node版本有關,更新后就可以正常運行了
    14. export default defineConfig({
    15. plugins: [
    16. vue()
    17. // 檢查代碼格式
    18. // eslintPlugin({
    19. // include: ['src/**/*.js', 'src/**/*.vue', 'src/*.js', 'src/*.vue']
    20. // })
    21. ],
    22. server: {
    23. // 默認打開的端口和本地
    24. // host: '0.0.0.0',
    25. port: 3000,
    26. https: false, // 不支持https
    27. proxy: {
    28. '/api': {
    29. target: 'http://10.200.20.80/BARCODESERVICE', // 實際請求地址
    30. changeOrigin: true, // 是否跨域
    31. rewrite: (path) => path.replace(/^\/api/, '') // 對什么類的服務器匹配
    32. },
    33. }
    34. }
    35. })

    生產環境

    在部署生產環境時,又遇到了兩個問題:

    1.公共路徑的問題

    客戶環境是IIS服務器,為了節省端口,在部署的時候選擇在同一個網站下添加多個應用程序的方式,這就使得在部署時,需要添加公共的基礎路徑,這一點在官方文檔中有詳細的說明。

     

    解決方案:

    在package.json中配置

    
                                
    1. "scripts": {
    2. "dev": "vite",
    3. "build": "vite build --base=/PsWebDand/ "
    4. }

    2.跨域無效的問題

    vite.config.js 中的server的proxy無效,此時跨域的問題需要通過在后端服務中配置來解決

    IIS服務器

    
                                
    1. <httpProtocol>
    2. <customHeaders>
    3. <add name="Access-Control-Allow-Headers " value="Content-Type,api_key,Authorization" />
    4. <add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
    5. <add name="Access-Control-Allow-Origin" value="*" />
    6. </customHeaders>
    7. </httpProtocol>
    藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
    希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 

    分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 

    藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

javascript - proxy - 異常: ‘set‘ on proxy: trap returned falsish for property ‘message‘

前端達人

定義 Proxy 代理對象的 set 的時候,
要返回 return true 。

特別是在嚴格模式下,否則,會報錯 'set' on proxy: trap returned falsish for property 'message'

在這里插入圖片描述

# 應該如下

 let handler = { get(obj, property) { }, set(obj, property, value) { return true; } } new Proxy({}, handler); 
        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
文章知識點與官方知識檔案匹配,可進一步學習相關知識





藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~

希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 



分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司

Vue的$emit傳值

前端達人

$emit,父組件傳data給子組件,子組件通過$emit來觸發父組件中綁定在子組件身上的事件,達到改變父組件中的data的方法。下面介紹$emit傳值的幾種方法:

一:$emit傳遞單值

子組件Test.vue:


  1. <template>
  2. <div>
  3. <div>子組件</div>
  4. <button @click="changeFather">點擊我向父組件傳遞參數</button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. methods: {
  10. changeFather() {
  11. this.$emit("changeEvent",'1');
  12. }
  13. }
  14. };
  15. </script>
  16. <style>
  17. </style>

父組件:App.vue


  1. <template>
  2. <div id="app">
  3. <p>這是父組件</p>
  4. <div>{{myString}}</div>
  5. <Test @changeEvent="changeMyString" />
  6. </div>
  7. </template>
  8. <script>
  9. import Test from "./components/Test";
  10. export default {
  11. name: "App",
  12. components: { Test },
  13. data: function() {
  14. return {
  15. myString: ''
  16. };
  17. },
  18. methods: {
  19. changeMyString(val) {
  20. console.log(val);
  21. this.myString=val;
  22. }
  23. }
  24. };
  25. </script>
  26. <style>
  27. #app {
  28. font-family: Avenir, Helvetica, Arial, sans-serif;
  29. -webkit-font-smoothing: antialiased;
  30. -moz-osx-font-smoothing: grayscale;
  31. text-align: center;
  32. color: #2c3e50;
  33. margin-top: 60px;
  34. }
  35. </style>

點擊按鈕效果如圖:

二:$emit傳遞多個值

子組件Test.vue:


  1. <template>
  2. <div>
  3. <div>子組件</div>
  4. <button @click="changeFather">點擊我向父組件傳遞參數</button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. methods: {
  10. changeFather() {
  11. this.$emit("changeEvent",'1','2');
  12. }
  13. }
  14. };
  15. </script>
  16. <style>
  17. </style>

父組件App.vue:


  1. <template>
  2. <div id="app">
  3. <p>這是父組件</p>
  4. <div>{{myString}}</div>
  5. <Test @changeEvent="changeMyString" />
  6. </div>
  7. </template>
  8. <script>
  9. import Test from "./components/Test";
  10. export default {
  11. name: "App",
  12. components: { Test },
  13. data: function() {
  14. return {
  15. myString: ''
  16. };
  17. },
  18. methods: {
  19. changeMyString(val0,val1) {
  20. console.log(val0,val1);
  21. this.myString=val0+val1;
  22. }
  23. }
  24. };
  25. </script>
  26. <style>
  27. #app {
  28. font-family: Avenir, Helvetica, Arial, sans-serif;
  29. -webkit-font-smoothing: antialiased;
  30. -moz-osx-font-smoothing: grayscale;
  31. text-align: center;
  32. color: #2c3e50;
  33. margin-top: 60px;
  34. }
  35. </style>

點擊按鈕,效果如下:

$emit傳遞多個值時,還可以采用數組的形式:

修改子組件Test.vue:


  1. <template>
  2. <div>
  3. <div>子組件</div>
  4. <button @click="changeFather">點擊我向父組件傳遞參數</button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. methods: {
  10. changeFather() {
  11. this.$emit("changeEvent",['1','2']);
  12. }
  13. }
  14. };
  15. </script>
  16. <style>
  17. </style>

父組件App.vue:


  1. <template>
  2. <div id="app">
  3. <p>這是父組件</p>
  4. <div>{{myString}}</div>
  5. <Test @changeEvent="changeMyString" />
  6. </div>
  7. </template>
  8. <script>
  9. import Test from "./components/Test";
  10. export default {
  11. name: "App",
  12. components: { Test },
  13. data: function() {
  14. return {
  15. myString: ''
  16. };
  17. },
  18. methods: {
  19. changeMyString(val) {
  20. console.log(val);
  21. this.myString=val[0]+val[1];
  22. }
  23. }
  24. };
  25. </script>
  26. <style>
  27. #app {
  28. font-family: Avenir, Helvetica, Arial, sans-serif;
  29. -webkit-font-smoothing: antialiased;
  30. -moz-osx-font-smoothing: grayscale;
  31. text-align: center;
  32. color: #2c3e50;
  33. margin-top: 60px;
  34. }
  35. </style>

點擊按鈕,效果如下:

三:子組件通過$emit傳遞給父組件傳遞值,并且父組件有自定義參數時:

子組件Test.vue:


  1. <template>
  2. <div>
  3. <div>子組件</div>
  4. <button @click="changeFather">點擊我向父組件傳遞參數</button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. methods: {
  10. changeFather() {
  11. this.$emit("changeEvent",1,2);
  12. }
  13. }
  14. };
  15. </script>
  16. <style>
  17. </style>

父組件:App.vue


  1. <template>
  2. <div id="app">
  3. <p>這是父組件</p>
  4. <div>{{myString}}</div>
  5. <Test @changeEvent="changeMyString('myParameter',...arguments)" />
  6. </div>
  7. </template>
  8. <script>
  9. import Test from "./components/Test";
  10. export default {
  11. name: "App",
  12. components: { Test },
  13. data: function() {
  14. return {
  15. myString: ''
  16. };
  17. },
  18. methods: {
  19. changeMyString(...args) {
  20. console.log(args);
  21. this.myString=args;
  22. }
  23. }
  24. };
  25. </script>
  26. <style>
  27. #app {
  28. font-family: Avenir, Helvetica, Arial, sans-serif;
  29. -webkit-font-smoothing: antialiased;
  30. -moz-osx-font-smoothing: grayscale;
  31. text-align: center;
  32. color: #2c3e50;
  33. margin-top: 60px;
  34. }
  35. </style>

點擊按鈕,效果圖如下:





藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~

希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 



分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司

vue中播放rtsp流

前端達人

實現vue中播放rtsp視頻流的問題

背景:項目中通過攝像機提供的rtsp流來顯示畫面,但是在編寫項目中,需要將rtsp實時流畫面傳輸到web前端頁面中。于是找了很多方法,都是后臺轉碼轉成rtmp來播放,現在大部分插件和瀏覽器都是支持使用rtmp播放視頻流。而rtsp隨著flash的退出而被復雜化了。網上都是1、通過ffmpeg轉碼后輸出,2、通過攝像機指定的web插件轉碼輔助播放,如海康,大華攝像機;3、還有個猿大師播放器基于猿大師中間件提供的內嵌網頁播放(沒用過,不知道行不行,原本想用現在這個方法行不行的,若不行就用這個猿大師了的)

開始

:
node.js工具
jsmpeg.js文件
npm install rtsp2web

科普了解一下

  1. rtsp2web 是一個依賴 ffmpeg,能實時將傳入的 rtsp 視頻流轉碼成圖像數據并通過 ws 推送到前端的智能工具。
  2. 前端頁面借助 jsmpeg.js 就可以很輕松的實現播放
  3. 同時rtsp2web的特點還有:1、并發,支持同時播放多路視頻2、合并同源,同時播放多個同一個rtsp視頻源時,只會創建一個轉碼推流進程,不會創建多個。3、智能釋放資源,智能檢測當前沒有使用的轉碼推流進程,將其關閉,并釋放電腦資源。

使用

下載ffmpeg(鏈接: https://www.ffmpeg.org/download.html#build-windows

安裝成功以后,你重新打開一個命令行終端,輸入:ffmpeg -h,如果能輸出 ffmpeg 的相關信息出來,則證明你的電腦安裝 ffmpeg 成功。

使用rtsp2web

創建了一個vuecli(vue2)項目,名稱不要起rtsp2web,與src文件夾同級
下創建一個serve文件夾

-|public
    |-favicon.ico
    |-index.html
-|src
-|serve
-|.gittignore
-.....  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在serve下初始化和下載

npm init --yes
npm install rtsp2web  
  • 1
  • 2

在serve下創建index.js

//index.js
const RTSP2web = require('rtsp2web')

//服務端的端口號,端口號可以自定義
const port = 8033
new RTSP2web({
    port
)}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

運行命令:node index.js

前端代碼

在public的index.html中
其中jsmpeg.min.js通過src引入,可以用jsmpeg.js或者jsmpeg.min.js都行

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <!--v  jsmpeg.min.js文件用在這   v-->
    <script src="https://jsmpeg.com/jsmpeg.min.js" charset="utf-8"></script>    
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
  <script>
    var rtsp = 'rtsp://username:password@ip:port/live'
    window.onload = () => {
    //這里的port要與index.js的port保持一致
    new JSMpeg.Player("ws://localhost:8033/rtsp?url="+btoa(rtsp), {
       canvas: document.getElementById("canvas")
    })
  }
  </script>
</html>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

#####在vue頁面中用canvas中播放視頻
如 在App.vue中這樣用:

<template>
  <div id="app">
    <!-- <img alt="Vue logo" src="./assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/> -->
    <canvas id="canvas" style="width: 600px; height: 600px;"></canvas>
  </div>
</template>  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

問題

為什么node index.js之后沒反應?
—檢查端口號是否填寫對應,index.js中的端口要與script里的端口保持一致
|
為什么長時間未顯示圖像?
—需要等待大概1-2分鐘,就會顯示畫面。至于這么長時間未顯示,小弟也不知道啊。。希望大佬指點。。

最后

完事了就,這是我歷經千辛萬苦找到的方法,弄這個vue中播放rtsp搞了好久,技術太拉了我,只能用這些小玩意來搞。原本打算用java或者python通過拉rtsp流解析成rtmp的,奈何能力不足,也懶得思考懶得搞懶得弄,所以擺爛了QAQ
若哪里有講的不妥和使用不當的地方還請您告知一下,萬分感謝大佬指點,小弟深表感謝<抱拳>
-----------------------------------------------------------------------------------------------------------

參考。1


  1. https://zhuanlan.zhihu.com/p/531899593 ??
    藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~
    希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 

    分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 

    藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司。

視頻的傳輸方式【轉】

前端達人

概述

搜索“視頻傳輸協議”,一般會搜出來RTP,RTSP,UDP等等。光看這些協議,可能有些人會覺得奇怪為什么要把udp也往上放一起,rtp不是可以基于udp?!同時,很多文章主要去講解各個協議之間的差異,而沒有從更為宏觀的角度來考慮。本文將結合OSI的分層思路,將不同協議之間的關系都梳理清楚;同時也從視頻傳輸與組網角度進行介紹。
再者,視頻有很多封裝格式,比如m3u8,mp4等;也有很多音視頻編碼格式,比如h264,h265等,那為何有這么多的封裝格式類型和音視頻編碼格式類型呢?一方面是解決存儲的問題;另一方面是支持不同播放器的解析;但更重要的是不同的傳輸協議可以支持的音視頻編碼格式有差異,這也是由于不同的應用場景下形成的歷史原因。

1.流媒體

流媒體(streaming media),是指將一連串的媒體數據包從服務器端發送到客戶端,可以實現邊下邊播,此技術使得數據包可以像流水一樣發送。傳統的方式需要在使用前下載整個文件,存儲到本地后才能進行播放;而流媒體只允許下載一小部分(存在視頻關鍵幀)就能進行播放。

流媒體技術不是一種單一的技術,它將網絡技術、音視頻技術還有終端緩存技術等有機地結合。也就是說,在網絡上要實現流媒體技術,必須要先制作、發布、傳輸和播放等,這需要服務器端、終端以及網絡都要能支持。當前很多的視頻軟件或者網站都是用到了這種技術。歸結下來是:

  • 1.內容的產生。這里是指將視頻源制作成為可以對外發布的視頻格式,以及適合在網絡上傳播的分辨率和碼率。這主要用到了視頻的編解碼技術??紤]的輸出參數,如分辨率、碼率、音視頻編碼格式、封裝格式等都需要結合應用場景和傳輸方式統一考慮。

  • 2.對外發布。這里主要是指能夠支撐服務器對外輸出視頻資源的技術,常見的有各種流媒體網絡傳輸協議技術及其需要服務器端支撐的技術。這里的流媒體網絡傳輸協議比如:

    • HLS
      服務端支持Adobe Flash media server,Nginx,vlc等等。
    • DASH
      服務器端支持Nginx等
    • RTMP
    • Adobe Flash 服務器,Nginx-rtmp
  • 3.組網和傳輸。
    這里的傳輸還得考慮一個概念,是服務器對外主動推數據,還是等待終端到服務器端拉數據,這是兩個完全相反的處理方式。對于組播或者廣播的組網方式,往往采用的是服務器主動對外推送數據;而對于單播來說主要是終端向服務器端主動拉數據。

    這里涉及到的IP組網方式中的傳輸類型有:廣播、單播、組播。

    不管是什么類型的組網方式,在傳輸層就有UDP和TCP。下面也將從OSI等層面講講這些底層傳輸協議之間的關系。

  • 4.視頻播放。這里主要是從終端側角度說,在不同操作系統中能夠進行播放視頻的播放器,比如vlc等,不同的播放器支持對不同類型的視頻數據進行播放。

2.TCP/IP、OSI與視頻傳輸協議之間的關系

從圖中也可以看到IP層(網絡層)的上層是傳輸層,通過TCP和UDP等方式進行數據包的傳輸。
(PS:下圖為網絡中所找https://blog.csdn.net/yaopeng_2005/article/details/7064869)
在這里插入圖片描述
結合上圖,再補一個wiki上的互聯網協議套組圖,一看就更明白了。
在這里插入圖片描述
從上面兩個圖中也可以很清楚地看到,TCP和UDP在接下去的內容有很重要的地位,這里也簡單介紹下,深度知識請自行搜索。

  • 1)TCP(Transmission Control Protocol)傳輸控制協議
    是一種面向連接的、可靠的、基于字節流的傳輸層協議。也就是說,它在收發數據之前,必須先和對方建立可靠的連接。有興趣地可以了解TCP的三次握手過程。當TCP檢測到數據包丟失時,它將限制其數據速率使用率,因此也說TCP是靠譜的,但是對于實時類型的業務,可能不那么適合。
  • 2)UDP(User Datagram Protocol)用戶數據報協議
    是一種簡單的面向數據報的通信協議。UDP只提供數據的不可靠傳遞,它將數據發送出去后,就不保留備份,它僅僅在IP數據報的頭部加入了復用和數據校驗字段。由于不需要多長校驗,UDP的速度比TCP快,但是有數據丟失風險,因此比較適用于實時性要求高的場景,比如實時語音或視頻通話。廣電網絡場景中,以前多用UDP進行傳輸,而且是組播或廣播的方式,這結合組網能夠將流量成本較大地控制下來。
  • 3)IP層(Internet Protocol)
    IP是網絡層的主要協議,將根據源主機和目的主機的地址進行數據傳輸。定義了尋址方法和數據報的封裝結構。其最為復雜的就是尋址和路由了。尋址就是將IP地址分配給各個終端節點,并如何進行劃分和組網。而路由主要是內部和外部網關協議,決定了怎么發送IP數據包。下面提到的組播和廣播等,其實主要是針對IP多播來說的。
  • 4)在不同層之間的數據的術語稱呼
    數據在TCP層稱為流(Stream),數據分組稱為分段(Segment)
    數據在IP層稱為Datagram,數據分組稱為分片(Fragment)
    在UDP中,分組稱為Message

3.組播、單播和廣播

  • 組播(multicast)
    又稱為多點廣播或群播,或多播,主要是指將信息同時傳遞給一組目的地址。消息在每個網絡鏈路上只需傳遞一次,而且只有在鏈路分叉時,消息才會被復制,使用的效率是最高的。也正是因為這個原因,以前的廣電網絡中,針對直播多采用組播方式,流量的傳輸成本明顯降低很多。

  • 單播:
    其實是組播的一種特殊方式,即常規的點到點信息傳遞。如果所有傳輸中是以單播的方式傳遞給多個接收方,必須向每個接收者都發送一份數據副本這么多。

  • 廣播
    其實也算是組播的一種特殊方式,就是一對所有的通信方式,對每一臺主機發出的信號都進行無條件復制并轉發,所有的接收點都可以收到所有信息。

注意,組播一般指的是IP組播,常與RTP等音視頻協議相結合。雖然組播的設計理念很好,但是它需要對網絡內部的狀態比單播要多得多。實際商用中,組播主要應用在較為簡單的、只有單個源斷的情況,如之前提到廣電網絡內部用到的組播方式,UDP組播。

以上是不同類型的IP組播方式,實際在采用中要結合具體情況進行調整。比如,如果非要使用廣播,但是采用的場景不合適,也有可能產生廣播風暴。

組播、廣播、單播也介紹了基本的概念,但是他們與視頻傳輸有什么關系呢?

文章上面也提到了,組播是從IP層面的傳輸策略,而所有的視頻傳輸協議其數據包大部分都經過UDP和TCP,經由IP層進行傳輸到目的地。因此不同的IP傳輸策略與傳輸協議進行結合,就能夠落地到具體的應用場景。

同時需要注意的是,采用組播方式可以通過設置網卡為混雜模式或為多播模式,具體也是根據網卡的特性進行差異處理。如果處理方式不當,比如設置成了廣播,可能會導致在同網絡下,你在播放視頻,然后其他相同網絡下接收端也將有相應的流量,而導致他們的對外服務網口的流量被占滿。

4.視頻傳輸協議

從下圖中可以看到,標紅色的就是大家經常說的視頻傳輸協議。但是從圖中可以看到他們其實是有基于的關系,比如HLS都是基于HTTP進行傳輸,而HTTP在傳輸層都是依賴tcp數據包,再經由ip層進行分發。
在這里插入圖片描述

  • 1)UDP

    • 基于UDP傳輸的視頻數據,比如udp://238.123.45.1:3001,在網絡可達的情況下,即可進行播放。可以采用vlc等播放器進行播放。

    • UDP視頻數據傳輸可以采用單播,組播或廣播的方式,具體采用哪種方式根據具體的組網情況進行控制。

    • 上面也有提到過,廣電網絡中多采用組播的方式進行直播數據傳輸,這也是得益于廣電網絡的專網特性以及視頻源輸出可以控制到單一等特性。

    • UDP的組播大部分是采用MPEG TS流,廣電網絡中很多視頻,其視頻編碼格式也大部分是mepg2

  • 2)RTP
    整個RTP協議包括RTP數據協議和RTP控制協議(RTCP)。此外,這里也將經常一起提的RTSP介紹下。

    • RTP(實時傳輸協議,Real-time Transport Protocol),是一種網絡傳輸協議

    • RTP協議說明了傳遞音頻和視頻的標準數據包的格式。最早是作為多播協議的,后來主要應用在單播中。RTP是創建在UDP協議之上的,主要應用于流媒體、視頻會議等系統業務上。

    • RTP為端到端的數據傳輸提供了時間信息和流同步,但不保證服務質量,而是由服務質量由RTCP。
      在RTP的數據包封裝中,包含了時間戳、標記位、同步源標識等信息。

    • RTP從上層接收到流媒體的數據(如H264),封裝成RTP數據包,并將其發往UDP端口中的偶數端口。

    • RTCP(實時傳輸控制協議,Real-time Transport Control Protocol或RTP Control Protocol)

    • RTP的姐妹協議。RTP使用的是偶數UDP端口,RTCP采用的是RTP下一個端口,也就是下一個奇數的端口。RTCP也是基于UDP進行傳輸的。

    • RTCP本身不做數據傳輸,主要與RTP協作,將視頻媒體數據打包和發送,并定期在流媒體會話參與者之間傳輸控制數據,并為RTP提供QoS反饋,簡單點說是主要保證音視頻的同步。

    • RTCP接收到控制信息后,封裝為RTCP控制包,并發往RTP端口下一個偶數端口。

    • RTSP(實時流協議,Real Time Streaming Protocol)
      RTSP是一種網絡應用協議,主要來創建和控制流媒體服務器與終端之間的會話??刂祁惖恼埱笾饕逿CP協議。

    • 通過RTSP對流媒體數據進行控制和播放,比如進行播放、暫停、快進等操作,它定義了具體的控制消息、操作方法和狀態碼等。

    • 與RTP、RTCP配合,在廣電網絡內部主要應用在點播場景比較多,而直播主要走UDP組播。在互聯網場景下,也有用于直播和點播的,但是相對來說使用較少。

    • 請求的url為:rtsp://testdomain/test.mp4/streamid=0

    • 需要服務器端和客戶端都能夠支持RTSP的控制。一般客戶端采用vlc即可,而服務器端采用Darwin Streaming Server,ffmpeg等建立流媒體服務。

  • 3)RTMP(實時消息協議,Real-Time Messaging Protocol)
    包括RTMP、RTMPT等一系列的協議,Adobe為flash播放器和服務器之間音視頻數據傳輸的協議。

    • RTMP
      1)主要基于TCP協議進行數據包傳輸,默認使用1935端口。
      2)服務器端采用Nginx,支持rtmp模塊的即可支持對外rtmp視頻數據服務。
      3)支持rtmp模塊,可以支持直播rtmp輸出,也能夠支持hls訪問。
      4)RTMP支持mp4,flv等封裝格式的視頻對外輸出
    • RTMPS
      通過SSL加密的RTMP協議
    • RTMPE
      RTMPE是一個加密版本的RTMP,和RTMPS不同的是RTMPE不采用SSL加密,RTMPE加密快于SSL,并且不需要認證管理
    • RTMPT
      采用HTTP封裝以穿透防火墻,通常用80和443端口。
    • RTMFP
      使用UDP進行數據傳輸

4)HTTP
而基于HTTP協議的就更多了,如上圖。如果服務器部署了流媒體的服務,如Nginx等,就可以對外提供視頻播放服務了。

這里也需要說明,視頻的播放一般分為點播和直播,有些協議作為直播的傳輸協議反而是更好的,比如RTMP,時延就比較低,但RTMP做CDN成本相對較高。CDN支持很好的HTTP如果能支持直播,當前也有很多協議能支持通過HTTP的方式實現直播流媒體。

5.自適應流媒體

自適性流媒體(adaptive bitrate streaming,ABS)也叫碼流自適應,是流媒體服務器準備各種碼流的視頻流,所有的視頻碼流都是相同時段完全統一圖像的音視頻數據,客戶端根據網絡情況和CPU使用情況等進行動態調整。

主要有MPEG-DASH、HLS、HDS、MSS等技術方案,這幾個也是上圖中最上層的流媒體傳輸協議技術。通過這些傳輸協議封裝的視頻源,可以支持有多種碼率,并支持播放器客戶端在播放時,根據帶寬情況自動調整碼率以適應用戶的最佳觀看效果——不卡頓,不重新加載等。

  • 1) DASH(MPEG-DASH)
    MPEG-DASH是基于HTTP的自適應碼流方案中唯一國際標準,它采用TCP傳輸協議。
  • 2)HLS
    Apple提出的,將.m3u8作為索引文件,分片格式為ts,支持直播和時移。
  • 3)HDS
    采用支持RTMP和HTTP協議,HTTP協議類似于HLS,也可以叫漸進式下載。
  • 4)MSS
    是微軟提出的,文件切片格式為mp4,索引文件為ism、ismc,也支持直播和時移。

這里也僅僅對碼流自適應技術做了簡單介紹,由于現在這種技術應用相當廣泛,后面將詳細介紹這種技術。

【說明】
文章轉自,華為云社區,作者Higeeon,相關版權解釋權歸原作者所有。https://bbs.huaweicloud.com/blogs/fed3df04b1e011e9b759fa163e330718





藍藍設計建立了UI設計分享群,每天會分享國內外的一些優秀設計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~

希望得到建議咨詢、商務合作,也請與我們聯系01063334945。 



分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設計尊重原作者,文章的版權歸原作者。如涉及版權問題,請及時與我們取得聯系,我們立即更正或刪除。 



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務、UI設計公司、界面設計公司、UI設計服務公司、數據可視化設計公司、UI交互設計公司、高端網站設計公司、UI咨詢、用戶體驗公司、軟件界面設計公司

日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
激情懂色av一区av二区av| 国模冰冰炮一区二区| 日韩丝袜情趣美女图片| 开心九九激情九九欧美日韩精美视频电影| 黄色精品在线观看| 日韩精品免费在线播放| 亚洲国产欧美另类丝袜| 久久免费视频在线| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 日韩精品一区国产麻豆| eeuss鲁片一区二区三区| 欧美日韩精品一区二区视频| 爆操欧美美女| 欧美videosex性欧美黑吊| 色综合综合网| 国产精品白丝jk白祙喷水网站| 色黄视频在线观看| 国产伦精品一区二区三区照片| 99精品国产高清一区二区| 老鸭窝一区二区久久精品| 日韩精品欧美成人高清一区二区| 日本高清视频一区二区| 亚洲国产精品一区二区久久| 国产亚洲欧洲997久久综合| 亚洲天堂2016| 久久大逼视频| 日韩精品久久一区二区三区| 2018中文字幕一区二区三区| 日韩一卡二卡三卡四卡| 亚洲午夜成aⅴ人片| 亚洲一区二区成人在线观看| 1stkiss在线漫画| 91伦理视频在线观看| 国产福利视频在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 91亚洲一区精品| 精品产国自在拍| 91社区在线高清| 美女视频黄a大片欧美| 成人在线视频电影| 国产精品视频色| 欧美日本亚洲视频| 一区二区三区四区中文字幕| 欧美午夜性色大片在线观看| 激情在线视频播放| 91精品久久久久久久久久久久久| 欧美日韩伦理一区二区| 欧美性猛交xxxx富婆弯腰| 日本黄色精品| 在线视频中文亚洲| 在线日韩一区| 裸体丰满少妇做受久久99精品| 久久久久久久有限公司| 网曝91综合精品门事件在线| 国产一区 二区| 亚洲v日韩v综合v精品v| 亚洲欧洲一区二区福利| 一区二区三区回区在观看免费视频| 欧美福利一区二区| 国产伦理一区| 亚洲品质自拍视频网站| 欧美极品视频| 深夜福利91大全| 国产欧美综合在线| 久久99精品国产99久久| 96pao国产成视频永久免费| 精品日韩在线观看| 成人综合婷婷国产精品久久蜜臀| 成人在线高清免费| 国产精品国产亚洲精品| 成人看片网页| xxxcom在线观看| 蓝色福利精品导航| 精品国产不卡| 午夜国产福利在线| 亚洲黄页网在线观看| 黑人一区二区三区四区五区| 欧美不卡在线视频| 国产精品传媒麻豆hd| 国产婷婷成人久久av免费高清| baoyu135国产精品免费| 激情亚洲影院在线观看| 国产精品久久久乱弄| 成人影院天天5g天天爽无毒影院| 欧美视频在线观看 亚洲欧| 99中文字幕一区| av亚洲免费| 国产乱人伦精品一区| 就去色蜜桃综合| 欧美日韩精品久久| 日韩精品免费综合视频在线播放| 久久99久久精品国产| 欧洲精品亚洲精品| 亚洲电影免费观看高清| 国产一区二区三区久久久| 欧美精品粉嫩高潮一区二区| 久久精品日产第一区二区| 精品一二三四区| 99视频在线免费观看| 紧缚捆绑精品一区二区| 99国产欧美另类久久久精品| 日韩av一卡| aaa欧美日韩| 色综合666| 久久成人精品电影| 亚洲成人一二三| 日本电影在线观看| 国产69精品久久久久9999| 免费看a在线观看| 日本精品一区二区三区在线播放视频| 久久成人人人人精品欧| 亚洲午夜免费视频| 午夜精品一区二区三区免费视频| 香蕉伊大人中文在线观看| 亚洲第一黄色网| 精品爽片免费看久久| 久久久www成人免费精品| 不卡日本视频| 一区二区三区在线高清| 日韩久久免费av| 久久综合色鬼综合色| 欧美大片网址| 成人在线国产| 亚洲一区二区三区三| 制服丝袜日韩国产| 榴莲视频成人app| 红杏成人性视频免费看| 国产精品每日更新| 国语自产精品视频在免费| 玛丽玛丽电影原版免费观看1977| 久久精品视频在线| 精品日本高清在线播放| 国产亚洲高清一区| 久久午夜影院| www国产精品com| 亚洲成人手机在线| 免费成人美女女| 成人中文在线| 欧美久久久久久久久中文字幕| 国产亚洲视频在线| 高清欧美性猛交xxxx黑人猛交| 好看的亚洲午夜视频在线| av中文资源在线资源免费观看| 久久精品国产www456c0m| 成人全视频在线观看在线播放高清| 久久精品国产大片免费观看| 一区二区三区在线视频观看58| 欧美性猛交99久久久久99按摩| 亚洲高清国产拍精品26u| 国产理论电影在线观看| 日韩欧美一二三区| 欧美成人午夜影院| 久久66热偷产精品| 国产精品欧美三级在线观看| 日韩av首页| av在线不卡一区| 美女精品视频一区| 国产精品久久久免费| 国产一区二区三区无遮挡| 国产女人18毛片水真多成人如厕| 欧美一区二区三区成人| 亚洲天堂成人网| 粉嫩av一区二区三区四区五区| 性欧美长视频|