【技巧】ionic3視頻播放

關(guān)于視頻播放饱搏,很早就想動筆了,只是基于當前選用技術(shù)置逻,還有不少要優(yōu)化的細節(jié)推沸,而我在考慮要不要把這些細節(jié)整理出來的過程中,文章就擱置了券坞。沒有這些細節(jié)鬓催,此文其實價值不大,不過當前還是簡單地給出方案恨锚,權(quán)當入門宇驾,細節(jié)將來有空再補充。

一般視頻的展示方式有兩種:縮略圖和直接播放猴伶,分別對應下面兩種效果(可參考直播應用和今日頭條視頻):

縮略圖.jpg
直接播放.PNG

而這兩種方式课舍,可分別使用以下方式處理:

一、使用Cordova插件播放他挎。

以官網(wǎng)推薦的cordova-plugin-streaming-media插件為例:

首先安裝插件筝尾,并安裝相應的native模塊:

ionic cordova plugin add cordova-plugin-streaming-media
npm install --save @ionic-native/streaming-media

其次在app.module.ts文件中的providers里添加StreamingMedia
最后在調(diào)用的頁面如下使用(詳細使用請點插件鏈接進github查看):

import { StreamingMedia, StreamingVideoOptions } from '@ionic-native/streaming-media';

constructor(private streamingMedia: StreamingMedia) { }

let options: StreamingVideoOptions = {
  successCallback: () => { console.log('Video played') },
  errorCallback: (e) => { console.log('Error streaming') },
  orientation: 'landscape'
};

this.streamingMedia.playVideo('https://path/to/video/stream', options);

其效果是利用原生接口來播放視頻办桨。使用很簡單筹淫,同樣插件的功能也很簡單,當要做一些個性化處理時呢撞,就要擴展源碼了损姜。

二饰剥、使用video標簽播放

在手機端,瀏覽器基本都支持html5摧阅,所以可以使用video標簽汰蓉,但是不同的瀏覽器實現(xiàn)的效果不一樣,往往需要自己定制樣式和配置屬性逸尖,像在ios上古沥,一般會添加下面兩屬性允許局部播放:

<video playsinline webkit-playsinline></video>

為了少摸索折騰,可以使用第三方js娇跟,如video.js和jplayer.js岩齿,對于ionic3,自然可以考慮videogular2苞俘,鏈接的是源碼盹沈,實際官網(wǎng)是這個:http://videogular.github.io/videogular2/

首先安裝模塊:

npm install videogular2 --save
npm install @types/core-js --save-dev

其次在app.module.ts里引入模塊:

import {VgCoreModule} from 'videogular2/core';
import {VgControlsModule} from 'videogular2/controls';
import {VgOverlayPlayModule} from 'videogular2/overlay-play';
import {VgBufferingModule} from 'videogular2/buffering';

@NgModule({
    declarations: [],
    imports: [
        VgCoreModule,
        VgControlsModule,
        VgOverlayPlayModule,
        VgBufferingModule
    ],
    providers: [],
    bootstrap: []
})
export class AppModule {
}

最后在html中類似如下使用即可(vg-player標簽里面是各種組件,自己根據(jù)需要自行選用添加):

<ion-list no-lines>
    <div *ngFor="let item of vm.sources">
      <vg-player class="video-container">
        <vg-overlay-play></vg-overlay-play>
        <vg-buffering></vg-buffering>
        <vg-controls>
          <vg-play-pause></vg-play-pause>
          <vg-playback-button></vg-playback-button>

          <vg-time-display vgProperty="current" vgFormat="mm:ss"></vg-time-display>
          <vg-time-display vgProperty="left" vgFormat="mm:ss"></vg-time-display>
          <vg-time-display vgProperty="total" vgFormat="mm:ss"></vg-time-display>
          <vg-mute></vg-mute>
          <vg-volume></vg-volume>
          <vg-fullscreen></vg-fullscreen>
        </vg-controls>
        <video #myMedia [vgMedia]="myMedia" id="{{item.id}}" class="video-js vjs-default-skin vjs-fluid" 
        height="210" preload="auto" 
        poster="assets/imgs/sudu.jpg"
         crossorigin playsinline webkit-playsinline>
          <source src="assets/oceans.mp4" type="video/mp4">
        </video>
      </vg-player>
      <ion-item>
        <ion-avatar item-left>
           ![](assets/imgs/eagle.jpg)
        </ion-avatar>
        <h2><strong>標題</strong></h2>
        <h3>描述</h3>
      </ion-item>
    </div>
  </ion-list>

其中#myMedia為必須的吃谣,提供給[vgMedia]乞封,但名字可任意,表示創(chuàng)建一個作用域內(nèi)的臨時變量用示標識并操作同級組件岗憋。

然而當你運行查看效果時肃晚,會發(fā)現(xiàn)有問題:文字圖標不顯示,這個時候你可以修改node_modules下的源碼(videoangular2或者@ionic)仔戈,一般我不建議(因為當刪除并重新npm install時會覆蓋丟失)关串,
此時,我們可以拷一份fonts放在src/assets下面监徘,然后下面兩種方式二選一即可:
方式一:index.html添加一句:

<link href="assets/fonts/videogular.css" rel="stylesheet">

方式二:app.scssvariables.scss添加一句:

@import '../assets/fonts/videogular.css';

最后效果如圖:


image.png

但是晋修,你不要開心太早!

因為問題還存在著:當全屏時凰盔,尤其是android墓卦,會黑屏,可以開啟GPU硬件加速來解決户敬,但也并不是很好的方法落剪,此時可以使用偽全屏——用樣式模擬,這樣又涉及到橫豎屏切換的監(jiān)聽等等尿庐,這里不詳細說明著榴,有興趣可以看看此文(我沒驗證其可行性,只是看上去覺得思路大致一致):
https://segmentfault.com/a/1190000006857675

當然屁倔,也可以兩者混合使用,組合操作就行暮胧,如全屏使用原生的全屏播放锐借。

在這里问麸,我簡單示范一下用兩步重寫全屏事件,屏蔽原來全屏的操作:
第一步是html 上的添加#fullscreen:

<vg-fullscreen #fullscreen></vg-fullscreen>

第二步是在ts中添加以下關(guān)鍵代碼:

import { VgFullscreen } from 'videogular2/src/controls/vg-fullscreen/vg-fullscreen';

  @ViewChild('fullscreen') fullscreen: VgFullscreen;
  ionViewDidLoad() {
    this.fullscreen.onClick = ()=>{
      //重寫全屏事件钞翔,下面換成自定義全屏操作
      console.log('fullscreen');
    };
  }

原理很簡單严卖,就是找到全屏的組件,然后修改它的點擊方法布轿。

最最后哮笆,就算你解決了上述問題,你還是需要大致處理下以下問題:

  1. 視頻滾出可視區(qū)域汰扭,應停止播放稠肘;
  2. 當前視頻點擊播放,其它視頻應該全部停止萝毛;
  3. 全屏播放完成應退出全屏项阴;
  4. 播放時應自動隱藏播放控件,點擊屏幕時顯示播放控件笆包;
    ……
    這些部分可配合videogular2的API來處理环揽。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市庵佣,隨后出現(xiàn)的幾起案子歉胶,更是在濱河造成了極大的恐慌,老刑警劉巖巴粪,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件通今,死亡現(xiàn)場離奇詭異,居然都是意外死亡验毡,警方通過查閱死者的電腦和手機衡创,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晶通,“玉大人璃氢,你說我怎么就攤上這事∈桑” “怎么了一也?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喉脖。 經(jīng)常有香客問我椰苟,道長,這世上最難降的妖魔是什么树叽? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任舆蝴,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洁仗。我一直安慰自己层皱,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布赠潦。 她就那樣靜靜地躺著叫胖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪她奥。 梳的紋絲不亂的頭發(fā)上瓮增,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音哩俭,去河邊找鬼绷跑。 笑死,一個胖子當著我的面吹牛携茂,可吹牛的內(nèi)容都是我干的你踩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼讳苦,長吁一口氣:“原來是場噩夢啊……” “哼带膜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鸳谜,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤膝藕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咐扭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芭挽,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年蝗肪,在試婚紗的時候發(fā)現(xiàn)自己被綠了袜爪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡薛闪,死狀恐怖辛馆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情豁延,我是刑警寧澤昙篙,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站诱咏,受9級特大地震影響苔可,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袋狞,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一焚辅、第九天 我趴在偏房一處隱蔽的房頂上張望映屋。 院中可真熱鬧,春花似錦同蜻、人聲如沸秧荆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陕赃,卻和暖如春卵蛉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背么库。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工傻丝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诉儒。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓葡缰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忱反。 傳聞我的和親對象是個殘疾皇子泛释,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • ionic2官方提供了很多原生插件,是建立在cordova plugin基礎上温算,結(jié)合ionic-native的ts...
    charles0427閱讀 2,531評論 0 4
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫怜校、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 人的一生說長嗎?也不長巩割,區(qū)區(qū)幾十年裙顽。走在綠樹成陰的街角,一顆顆香樟樹它是陪我一起長大宣谈。說短嗎愈犹?也不短!我們每天都在...
    走在人生路閱讀 156評論 0 0
  • 2016蒲祈,悄然而逝甘萧。2017年的第一天早晨醒來,躺在床上回憶這一年的點點滴滴梆掸。2016年的元旦扬卷,我和室友拿著書到處...
    格格的檸檬西柚閱讀 169評論 0 0
  • 時尚先生就是需要處處時尚!想要成為時尚先生的話一定要從頭開始酸钦,也就是需要掌握一些時尚男士發(fā)型怪得,才方便打造自己成為一...
    98f636354682閱讀 1,809評論 0 16