在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙上制作一個視頻播放器

OpenHarmony技術社區 ? 來源:OST開源開發者 ? 作者:OST開源開發者 ? 2023-04-11 09:56 ? 次閱讀

媒體子系統是 OpenHarmony 中重要的子系統,可以提供音視頻播放能力。

媒體子系統為開發者提供一套簡單且易于理解的接口,使得開發者能夠方便接入系統并使用系統的媒體資源。

媒體子系統提供以下常用功能如下:

①音視頻播放(AVPlayer9+),AudioPlayer6+ 和 VideoPlayer8+ 整合,升級了狀態機和錯誤碼,推薦使用。

②音視頻錄制(AVRecorder9+),AudioRecorder6+ 和 VideoRecorder9+ 整合,推薦使用。

音頻播放(AudioPlayer6+),AVPlayer9+ 發布后停止維護,請使用 AVPlayer9+。

視頻播放(VideoPlayer8+),AVPlayer9+ 發布后停止維護,請使用 AVPlayer9+。

⑤音頻錄制(AudioRecorder6+),AVRecorder9+ 發布后停止維護,請使用 AVRecorder9+。

⑥視頻錄制(VideoRecorder9+),AVRecorder9+ 發布后停止維護,請使用 AVRecorder9+。

從 3.2 開始 OpenHarmony 推出了 AVPlayer 和 AVRecorder 接口,之前的 VideoPlayer、AudioPlayer 這些接口會停止維護,所以我們今天學習下怎么使用 AVPlayer 接口。

導入模塊

importmediafrom'@ohos.multimedia.media';

創建 avplayer:

this.avPlayer=awaitmedia.createAVPlayer()

如上,我們使用的是 promise 接口,對應的接口定義為:

/**
*CreatesanAVPlayerinstance.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramcallbackCallbackusedtoreturnAVPlayerinstanceiftheoperationissuccessful;returnsnullotherwise.
*@throws{BusinessError}5400101-Nomemory.Returnbycallback.
*/
functioncreateAVPlayer(callback:AsyncCallback):void;

/**
*CreatesanAVPlayerinstance.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@returnsAPromiseinstanceusedtoreturnAVPlayerinstanceiftheoperationissuccessful;returnsnullotherwise.
*@throws{BusinessError}5400101-Nomemory.Returnbypromise.
*/
functioncreateAVPlayer():Promise;
注冊 avplayer 回調:
//注冊狀態變化回調,不同狀態時做不同動作
avPlayer.on('stateChange',async(state,reason)=>{
……
})
//注冊時間變化回調,方便更新進度條時間
avPlayer.on('timeUpdate',(time:number)=>{
……
})
avplayer 播放流程:
graphLR
賦值avPlayer.url開始播放-->回調進入initialized-->賦值avPlayer.surfaceId-->avPlayer.prepare-->回調進入prepared-->avPlayer.play
//視頻播放偽代碼
asyncavPlayerDemo(){
this.avPlayer.on('stateChange',async(state,reason)=>{
switch(state){
case'idle'://成功調用reset接口后觸發該狀態機上報
console.info(TAG+'stateidlecalled')
this.avPlayer.release()//釋放avplayer對象
break;
case'initialized'://avplayer設置播放源后觸發該狀態上報
console.info(TAG+'stateinitializedcalled')
this.avPlayer.surfaceId=this.surfaceID//設置顯示畫面,當播放的資源為純音頻時無需設置
this.avPlayer.prepare().then(()=>{
console.info(TAG+'preparesuccess');
},(err)=>{
console.error(TAG+'preparefiled,errormessageis:'+err.message)
})
break;
case'prepared'://prepare調用成功后上報該狀態機
console.info(TAG+'statepreparedcalled')
this.avPlayer.play()//調用播放接口開始播放
break;
case'playing'://play成功調用后觸發該狀態機上報
console.info(TAG+'stateplayingcalled')
if(this.count==0){
this.avPlayer.pause()//調用暫停播放接口
}else{
this.avPlayer.seek(10000,media.SeekMode.SEEK_PREV_SYNC)//前向seek置10秒處,觸發seekDone回調函數
}
break;
case'paused'://pause成功調用后觸發該狀態機上報
console.info(TAG+'statepausedcalled')
if(this.count==0){
this.count++
this.avPlayer.play()//繼續調用播放接口開始播放
}
break;
case'completed'://播放結束后觸發該狀態機上報
console.info(TAG+'statecompletedcalled')
this.avPlayer.stop()//調用播放結束接口
break;
case'stopped'://stop接口成功調用后觸發該狀態機上報
console.info(TAG+'statestoppedcalled')
this.avPlayer.reset()//調用reset接口初始化avplayer狀態
break;
case'released':
console.info(TAG+'statereleasedcalled')
break;
case'error':
console.info(TAG+'stateerrorcalled')
break;
default:
console.info(TAG+'unkownstate:'+state)
break;
}
})

//創建avPlayer實例對象
this.avPlayer=awaitmedia.createAVPlayer()
letfdPath='fd://'
letpathDir="/data/storage/el2/base/haps/entry/files"http://pathDir在FA模型和Stage模型的獲取方式不同,請參考開發步驟首行的說明,根據實際情況自行獲取。
//path路徑的碼流可通過"hdcfilesendD:xxxH264_AAC.mp4/data/app/el2/100/base/ohos.acts.multimedia.media.avplayer/haps/entry/files"命令,將其推送到設備上
letpath=pathDir+'/H264_AAC.mp4'
letfile=awaitfs.open(path)
fdPath=fdPath+''+file.fd
//賦值url后就會進入stateChangecallback
this.avPlayer.url=fdPath
}
其他播放控制接口:
/**
*Prepareaudio/videoplayback,itwillrequestresourceforplaying.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramcallbackAcallbackinstanceusedtoreturnwhenpreparecompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbycallback.
*@throws{BusinessError}5400106-Unsupportformat.Returnbycallback.
*/
prepare(callback:AsyncCallback):void;

/**
*Prepareaudio/videoplayback,itwillrequestresourceforplaying.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@returnsAPromiseinstanceusedtoreturnwhenpreparecompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbypromise.
*@throws{BusinessError}5400106-Unsupportformat.Returnbypromise.
*/
prepare():Promise;

/**
*Playaudio/videoplayback.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramcallbackAcallbackinstanceusedtoreturnwhenplaycompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbycallback.
*/
play(callback:AsyncCallback):void;

/**
*Playaudio/videoplayback.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@returnsAPromiseinstanceusedtoreturnwhenplaycompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbypromise.
*/
play():Promise;

/**
*Pauseaudio/videoplayback.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramcallbackAcallbackinstanceusedtoreturnwhenpausecompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbycallback.
*/
pause(callback:AsyncCallback):void;

/**
*Pauseaudio/videoplayback.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@returnsAPromiseinstanceusedtoreturnwhenpausecompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbypromise.
*/
pause():Promise;

/**
*Stopaudio/videoplayback.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramcallbackAcallbackinstanceusedtoreturnwhenstopcompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbycallback.
*/
stop(callback:AsyncCallback):void;

/**
*Stopaudio/videoplayback.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@returnsAPromiseinstanceusedtoreturnwhenstopcompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbypromise.
*/
stop():Promise;

/**
*ResetAVPlayer,itwilltoidlestateandcansetsrcagain.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramcallbackAcallbackinstanceusedtoreturnwhenresetcompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbycallback.
*/
reset(callback:AsyncCallback):void;

/**
*ResetAVPlayer,itwilltoidlestateandcansetsrcagain.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@returnsAPromiseinstanceusedtoreturnwhenresetcompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbypromise.
*/
reset():Promise;

/**
*ReleasesresourcesusedforAVPlayer.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramcallbackAcallbackinstanceusedtoreturnwhenreleasecompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbycallback.
*/
release(callback:AsyncCallback):void;

/**
*ReleasesresourcesusedforAVPlayer.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@returnsAPromiseinstanceusedtoreturnwhenreleasecompleted.
*@throws{BusinessError}5400102-Operationnotallowed.Returnbypromise.
*/
release():Promise;

/**
*Jumpstothespecifiedplaybackposition.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtimeMsPlaybackpositiontojump,shouldbein[0,duration].
*@parammodeSee@SeekMode.
*/
seek(timeMs:number,mode?void;
其他回調接口:
/**
*Registerorunregisterlistensformediaplaybackevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackstateChangeevent.
*/
on(type:'stateChange',callback:(state:AVPlayerState,reason:StateChangeReason)=>void):void;
off(type:'stateChange'):void;
/**
*Registerorunregisterlistensformediaplaybackevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackvolumeevent.
*/
on(type:'volumeChange',callback:Callback):void;
off(type:'volumeChange'):void;
/**
*Registerorunregisterlistensformediaplaybackevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackendofstream
*/
on(type:'endOfStream',callback:Callback):void;
off(type:'endOfStream'):void;
/**
*Registerorunregisterlistensformediaplaybackevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackseekDoneevent.
*/
on(type:'seekDone',callback:Callback):void;
off(type:'seekDone'):void;
/**
*Registerorunregisterlistensformediaplaybackevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackspeedDoneevent.
*/
on(type:'speedDone',callback:Callback):void;
off(type:'speedDone'):void;
/**
*Registerorunregisterlistensformediaplaybackevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybacksetBitrateDoneevent.
*/
on(type:'bitrateDone',callback:Callback):void;
off(type:'bitrateDone'):void;
/**
*LRegisterorunregisterlistensformediaplaybackevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybacktimeUpdateevent.
*/
on(type:'timeUpdate',callback:Callback):void;
off(type:'timeUpdate'):void;
/**
*Registerorunregisterlistensformediaplaybackevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackdurationUpdateevent.
*/
on(type:'durationUpdate',callback:Callback):void;
off(type:'durationUpdate'):void;
/**
*Registerorunregisterlistensforvideoplaybackbufferingevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackbufferingupdateeventtolistenfor.
*@paramcallbackCallbackusedtolistenforthebufferingupdateevent,returnBufferingInfoTypeandthevalue.
*/
on(type:'bufferingUpdate',callback:(infoType:BufferingInfoType,value:number)=>void):void;
off(type:'bufferingUpdate'):void;
/**
*Registerorunregisterlistensforstartrendervideoframeevents.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackeventreturn.
*/
on(type:'startRenderFrame',callback:Callback):void;
off(type:'startRenderFrame'):void;
/**
*Registerorunregisterlistensforvideosizechangeevent.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackeventreturnvideosize.
*/
on(type:'videoSizeChange',callback:(width:number,height:number)=>void):void;
off(type:'videoSizeChange'):void;
/**
*Registerorunregisterlistensforaudiointerruptevent,referto{@link#audio.InterruptEvent}
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackeventreturnaudiointerruptinfo.
*/
on(type:'audioInterrupt',callback:(info:audio.InterruptEvent)=>void):void;
off(type:'audioInterrupt'):void;
/**
*RegisterorunregisterlistensforavailablebitratelistcollectcompletedeventsforHLSprotocolstreamplayback.
*Thiseventwillbereportedafterthe{@link#prepare}called.
*@since9
*@syscapSystemCapability.Multimedia.Media.AVPlayer
*@paramtypeTypeoftheplaybackeventtolistenfor.
*@paramcallbackCallbackusedtolistenfortheplaybackeventreturnavailablebitratelist.
*/
on(type:'availableBitrates',callback:(bitrates:Array)=>void):void;
off(type:'availableBitrates'):void;

簡單樣例

界面:

build(){
Stack({alignContent:Alignment.Center}){
if(this.isShowMenu){
Column(){
//視頻名稱
PlayTitle({title:this.displayName,handleBack:this.handleBack})
Row(){
//播放控件
PreVideo({handleClick:this.handlePrevClick})
PlayButton({isPlaying:$isPlaying})
NextVideo({handleClick:this.handleNextClick})
}
.margin({top:'40%'})

Blank()
//時間刻度
Row(){
Text(getTimeString(this.currentTime))
.fontSize(25)
.fontColor(Color.White)
Blank()
Text(this.fileAsset?getTimeString(this.fileAsset.duration):'00:00')
.fontSize(25)
.fontColor(Color.White)
}
.width('95%')
//進度條
Slider({value:this.fileAsset?this.currentTime/this.fileAsset.duration*100:0})
.width('92%')
.selectedColor(Color.White)
.onChange((value:number)=>{
Logger.info(TAG,'seektimechange')
this.currentTime=this.fileAsset.duration*value/100
this.videoPlayer.seek(this.currentTime)
})
}
.height('100%')
.zIndex(2)
}
Row(){
XComponent({
id:'componentId',
type:'surface',
controller:this.mxcomponentController
})
.onLoad(()=>{
Logger.info(TAG,'onLoadiscalled')
this.playVideo()
})
.width('100%')
.aspectRatio(this.ratio)
}
.height('100%')
.width('100%')
.justifyContent(FlexAlign.Center)
}
.width('100%')
.height('100%')
.backgroundColor(Color.Black)
.onClick(()=>{
this.isShowMenu=!this.isShowMenu
})
}
播放:
//根據視頻文件獲取視頻源尺寸并生成surface
//視頻文件的路徑在/storage/media/100/local/files/Videos
asyncprepareVideo(){
this.ratio=this.fileAsset.width/this.fileAsset.height
this.mxcomponentController.setXComponentsurfaceSize({
surfaceWidth:this.fileAsset.width,
surfaceHeight:this.fileAsset.height
})
this.surfaceId=this.mxcomponentController.getXComponentsurfaceId()
this.fd=awaitthis.fileAsset.open('Rw')
Logger.info(TAG,`fd://'${this.fd}`)
return'fd://'+this.fd
}
//初始化視頻文件并初始化avplayer
asyncplayVideo(){
Logger.info(TAG,'playVideo')
try{
awaitthis.getMediaList()
letfdPath=awaitthis.prepareVideo()
this.videoPlayer.on('timeUpdate',(time:number)=>{
console.info('timeUpdatesuccess,andnewtimeis:'+time)
this.currentTime=time;
})
awaitthis.videoPlayer.initVideoPlayer(fdPath,this.surfaceId)
this.isPlaying=true
}catch(error){
Logger.info(TAG,`playVideoerror${JSON.stringify(error)}`)
}
}

小結

參考鏈接:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-media.md#play9

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8694

    瀏覽量

    151927
  • 音視頻
    +關注

    關注

    4

    文章

    485

    瀏覽量

    29982
  • 視頻播放器
    +關注

    關注

    0

    文章

    33

    瀏覽量

    11895
  • 鴻蒙
    +關注

    關注

    57

    文章

    2392

    瀏覽量

    43057
  • OpenHarmony
    +關注

    關注

    25

    文章

    3747

    瀏覽量

    16588

原文標題:鴻蒙上制作一個視頻播放器

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【教學基地】07漂亮的視頻播放器

    ` 本帖最后由 a156789156782 于 2018-6-2 13:28 編輯 【教學視頻03007】labview視頻播放器通過本節視頻
    發表于 05-24 22:15

    基于LabVIEW的視頻播放器

    利用LabVIEW制作視頻播放器的主要方法都在這里了,高級版可以添加追蹤,還包含未完成的小論文,可以拿去當課程設計
    發表于 06-27 19:50

    如何制作單片機音樂播放器

    如何制作單片機音樂播放器
    發表于 10-15 08:08

    如何基于 OpenHarmony 制作簡單視頻播放器

    OpenHarmony視頻播放器作者“堅果,華為云享專家,InfoQ簽約作者,潤和軟件KOL專家,電子發燒友鴻蒙MVP,阿里云博客專家,開源項目gin-vue-admin成員之由于
    發表于 08-16 18:02

    網頁視頻播放器代碼

    網頁視頻播放器代碼
    發表于 01-10 11:23 ?102次下載
    網頁<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>代碼

    flv視頻播放器代碼

    flv視頻播放器代碼 FlV視頻播放器代碼 代碼如下這里只是介紹幾個例子,現在把代碼公布下,大家可以參考著做,也可以把你喜歡的
    發表于 01-10 12:36 ?2087次閱讀

    MP4播放器視頻播放格式有哪些?

    MP4播放器視頻播放格式有哪些?        
    發表于 12-21 15:51 ?2.4w次閱讀

    LXE播放器

    lxe視頻播放器軟件是免費軟件,可以完全免費使用、可以自由傳播,exe視頻播放器用于播放屏幕錄像專家錄制的LXE和EXE格式的錄像文件,安裝
    發表于 11-23 16:14 ?0次下載

    關于VR電影視頻播放器 盤點12款VR播放器

    VR電影和視頻那個播放器好,哪些播放器更為實用,由于視頻資源格式多樣,在
    發表于 06-27 15:50 ?12.7w次閱讀

    使用Arduino和DFPlayer迷你MP3播放器模塊制作帶有LCD的MP3播放器

    首歌和下首歌的功能。 詳細的可以看附件視頻。 責任編輯:xj 原文標題:如何使用Arduino和DFPlayer Mini制作帶LCD的MP3播放器 文章出處:【微信公眾號:電路設計
    的頭像 發表于 12-07 09:28 ?8577次閱讀

    基于Labview制作的音樂播放器源碼分享

    基于Labview制作的音樂播放器源碼分享
    發表于 12-01 10:07 ?75次下載

    如何利用Arduino UNO和SD卡制作音樂播放器

    前面用ATtiny85制作SD卡音樂播放器,本次主要利用Arduino UNO 和SD卡制作音樂播放器。這個播放器不需要添加多余的模塊,只需
    的頭像 發表于 04-13 16:45 ?8187次閱讀
    如何利用Arduino UNO和SD卡<b class='flag-5'>制作</b>音樂<b class='flag-5'>播放器</b>

    HarmonyOS開發案例:【視頻播放器

    基于video、swiper和slider組件,實現簡單的視頻播放器,可支持海報輪播、視頻播放等功能。
    的頭像 發表于 04-22 21:06 ?554次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>】

    HarmonyOS開發案例:【視頻播放器

    使用ArkTS語言實現視頻播放器,主要包括主界面和視頻播放界面,
    的頭像 發表于 04-23 17:25 ?789次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>】

    HarmonyOS開發案例:【視頻播放器

    使用ArkTS語言實現視頻播放器,主要包括主頁面和視頻播放頁面
    的頭像 發表于 04-24 14:52 ?988次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>視頻</b><b class='flag-5'>播放器</b>】
    主站蜘蛛池模板: av免费网站在线观看 | 四虎在线观看 | 美女视频毛片 | 国产精品热久久毛片 | 久久久午夜精品理论片 | 上课被同桌摸下面做羞羞 | 三级视频网站在线观看 | 手机看片福利在线 | 日本口工全彩无遮拦漫画大 | 天天干天天操天天拍 | 亚洲伊人久久大香线蕉啊 | 二区久久国产乱子伦免费精品 | 国产精品一区在线播放 | 特级毛片网站 | 四虎黄色网 | 日本免费一级视频 | 国产精品午夜自在在线精品 | 色色色色色色色色色色色色 | 天堂资源在线播放 | 欧美成人xxxx | 免费播放欧美毛片欧美aaaaa | 日本黄大乳片免费观看 | www亚洲免费 | 免费在线黄色网址 | 55夜色66夜色国产精品站 | 在线播放 你懂的 | 午夜精品久久久久久毛片 | 不卡免费在线视频 | 全国最大色成免费网站 | 最好看最新的中文字幕1 | 日本又粗又长一进一出抽搐 | 国产乱码精品一区二区 | 欧美成人全部免费观看1314色 | 久久久久88色偷偷免费 | 视频午夜| 伊人久久综合成人网小说 | 亚洲国产色婷婷精品综合在线观看 | 1024视频色版在线网站 | 日本动漫免费看 | 国产精品第九页 | 丁香伊人五月综合激激激 |