Vitamio 填坑之路
專案跟教育有關,那麼就免不了跟視訊打交道,之前的APP用的是安卓提供的原生的播放器,專案前期只是進行了簡單的封裝。 後期由於不斷的新增各種各樣的功能(清晰度切換,線路切換,新增講義,網路視訊和本地下載視訊切換播放,記憶播放,續播等等)。 到目前為止已將近5000行程式碼(呵呵,TM除了老子,誰還看得懂)。 上個APP搞定後,不少學員強烈要求要視訊可以倍速播放,我擦,IOS還好說(他們自帶倍速播放),安卓嘛,就坑了! 視訊倍速播放需要涉及到編解碼(我TM是個搞Java的啊),沒辦法只能求助萬能的網際網路了!找了幾個開源的視訊播放器,最後定在另外VLC和Vitamio。 VLC看了半天,各種編譯,想我這種菜鳥想搞也是沒什麼希望了。看了看Vitamio,Java層的程式碼還是蠻簡單的,最新的版本是16年10月份的,有搞頭! 下了Demo,找了專案中播放地址,加上防盜鏈,Run一下,OK,沒問題!很好!按照文件設定播放速度,設到2.0倍速也能播放。 唯一不好的地方是音訊和影象並不是很同步(絕大部分情況會出現,播放本地視訊OK的),音訊和影象大概有2到5秒的時差!(雖然不完美,還是可以接受的 =3=)。
開始整合專案:
1.匯入Vitamio的依賴工程。
(1)在Eclipse中的Demo跑通後,左鍵InitActivity專案,Export帶.gradle檔案。
(2)Android studio 的File ---->new----->Import Module 匯入剛才匯出的InitActivity依賴工程(匯入之後可能在InitActivity的build.gradle檔案中出錯。
一般情況是編譯版本之類的錯,你將你原工程對應檔案的相對應的配置copy過去,再重新編譯一下就OK了)
2.開始編寫InitActivity中相應的程式碼(原InitActivity中的進度條醜的一逼,我們需要修改)。 需要注意的地方就是控制條中各個元件對應的ID。還需要新增的按鈕,就仿照著他的方式繼續新增就OK了。 最後加完之後的點選事件,你可以寫介面在VideoView類中進行實現,或者暴露方法,在你自己的程式碼中實現(我是這種方式)。
3.底部控制器的佈局搞定之後就是播放器的實施了(按照Demo來,一般都可以正常的播放)
4.下面就開始填坑了。
(1)seekTo(long msec)如果你的播放器有記憶播放(使用者播放到一半,退出去了,下次進來從上次那個播放點開始播放),這個就是一個小坑。
這是VideoView中提供的seekTo方法
public void seekTo(long msec) {
if (isInPlaybackState()) {
android.util.Log.e("qqqqq",msec+"<--------------" );
mMediaPlayer.seekTo(msec);
mSeekWhenPrepared = 0;
} else {
android.util.Log.e("ppppp",msec+"<--------------");
mSeekWhenPrepared = msec;
}
}
Vitamio的官方文件告訴我們說,在以下這個介面seekTo()到你指定的播放地點了
public void setOnPreparedListener(OnPreparedListener l) {
mOnPreparedListener = l;
}
然而,你呼叫之後並沒有什麼卵用,進度條確實向後跳了,但是很短的時間後又從頭開始播放了。打斷點,輸出日誌,看原始碼,對呀,並沒有什麼錯啊!
怎麼不跳呢!
呵呵,我的猜測是seekTo的呼叫應該是視訊已經開始播放的時候才起作用。
也就是說OnpreparedListener的監聽並沒有監聽的很準確,也就是監聽到視屏要開始播放了,
但是並沒有播放,這時候開始seek的話,並沒有起作用(也可能是機型的問題,我的測試機是華為EMUI)。
我的解決辦法是在OnpreparedListener監聽後的500ms後再seek,成功了!
(2)public void setVideoLayout(int layout, float aspectRatio)
根據文件的描述,這個方法是設定播放介面的尺寸和視訊的寬高比例的。
在華為的機子上跑的很順,橫屏跟豎屏切換的時候並沒有出現什麼問題。
但是在小米(測試機用的4c ,note1),還有部分華為的機子上就出現了。
橫屏時,不能填充父控制元件(其實填充了,你可以重寫OnTouch方法進行識別),只佔了播放的畫布一部分。
測試之後發現其實是此方法中的getHolder().setFixedSize(mSurfaceWidth, mSurfaceHeight);
**mSurfaceWidth和mSurfaceHeight並沒有發生變化**
這是方法體
解決的方案就是(重新定義一個方法,在佈局發生變化的時候傳入寬高進行重新設定):
public void setVedioLayout(int width,int height){
LayoutParams lp = getLayoutParams();
ViewGroup parent = (ViewGroup) getParent();
lp.width = width;
lp.height = height;
Log.e("VIDEO3=====",lp.width+"============"+ lp.height);
setLayoutParams(lp);
getHolder().setFixedSize(width, height);
}
(3)手機測試時是沒有任何問題的,專案到目前為止很順利。開始進行pad適配工作。問題又來了
dlopen failed: "libstlport_shared.so" has unexpected e_machine: 183
(當時很鬱悶,手機沒問題,官方Demo沒問題,就整合到自己的專案中出現這種問題)
右邊的框框中的so檔案載入不到
這個是Android studio匯入工程後的配置問題。
需要在build.gradle加入下面的配置
還需要在gradle.properties配置一下這個
**注意的是都都是在你自己的工程中,而不是在依賴工程中。**
(3)最後一個問題並沒有深究,估計也深究不出什麼玩意!
FIND_NAME_SYM vvo, render_yuv #82
這個錯誤,報出來後APP並不崩潰,進度條上的視訊總時長也沒有什麼問題!
但是!但是。。。它是黑屏的狀態。加了Vitamio的技術交流群,看到有大牛說是機器渲染的問題,應該是什麼方法搞反了。
我的解決方法是偶然測試出來的。具體是怎麼回事,我也是不太明白!目前專案就先這樣搞了!有問題再扯!
解決的方案是把對VideoView的錯誤監聽事件和資訊變化事件去掉就OK了(我的專案確實是這樣解決了)!
好了,就扯到這了!有什麼扯得不對的地方,希望大家指正!共同進步!
相關推薦
Vitamio 填坑之路
專案跟教育有關,那麼就免不了跟視訊打交道,之前的APP用的是安卓提供的原生的播放器,專案前期只是進行了簡單的封裝。 後期由於不斷的新增各種各樣的功能(清晰度切換,線路切換,新增講義,網路
記錄一下openvpn,填坑之路
openvpn題目,占位。。。整理一下,工作中遇到的openvpn的問題需求:兩個辦公地點:青島、北京;北京的小夥伴需要訪問青島辦公區的內網,同時需要訪問阿裏雲服務器。解決方案:在阿裏雲跳板機上以及青島辦公區安裝openvpn。jumper上之起server,青島辦公區起server+client。遇到的問題
tensorboard的可視化小白踩坑填坑之路
main session png lose 分享 cts program use vid 首先說tensorflow這個框架是真的很是強大,圖像的識別,以及神經網絡的構建,還有就是不得不說的可視化工具tensorboard,這個工具一般是伴隨著tensorflow的安裝
開發小程序(填坑之路,遇到一點就更新一點)
頁面 for page 開發工具 sign 上傳 nco lse tor 1.開發小程序發送請求時,報錯不在以下合法列表中: 在開發工具詳情中設置: 請參考微信官方文檔:關於小程序網絡相關API說明 2.如果你需要權限驗證(如登錄後訪問),小程序不像瀏覽器能幫你自動攜
小程式填坑之路——文字超出部分隱藏(已解決)
一直使用之前的版本沒有問題,今天在首頁顯示“定位”的地方不能生效,先上程式碼我再說原因 /*文字超出省略*/ { text-overflow: ellipsis; white-space: normal; overflow: hidden; display: -web
小程式填坑之路—input密碼可見與不可見(已解決)
2018年11月5日下午16:45修改: 經過在手機上多次真機測試,發現這個方法有問題,在電腦上沒什麼毛病。但在手機上,會出現點選眼睛的小圖示不能夠及時顯示或者隱藏密碼,特此對程式碼進行簡化和修改。 <!--修改wxml--> <image class='showIm
小程式填坑之路--自定義模態彈窗(已解決)
信我,這次只講技術! 實現效果(點選“更換手機號”,背景變暗,彈出輸入框): 嗯,我懶,就用了上一篇文章小程式填坑之路--彈窗修改手機號後的更新(已解決)的圖。 先上wxml的程式碼, <view class="weui-vcode-btn" bindtap="
小程式填坑之路--彈窗修改手機號後的更新(已解決)
在寫之前,我不得不說這是一個小的不能再小的點了,簡直不能是坑,僅是我個人的學藝不精。 先上效果圖(將2輸入框的手機號替換掉1輸入框的手機號): (都是在js檔案裡進行操作) 首先在data裡 ,定義cellPhone=" " data{ cellPhone: ''
python函式引數的填坑之路
背景 最近在看廖雪峰老師的python3教程之函式的引數 受益匪淺,但是在實踐的過程中,發現了一些不解之謎 兩個錯誤 import _thread import time def func1(x): while x: print(x) x = x -1 _threa
python填坑之路:tesserocr配置
最近在學爬蟲,在模擬登入網站的時候常常需要輸入驗證碼,最常見的就是OCR(Optical Character Recognition,光學字元識別) ,於是乎瞭解到tesserocr這個庫,但是安裝的過程可謂坎坷。
分享到微信填坑之路
1、註冊了公眾平臺測試賬號,下載了jssdk。 而後開始了,生成自定義分享卡片之旅。 坑點一: 生成簽名的url一定要是當前頁面的url,所以 正確的姿勢是:(url一定是從前端傳過來的location.href) public function getSignPackage
spring boot整合mybatis-generator的填坑之路
第一步: 在pom.xml檔案中新增: <plugin> <groupId>org.mybatis.generator</groupId> <a
Vue 全域性例項,我想單獨在js裡面用(許可權路由的時候或者攔截器時候),填坑之路,
首先我有一個校驗需要用到vue例項 export const rules = { empty: [ (value) => !!value || this.$t('valid.empty'), ], email: [
Web填坑之路(3) --- js驗證碼外掛GVerify
轉載:網路 !(function(window, document) { function GVerify(options) { //建立一個圖形驗證碼物件,接收options物件為引數 this.options = { //預設opti
Web填坑之路(4) --- web server大概解釋
Web Server中文名稱叫網頁伺服器或web伺服器。web伺服器也稱為WWW伺服器,主要功能是提供網上資訊瀏覽服務。 Web伺服器可以解析HTTP協議。當Web伺服器接收到一個HTTP請求,會返回一個HTTP響應,例如返回一個HTML頁面。為了處理一個請求,Web伺服器可以響應一個靜態頁面或圖片,進行頁
前端小白的填坑之路
第一個Java程式 public class HelloWorld { /* 第一個Java程式 * 它將列印字串 Hello World */ public sta
微信小程式填坑之路(三):佈局適配方案(rpx、px、vw、vh)
因為小程式是以微信為平臺執行的,可以同時執行在android與ios的裝置上,所以不可避免的會遇到佈局適配問題,特別是在iphone5上,因為螢幕尺寸小的緣故,也是適配問題最多的機型,下面就簡單介紹幾種適配方法。 rpx適配 rpx是小程式中
Android Studio填坑之路
Android Studio是個強大Android開發工具,每個新版本的釋出都有帶來新的驚喜和爽快,但是同時也帶來驚嚇和糟糕,這邊文章就是收集開發中遇到的細節問題以及解決方法。 解析打包出的Apk沒有versionCode和versionName 開發環境背
微信小遊戲填坑之路(一)
1、註冊微信小程式賬號 http://mp.weixin.qq.com 2、下載開發工具 3、新建專案,選擇小程式 4、選好目錄、填寫專案名稱、可選是否建立demo或是空專案啟動 5、若不選擇“建立普通快速啟動模板”會提示如下 在目錄下新建game.jsongame.
一名Android開發者的微信小程式填坑之路(2)
前言 上一篇是九月二十七日寫的,而這一篇我動筆的時間是十月十日(特殊的日子),中間相隔十三天——當然是因為國慶節。說老實話,這十三天裡面我都沒有碰和小程式有關的東西——畢竟學習小程式的開發也只是起於興趣,而平時的工作並不會涉及與其相關的東西——但是在這十三天裡