1、Video組件
微信官方文檔地址:
https://developers.weixin.qq.com/miniprogram/dev/component/video.html
uniapp官方文檔地址:
https://uniapp.dcloud.net.cn/component/video.html
2辣卒、Swiper和Video如何實現(xiàn)抖音 快手效果
官方提示盡量不要超過3個標簽(同一個界面)官方提示盡量不要超過3個標簽(同一個界面)
鏈接地址:
https://developers.weixin.qq.com/community/develop/doc/000e4ef22583d8961919efb6b56009
- 解決方案1:swiper里通過放置iamge和Video標簽切換來實現(xiàn)
- 解決方案2:swiper里只有固定的3個Video標簽掷贾,通過算法來更新切換數(shù)據(jù)源
3、視頻內容兼容性
如果不加密視頻內容的話荣茫,首選mp4格式的文件即可想帅。
m3u8在很多安卓機型上回出現(xiàn)報錯,導致播放異常计露。
錯誤1
errMsg":"HLS error, type: mediaError, details: bufferStalledError,
錯誤2
{"errMsg":"HLS error, type: mediaError, details: fragParsingError, response: \"none\""},
錯誤3
{"errMsg":"MEDIA_ERR_DECODE(-4003,-1)"}}
4博脑、部分手機播放會出現(xiàn)卡頓、畫面不動票罐、綠屏等問題
解決方案:
- 1: 將m3u8換為mp4文件
- 2:在Video組件上新增屬性 custom-cache="{{true}}"
提示:大部分是華為手機會出現(xiàn)異常叉趣,小米也有小部分。
5该押、視頻內容如何放抓包
如何防止自己小程序里的視頻數(shù)據(jù)被別人轉包呢疗杉。
總結:蘋果目前沒有好的方案,安卓通過m3u8遠程加密本地解密播放即可蚕礼。
從微信的官方文檔我們得知
但在實際使用中我們會發(fā)現(xiàn)微信IOS端video是不支持讀取本地的臨時文件烟具,安卓是可以的。
基于上面我們就可以通過將后端返回的加密m3u8文件再通過前端解密算法緩存到本地奠蹬,最后再去播放朝聋。(有興趣的留言或私信)
6、如何防止自己的接口被抓包
解決方案
- 1:使用微信提供的網(wǎng)關服務囤躁,這樣抓包是看不到網(wǎng)絡請求的數(shù)據(jù)冀痕;(付費的)
- 2: 前后端采用加簽 加密解密數(shù)據(jù)即可(免費)
7荔睹、小程序接口訪問慢
1:小程序端校驗是否開啟了域名校驗
2:小程序管理后臺配置
開發(fā)管理-》開發(fā)設置-》ip白名單+服務器域名
3:再配合后臺運維 看對眼的服務器域名是否有付費CDN加速
8、小程序切換域名不能訪問
1:小程序端校驗是否開啟了域名校驗
2:小程序管理后臺配置
開發(fā)管理-》開發(fā)設置-》ip白名單+服務器域名
3: 運維后臺對應的服務器言蛇、ip是否有設置https對應的證書
舉例:
'{"errno":600001,"errMsg":"request:fail -200:net::ERR_CERT_COMMON_NAME_INVALID"}',
上面這個報錯就是因為服務器ip對應的沒有設置https證書導致僻他,找后臺或者運維小哥哥處理即可。
9腊尚、解決不存在的path路徑訪問現(xiàn)有的小程序
以uniapp開發(fā)的小程序為例吨拗,在App.vue中新增如下的代碼,和onLaunch是同一層級婿斥。
onPageNotFound(e) {
printLog('頁面路徑未找到', JSON.stringify(e))
let query = e.query;
let paramsArr = Object.keys(query);
let params = '';
paramsArr.forEach((item, index) => {
if (index === (paramsArr.length - 1)) {
params += (item + '=' + query[item]);
} else {
params += (item + '=' + query[item] + '&');
}
});
if (e.path.includes('oldPage')) {
uni.reLaunch({
url: `/pages/newPage/newPage?${params}`
})
printLog('頁面路徑未找到,打開新頁面', params)
return false;
} else {
uni.reLaunch({
url: `/pages/home/home`
})
printLog('頁面路徑未找到,打開主界面')
}
},
10劝篷、如何監(jiān)控小程序里的錯誤異常
以uniapp開發(fā)的小程序為例,在App.vue中新增如下的代碼民宿,和onLaunch是同一層級携龟。
可以將錯誤定期或立即上報給后臺
也可以將錯誤上報給微信的WE分析平臺 或對接第三方小程序上報統(tǒng)計平臺。
onError(error) {
printLog('小程序報錯', JSON.stringify(error))
if (this.globalData.errorCount < 6) {
printLog('小程序報錯 上報')
sensor.reportWeixinEvent("app_lauch", {
"errordetail": JSON.stringify(error)
})
this.globalData.errorCount += 1
}
},
11:如何防止別人對我們的視頻資源進行錄屏
安卓平臺
以下的代碼能讓安卓用戶錄屏下來的視頻畫面全是黑屏的勘高。
如果是截圖會提示:該應用不允許截屏
wx.setVisualEffectOnCapture({
visualEffect: 'hidden',
success: (res) => {
printLog('錄屏 success->', res)
},
fail: (err) => {
printLog('錄屏 fail>', res)
},
complete: (res) => {
printLog('錄屏 complete>', res)
}
})
ios平臺
通過以下代碼去監(jiān)聽并發(fā)送通知事件,在需要處理的界面上層自定義加視圖View去干擾提醒坟桅。
wx.onScreenRecordingStateChanged(function(res) {
printLog('錄屏狀態(tài)', res.state)
uni.$emit('screenRecord', res.state == 'start');
})
wx.getScreenRecordingState({
success: (res) => {
printLog('查詢 錄屏 success->', res)
if (res.state == 'on') {
uni.$emit('screenRecord', true)
} else if (res.state == 'off') {
uni.$emit('screenRecord', false)
}
},
fail: (err) => {
uni.$emit('screenRecord', false)
}
})
12华望、小程序類目不匹配 如何讓審核通過
當自己的實際運營類目是A,提審的時候被拒 顯示還需要補充A的類目資質仅乓,但A的類目資質自己又無法獲取赖舟, 這個時候就可以考慮繞道解決了。
整體思路就是提審的時候是正確的數(shù)據(jù)版面
提審通過上線之后 再通過oss配置或后臺接口 調整數(shù)據(jù)為最新的即可夸楣。
13宾抓、如何一套代碼 對應多個馬甲包小程序
前后端約定一個或多個字段,比如小程序id等字段來區(qū)分小程序是哪個
14豫喧、wx.login偶發(fā)獲取不到數(shù)據(jù)怎么處理
- 獲取到了就正常操作 請求后臺api去登錄注冊
- 獲取為空就采用設備id策略先登錄石洗,后續(xù)再更新wx.login請求后臺
- 獲取失敗就重試,設置一個重試次數(shù)好一些
wx.login({
timeout: 10000,
success(res) {
if (res.code) {
//有微信code登錄
that.postLoginData(params, res.code)
} else {
//無微信code登錄 借助設備id登錄,后續(xù)在接口里再補充wxCode上去
that.postLoginData(params)
}
},
fail(failRes) {
//重試
},
})
15紧显、小程序中css動畫保持在最后狀態(tài)失敗
新增這個是不夠的-webkit-animation-fill-mode:forwards
, 還需要添加!important
看下面終極方案:
.zhuanpanView360{
-webkit-animation-fill-mode:forwards !important ;
animation-fill-mode: forwards !important;
animation: zhuanpan360 2.1s linear 1 ;
}
16讲衫、小程序里的視頻如何像競品 那樣清晰且體積小
- 1:使用ffmpeg指令
- 2:使用格式工廠壓縮
- 3:【推薦】使用剪映 快捷操作
分辨率:一般保持原片分辨率即可
編碼:使用默認H.264
格式:選擇mp4文件
幀率:選擇60fps
碼率:1000及以上手動調試
不同的碼率輸出的視頻大小也是不一樣,具體以實際大小和輸出的內容清晰度為主孵班。
完結感謝涉兽,歡迎探討留言。
這里補充網(wǎng)友提問的部分代碼
<swiper vertical @animationfinish="animationfinish" @change="_swiperallchange" :circular="circular"
class="video-swiper" :current="current" :duration="duration" :easingFunction="easingFunction">
<swiper-item v-for="(item, indexClone) in curQueue" :key="indexClone">
<video enableProgressGesture enablePlayGesture :autoplay="item.audioId1&¤t==indexClone"
@ended="onEnded" @error="videoErrorCallback" @loadedmetadata="onLoadedMetaData" @pause="onPause"
@play="onPlay" @progress="onProgressFun" @timeupdate="onTimeUpdate" @waiting="onWaiting"
class="video_item" :controls="false" :data-index="indexClone" :data-playletid="item.courseid"
:data-videoid="item.courseid" :data-jishuId="item.id"
:loop="loop"
objectFit="contain"
:showCenterPlayBtn="false"
:src="item.audioId1"
:id="'video_' + indexClone"
:data-videourls="item.audioId1"
v-if="(item.audioId1&&item.audioId1 != '')&&(indexClone==current||indexClone==(current+1))"></video>