国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

淺析 MediaCodec 工作原理

共 10564字,需瀏覽 22分鐘

 ·

2021-12-12 22:03

原文鏈接: https://juejin.cn/post/7032224346491846687

1. MediaCodec工作原理

MediaCodec類Android提供的用于訪問低層多媒體編/解碼器接口,它是Android低層多媒體架構(gòu)的一部分,通常與MediaExtractor、MediaMuxer、AudioTrack結(jié)合使用,能夠編解碼諸如H.264、H.265、AAC、3gp等常見的音視頻格式。

廣義而言,MediaCodec的工作原理就是處理輸入數(shù)據(jù)以產(chǎn)生輸出數(shù)據(jù)。具體來說,MediaCodec在編解碼的過程中使用了一組輸入/輸出緩存區(qū)來同步或異步處理數(shù)據(jù):首先,客戶端向獲取到的編解碼器輸入緩存區(qū)寫入要編解碼的數(shù)據(jù)并將其提交給編解碼器,待編解碼器處理完畢后將其轉(zhuǎn)存到編碼器的輸出緩存區(qū),同時收回客戶端對輸入緩存區(qū)的所有權(quán);

然后,客戶端從獲取到編解碼輸出緩存區(qū)讀取編碼好的數(shù)據(jù)進(jìn)行處理,待處理完畢后編解碼器收回客戶端對輸出緩存區(qū)的所有權(quán)。不斷重復(fù)整個過程,直至編碼器停止工作或者異常退出。

MediaCodec原理

2. MediaCodec編碼過程

在整個編解碼過程中,MediaCodec的使用會經(jīng)歷配置、啟動、數(shù)據(jù)處理、停止、釋放幾個過程,相應(yīng)的狀態(tài)可歸納為停止 (Stopped) ,執(zhí)行 (Executing) 以及釋放(Released)三個狀態(tài),而Stopped狀態(tài)又可細(xì)分為未初始化(Uninitialized)、配置(Configured)、異常( Error),Executing狀態(tài)也可細(xì)分為讀寫數(shù)據(jù)(Flushed)、運行(Running)和流結(jié)束(End-of-Stream)。MediaCodec整個狀態(tài)結(jié)構(gòu)圖如下:


從上圖可知,當(dāng)MediaCodec被創(chuàng)建后會進(jìn)入未初始化狀態(tài),待設(shè)置好配置信息并調(diào)用start()啟動后,MediaCodec會進(jìn)入運行狀態(tài),并且可進(jìn)行數(shù)據(jù)讀寫操作。

如果在這個過程中出現(xiàn)了錯誤,MediaCodec會進(jìn)入Stopped狀態(tài),我們就是要使用reset方法來重置編解碼器,否則MediaCodec所持有的資源最終會被釋放。

當(dāng)然,如果MediaCodec正常使用完畢,我們也可以向編解碼器發(fā)送EOS指令,同時調(diào)用stop和release方法終止編解碼器的使用。

2.1 創(chuàng)建編/解碼器

MediaCodec主要提供了createEncoderByType(String type)、createDecoderByType(String type)兩個方法來創(chuàng)建編解碼器,它們均需要傳入一個MIME類型多媒體格式。常見的MIME類型多媒體格式如下:

● "video/x-vnd.on2.vp8" - VP8 video (i.e. video in .webm)
● "video/x-vnd.on2.vp9" - VP9 video (i.e. video in .webm)
● "video/avc" - H.264/AVC video
● "video/mp4v-es" - MPEG4 video
● "video/3gpp" - H.263 video
● "audio/3gpp" - AMR narrowband audio
● "audio/amr-wb" - AMR wideband audio
● "audio/mpeg" - MPEG1/2 audio layer III
● "audio/mp4a-latm" - AAC audio (note, this is raw AAC packets, not packaged in LATM!)
● "audio/vorbis" - vorbis audio
● "audio/g711-alaw" - G.711 alaw audio
● "audio/g711-mlaw" - G.711 ulaw audio

當(dāng)然,MediaCodec還提供了一個createByCodecName (String name)方法,支持使用組件的具體名稱來創(chuàng)建編解碼器。但是該方法使用起來有些麻煩,且官方是建議最好是配合MediaCodecList使用,因為MediaCodecList記錄了所有可用的編解碼器。

當(dāng)然,我們也可以使用該類對傳入的 minmeType 參數(shù)進(jìn)行判斷,以匹配出MediaCodec對該mineType類型的編解碼器是否支持。以指定MIME類型為“video/avc”為例,代碼如下:

 private static MediaCodecInfo selectCodec(String mimeType) {
// 獲取所有支持編解碼器數(shù)量
int numCodecs = MediaCodecList.getCodecCount();
for (int i = 0; i < numCodecs; i++) {
// 編解碼器相關(guān)性信息存儲在MediaCodecInfo中
MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
// 判斷是否為編碼器
if (!codecInfo.isEncoder()) {
continue;
}
// 獲取編碼器支持的MIME類型,并進(jìn)行匹配
String[] types = codecInfo.getSupportedTypes();
for (int j = 0; j < types.length; j++) {
if (types[j].equalsIgnoreCase(mimeType)) {
return codecInfo;
}
}
}
return null;
}

2.2 配置、啟動編/解碼器

編解碼器配置使用的是MediaCodec的configure方法,該方法首先對MediaFormat存儲的數(shù)據(jù)map進(jìn)行提取,然后調(diào)用本地方法native_configure實現(xiàn)對編解碼器的配置工作。

在配置時,configure方法需要傳入format、surface、crypto、flags參數(shù),其中format為MediaFormat的實例,它使用"key-value"鍵值對的形式存儲多媒體數(shù)據(jù)格式信息;

surface用于指明解碼器的數(shù)據(jù)源來自于該surface;crypto用于指定一個MediaCrypto對象,以便對媒體數(shù)據(jù)進(jìn)行安全解密;flags指明配置的是編碼器(CONFIGURE_FLAG_ENCODE)。

MediaFormat mFormat = MediaFormat.createVideoFormat("video/avc", 640 ,480);     // 創(chuàng)建MediaFormat
mFormat.setInteger(MediaFormat.KEY_BIT_RATE,600); // 指定比特率
mFormat.setInteger(MediaFormat.KEY_FRAME_RATE,30); // 指定幀率
mFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT,mColorFormat); // 指定編碼器顏色格式
mFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL,10); // 指定關(guān)鍵幀時間間隔
mVideoEncodec.configure(mFormat,null,null,MediaCodec.CONFIGURE_FLAG_ENCODE);

以上代碼是在編碼 H.264 時的配置方法,createVideoFormat("video/avc", 640 ,480)為"video/avc"類型(即H.264)編碼器的MediaFormat對象,需要指定視頻數(shù)據(jù)的寬高,如果編解碼音頻數(shù)據(jù),則調(diào)用MediaFormat的createAudioFormat(String mime, int sampleRate,int channelCount)的方法。

除了一些諸如視頻幀率、音頻采樣率等配置參數(shù),這里需要著重講解一下MediaFormat.KEY_COLOR_FORMAT配置屬性,該屬性用于指明video編碼器的顏色格式,具體選擇哪種顏色格式與輸入的視頻數(shù)據(jù)源顏色格式有關(guān)。

比如,我們都知道Camera預(yù)覽采集的圖像流通常為NV21或YV12,那么編碼器需要指定相應(yīng)的顏色格式,否則編碼得到的數(shù)據(jù)可能會出現(xiàn)花屏、疊影、顏色失真等現(xiàn)象。

MediaCodecInfo.CodecCapabilities.存儲了編碼器所有支持的顏色格式,常見顏色格式映射如下:

原始數(shù)據(jù)                            編碼器
NV12(YUV420sp) ---------> COLOR_FormatYUV420PackedSemiPlanar
NV21 ----------> COLOR_FormatYUV420SemiPlanar
YV12(I420) ----------> COLOR_FormatYUV420Planar

當(dāng)編解碼器配置完畢后,就可以調(diào)用 MediaCodec 的start()方法,該方法會調(diào)用低層native_start()方法來啟動編碼器,并調(diào)用低層方法ByteBuffer[] getBuffers(input)來開辟一系列輸入、輸出緩存區(qū)。start()方法源碼如下:

public final void start() {
native_start();
synchronized(mBufferLock) {
cacheBuffers(true /* input */);
cacheBuffers(false /* input */);
}
}

2.3 數(shù)據(jù)處理

MediaCodec支持兩種模式編解碼器,即同步synchronous、異步asynchronous,所謂同步模式是指編解碼器數(shù)據(jù)的輸入和輸出是同步的,編解碼器只有處理輸出完畢才會再次接收輸入數(shù)據(jù);

異步編解碼器數(shù)據(jù)的輸入和輸出是異步的,編解碼器不會等待輸出數(shù)據(jù)處理完畢才再次接收輸入數(shù)據(jù)。

這里,我們主要介紹下同步編解碼,因為這種方式我們用得比較多。我們知道當(dāng)編解碼器被啟動后,每個編解碼器都會擁有一組輸入和輸出緩存區(qū),但是這些緩存區(qū)暫時無法被使用,只有通過MediaCodec的dequeueInputBuffer/dequeueOutputBuffer方法獲取輸入輸出緩存區(qū)授權(quán),通過返回的ID來操作這些緩存區(qū)。

下面我們通過一段官方提供的代碼,進(jìn)行擴(kuò)展分析:

 MediaCodec codec = MediaCodec.createByCodecName(name);
codec.configure(format, …);
MediaFormat outputFormat = codec.getOutputFormat(); // option B
codec.start();
for (;;) {
int inputBufferId = codec.dequeueInputBuffer(timeoutUs);
if (inputBufferId >= 0) {
ByteBuffer inputBuffer = codec.getInputBuffer(…);
// fill inputBuffer with valid data

codec.queueInputBuffer(inputBufferId, …);
}
int outputBufferId = codec.dequeueOutputBuffer(…);
if (outputBufferId >= 0) {
ByteBuffer outputBuffer = codec.getOutputBuffer(outputBufferId);
MediaFormat bufferFormat = codec.getOutputFormat(outputBufferId); // option A
// bufferFormat is identical to outputFormat
// outputBuffer is ready to be processed or rendered.

codec.releaseOutputBuffer(outputBufferId, …);
} else if (outputBufferId == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) {
// Subsequent data will conform to new format.
// Can ignore if using getOutputFormat(outputBufferId)
outputFormat = codec.getOutputFormat(); // option B
}
}
codec.stop();
codec.release();

從上面代碼可知,當(dāng)編解碼器start后,會進(jìn)入一個for(;;)循環(huán),該循環(huán)是一個死循環(huán),以實現(xiàn)不斷地去從編解碼器的輸入緩存池中獲取包含數(shù)據(jù)的一個緩存區(qū),然后再從輸出緩存池中獲取編解碼好的輸出數(shù)據(jù)。

  • 獲取編解碼器的輸入緩存區(qū),寫入數(shù)據(jù)

首先,調(diào)用MediaCodec的dequeueInputBuffer(long timeoutUs)方法從編碼器的輸入緩存區(qū)集合中獲取一個輸入緩存區(qū),并返回該緩存區(qū)的下標(biāo)index,如果index=-1說明暫時可用緩存區(qū),當(dāng)timeoutUs=0時dequeueInputBuffer會立馬返回。

接著調(diào)用MediaCodec的getInputBuffer(int index),該方法會將index傳入給本地方法getBuffer(true /* input */, index)返回該緩存區(qū)的ByteBuffer,并且將獲得的ByteBuffer對象及其index存儲到BufferMap對象中,以便輸入結(jié)束后對該緩存區(qū)作釋放處理,交還給編解碼器。getInputBuffer(int index)源碼如下:

    @Nullable
public ByteBuffer getInputBuffer(int index) {
ByteBuffer newBuffer = getBuffer(true /* input */, index);
synchronized(mBufferLock) {
invalidateByteBuffer(mCachedInputBuffers, index);
// mDequeuedInputBuffers是BufferMap的實例
mDequeuedInputBuffers.put(index, newBuffer);
}
return newBuffer;
}

然后,在獲得輸入緩沖區(qū)后,將數(shù)據(jù)填入數(shù)據(jù)并使用queueInputBuffer將其提交到編解碼器中處理,同時將輸入緩存區(qū)釋放交還給編解碼器。queueInputBuffer源碼如下:

    public final void queueInputBuffer(
int index,
int offset, int size, long presentationTimeUs, int flags)

throws CryptoException
{
synchronized(mBufferLock) {
invalidateByteBuffer(mCachedInputBuffers, index);
// 移除輸入緩存區(qū)
mDequeuedInputBuffers.remove(index);
}
try {
native_queueInputBuffer(
index, offset, size, presentationTimeUs, flags);
} catch (CryptoException | IllegalStateException e) {
revalidateByteBuffer(mCachedInputBuffers, index);
throw e;
}
}

由上述代碼可知,queueInputBuffer主要通過調(diào)用低層方法native_queueInputBuffer實現(xiàn),該方法需要傳入5個參數(shù),其中index是輸入緩存區(qū)的下標(biāo),編解碼器就是通過index找到緩存區(qū)的位置;

offset為有效數(shù)據(jù)存儲在buffer中的偏移量;size為有效輸入原始數(shù)據(jù)的大?。籶resentationTimeUs為緩沖區(qū)顯示時間戳,通常為0;flags為輸入緩存區(qū)標(biāo)志,通常設(shè)置為 BUFFER_FLAG_END_OF_STREAM。

  • 獲取編解碼器的輸出緩存區(qū),讀出數(shù)據(jù)

?首先,與上述通過dequeueInputBuffer和getInputBuffer獲取輸入緩存區(qū)類似,MediaCodec也提供了dequeueOutputBuffer和getOutputBuffer方法用來幫助我們獲取編解碼器的輸出緩存區(qū)。

但是與dequeueInputBuffer不同的是,dequeueOutputBuffer還需要傳入一個MediaCodec.BufferInfo對象。MediaCodec.BufferInfo是MediaCodec的一個內(nèi)部類,它記錄了編解碼好的數(shù)據(jù)在輸出緩存區(qū)中的偏移量和大小。

  public final static class BufferInfo {
public void set(
int newOffset, int newSize, long newTimeUs, @BufferFlag int newFlags)
{
offset = newOffset;
size = newSize;
presentationTimeUs = newTimeUs;
flags = newFlags;
}
public int offset // 偏移量
public int size; // 緩存區(qū)有效數(shù)據(jù)大小
public long presentationTimeUs; // 顯示時間戳
public int flags; // 緩存區(qū)標(biāo)志

@NonNull
public BufferInfo dup() {
BufferInfo copy = new BufferInfo();
copy.set(offset, size, presentationTimeUs, flags);
return copy;
}
};

然后,通過dequeueOutputBuffer的源碼可知,當(dāng)dequeueOutputBuffer返回值>=0時,輸出緩存區(qū)的數(shù)據(jù)才是有效的。

當(dāng)調(diào)用本地方法native_dequeueOutputBuffer返回INFO_OUTPUT_BUFFERS_CHANGED時,會調(diào)用cacheBuffers方法重新獲取一組輸出緩存區(qū)mCachedOutputBuffers(ByteBuffer[])。

這就解釋了如果我們使用getOutputBuffers方法(API21后被棄用,使用getOutputBuffer(index)代替)來獲取編解碼器的輸出緩存區(qū),那么就需要在調(diào)用dequeueOutputBuffer判斷其返回值,如果返回值為MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED,則需要重新獲取輸出緩存區(qū)集合。

此外,這里還要dequeueOutputBuffer的另外兩個返回值:MediaCodec.INFO_TRY_AGAIN_LATER、MediaCodec.INFO_OUTPUT_FORMAT_CHANGED,前者表示獲取編解碼器輸出緩存區(qū)超時,后者表示編解碼器數(shù)據(jù)輸出格式改變,隨后輸出的數(shù)據(jù)將使用新的格式。

因此,我們需要在調(diào)用dequeueOutputBuffer判斷返回值是否為INFO_OUTPUT_FORMAT_CHANGED,需要通過MediaCodec的getOutputFormat重新設(shè)置MediaFormt對象。

  public final int dequeueOutputBuffer(
@NonNull BufferInfo info, long timeoutUs)
{
int res = native_dequeueOutputBuffer(info, timeoutUs);
synchronized(mBufferLock) {
if (res == INFO_OUTPUT_BUFFERS_CHANGED) {
// 將會調(diào)用getBuffers()底層方法
cacheBuffers(false /* input */);
} else if (res >= 0) {
validateOutputByteBuffer(mCachedOutputBuffers, res, info);
if (mHasSurface) {
mDequeuedOutputInfos.put(res, info.dup());
}
}
}
return res;
}

最后,當(dāng)輸出緩存區(qū)的數(shù)據(jù)被處理完畢后,通過調(diào)用MediaCodec的releaseOutputBuffer釋放輸出緩存區(qū),并交還給編解碼器,該輸出緩存區(qū)將不能被使用,直到下一次通過dequeueOutputBuffer獲取。

releaseOutputBuffer方法接收兩個參數(shù):Index、render,其中,Index為輸出緩存區(qū)索引;render表示當(dāng)配置編碼器時指定了surface,那么應(yīng)該置為true,輸出緩存區(qū)的數(shù)據(jù)將被傳遞到surface中。源碼如下:

   public final void releaseOutputBuffer(int index, boolean render) {
BufferInfo info = null;
synchronized(mBufferLock) {
invalidateByteBuffer(mCachedOutputBuffers, index);
mDequeuedOutputBuffers.remove(index);
if (mHasSurface) {
info = mDequeuedOutputInfos.remove(index);
}
}
releaseOutputBuffer(index, render, false /* updatePTS */, 0 /* dummy */);
}



推薦閱讀:

Android FFmpeg 實現(xiàn)帶濾鏡的微信小視頻錄制功能

全網(wǎng)最全的 Android 音視頻和 OpenGL ES 干貨,都在這了

一文掌握 YUV 圖像的基本處理

抖音傳送帶特效是怎么實現(xiàn)的?

所有你想要的圖片轉(zhuǎn)場效果,都在這了

面試官:如何利用 Shader 實現(xiàn) RGBA 到 NV21 圖像格式轉(zhuǎn)換?

我用 OpenGL ES 給小姐姐做了幾個抖音濾鏡

瀏覽 81
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 欧美午夜精品久久久久免费视| 欧美少妇视频| 夜夜撸天天干| 中文字幕在线乱| 丁香五月在线播放| 午夜无码久久| 先锋影音男人| 久久99精品国产麻豆婷婷洗澡| 免费一级A片| 免费一级a片| 91九色在线观看| 日韩av毛片| 91国语对白| 亚洲天堂日本| 国产av一区二区三区四区| 黄色无码在线观看| av资源观看| 中文字幕丰满的翔田千里| 天天操人人爽| 婷婷视频导航| AV女优天堂| 豆花精品视频| 人人爱人人插高清| 国产性爱一级片| 中文字幕不卡AV在线观看| 人人操人人色| 91在线无码精品秘国产三年| 成人一级A片| 日韩电影无码| 日韩操b| 先锋影音资源av| 国产精品秘麻豆免费版现看视频 | 成人777777免费视频色| 欧美成人手机在线观看| 啪啪动漫| 国产福利电影在线| 蜜桃做爱| 在线观看AV网站| 大吊操| 亚洲一区高清无码| 日韩无码人妻一区| 一区二区三区福利| 日韩中文字幕专区| 一级a一级a免费观看免免黄‘/| 成人蜜臀AV| 日韩视频一级| 丰满人妻一区二区三区视频在线不卡 | 99精品久久| 中文字幕人妻无码| 色综合欧美| 午夜探花在线观看| 肏屄视频在线播放| 欧美裸体视频| 久草视频在线资源| 免费一级婬片AA片观看| 欧美日韩一级视频| 国产调教视频| 欧美性猛交XXXX乱大交3| 国产Av一区二区三区| 伊人9999| 亚洲无码系列| 黄色三级视频在线观看| 91在线无码精品秘国产三年| 日本免费高清视频在线观看一区 | 国产精品无码不卡| 欧美午夜影院| 亚洲第一成人久久网站| 成人动漫| 99久久精品国产一区二区三区 | 91在线视频免费| 一本色道久久无码人妻精品69| 亚洲无码激情视频| 五月天久久精品| 大香蕉三级| 日本欧美一级| 天天视频黄色| 日韩一级电影在线观看| 免费A视频| 一区二区AV| 怡红院成人网| 色操人 | 草莓视频在线播放| 久久无码一区二区三区| 大香蕉日韩| 国产大鸡吧| 蜜桃视频一区二区三区| 成人激情视频A极| 三级片在线观看网站| 日本无码片| 婷婷视频导航| 一级黄片免费视频| 成人午夜无码| 免费无码婬片AAAA片老婦| 三级片中文| 亚洲制服在线观看| 亚洲影院在线观看| 91精品人妻一区二区三区蜜桃| 夜夜骚AV一二三区无码| 五月天av在线观看| 韩日高清无码| 99三级片| 国产视频h| 成人在线毛片| 一区二区三区四区视频在线 | 丁香花在线小说免费全文| 狠狠干高清成人二区三区| av在线资源网站| 最新av网| 狠狠色五月| 日韩三级片在线视频| 911国产精品| 日韩视频精品| 国产乱伦网| 99热国产在线| youjizzcom日本| 性欧美XXXX| 1024大香蕉| 日韩亚洲精品中文字幕| 国产乱码一区二区三区的区别| 日本高清无码在线| 伊人激情五月天| 日本免费一级片| 翔田千里无码| 亚洲自拍天堂| 九九成人精品| 蜜臀久久久99久久久久久久| 91久久精品一区二区三| 中文精品字幕人妻熟女| 婷婷色导航| 亚洲AV无码第一区二区三区蜜桃| 肉色超薄丝袜脚交一区二区| 偷拍一区二区三区| 欧美av| 免费无码婬片AAAA片直播| 无码一区二区免费| 欧亚无码| 久久成人在线视频| 在线观看三级| www.97色| www.99精品| 无码第一页| 欧美日韩逼| 91视频综合网| 大香蕉综合网站| 亚洲日韩免费视频| 三级成人网| 污网站在线观看| 天天操天天干麻豆| 91人人妻人人澡人人爽人人精品| 五月丁香激情婷婷| 操逼视频在线看| A无码| 精品无码久久久久久久久app | 91吴梦梦一区二区传媒| 在线h片| 蜜柚av| 国产精品久久久久的角色| 在线高清无码视频| 黄色电影视频网站| av无码观看| 91一区| 精品中文一区二区三区| 欧美少妇做爱| 一区二区三区无码高清| 成年人网站在线免费观看| 亚洲黄色av| 无码视频免费播放| 91人人妻人人操| 免费操逼视频在线观看| 操中国老女人| 伊人综合久久| 日韩在线中文字幕| 久久综合五月天| 五月网站| 2025四虎在线视频观看| 精品秘一区性综合三区| 97中文字幕在线| 在线色| 日韩a| 亚洲精品系列| 91AV免费在线观看| 成人免费黄色| 日韩东京热中文字幕| 免费观看黄色网| 91鲁| 激情综合婷婷| 开心色色五月天| 精品国产乱码| 伊人九九热| 夜夜骚av一区二区三区| 少妇搡BBBB搡BBB搡打电话| 欧美高清另类| 久久精品一区二区三区蜜芽的特点| 欧美天天| 大香蕉在线视频观看| 真人BBwBBWBBw另类视频| 国产成人亚洲综合A∨婷婷| 91婷婷| 天天干少妇| 99久久精品国产一区二区三区 | 中文字幕不卡一区| 欧美777| 在线观看免费黄视频| 日韩激情av| 成人网| 日韩视频一级| 国产粗大| 免费欧美性爱视频| 国产成人+综合亚洲+天堂| 一级婬片A片AAAAA毛片| 人人色人人看| 国产日韩精品无码去免费专区国产| 欧美性BBwBBwBBwHD| 天天综合天天| 日韩在线精品| 亚洲AV无码一区二区三竹菊| 国产91在线拍揄自揄拍无码九色| 在线激情网站| 国产精品黄| 无码国产传媒精品一区| 亚洲人成电影网| 国产一级a一级a免费视频| 亚洲精品成人| 无码在线专区| 玖玖成人电影| 91在线免费视频| 色色色色AV| 成人无码区免费A片在线软件| 天天综合色| 午夜成人免费福利| 日本视频一区二区| 在线小视频| 精品国产免费无码久久噜噜噜AV| 欧美精品在线观看视频| 成人在线视频网站| 国产精品偷拍视频| 亚洲AV大片| 欧美亚洲视频| 无码在线播放视频| 一级黄色视频免费看| 人人操人人射| AAA片视频| 无码免费一区| 91日综合欧美| 无码人妻一区二区三区在线视频不卡 | 欧美成人黄色| 囯产精品久久久久久久久久久久久久| 国产av在| 九色精品| 91在线无码视频| 婷婷精品在线视频| 国产综合久久| 99久久亚洲精品日本无码| 99热播| AⅤ中文字幕在线免费观看| 北条麻妃99精品青青久久| igao视频| 午夜老司机福利| 暖暖高清无码| 老女人的逼| 操美女91| 九九热在线精品| 丝瓜视频污APP| 2025中文字幕在线| 久久99精品视频| 欧美成人性色欲影院| 欧美色视频一区二区三区在线观看 | 久久综合五月| 一本色道久久综合狠狠| 国产男女无套免费视频| 国产性爱网站| 中文字幕在线乱| 99精品视频在线观看免费| 丰满的人妻一区二区10| 在线无码中文| www.色999| 欧美色图888| 国产精品无码无套在线| 久草网在线观看| 人妻二区| 18禁网站网址| 开心色情| 日本一级A片| 人人操人人模| 日韩特黄| av天堂资源| 成人做爰黄AAA片免费直播岛国 | 人妻一区二区三区| 麻豆传媒免费观看| 日韩人妻精品无码久久| 免费无码国产| 婷婷五月天亚洲| 日韩精品黄片| 三级片在线网站| 免费V片在线观看| 一本色道久久综合无码| 另类老妇奶性生BBwBB| 色黄视频在线观看| 天天干天天射天天操| 国产精品视频在线播放| 国产艹逼视频| 日韩免费网| 国产成人无码在线| 在线视频三区| 久久久久久久精| 国产变态另类| 无码av一区| 国产免费精彩视频| 黄视频在线观看免费| 亚洲激情黑人| 成人AV一区二区三区| 欧美日韩成人| 真人BBwBBWBBw另类视频| 欧美日皮视频| 天天爽夜夜爽夜夜爽精品| 成人影片在线观看网站18| 无码人妻AV一区| 中文字幕亚洲在线观看| 欧美一级片免费观看| 草久在线视频| 蜜臀久久99久久久久久宅男| 午夜AV无码| 国产福利在线导航| 无码AV一区二区| 亚洲视频A| 亚洲无码自拍偷拍| 人人操97| 日韩精品久久久久久久| 91av在线电影| 日韩精品人妻中文字幕| 江苏妇搡BBBB搡BBBB-百度| 国产在线成人| 亚洲无码中文字幕在线| 嫩BBB槡BBBB槡BBB| 少妇A片| 一区二区三区AV| 国产乱人伦无码视频| 亚洲天堂影院| 我要操影院| 国产清纯可爱美女自卫裸贷偷情| 精品99999| 黑人vs亚洲人在线播放| 成人小说一区二区三区| 91国产福利| 99精品视频免费| 久久九九国产精品怡红院| 中文字幕精品在线观看| 四川少妇bbb| 日本A级视频| 二区三区视频| 亚洲免费观看视频| 亚洲中文无码电影| 大香蕉一级红色片青青河边草 | 亚洲日韩精品在线视频| 一级A黄色片| 亚洲人人18XXX—20HD| 人人澡人人看| 福利一区在线观看| 国产黄色电影在线观看| 中国老女人性爱视频| 无毛无码| 欧美a√| 亚洲精品少妇| 五月天激情电影| 丰满熟妇人妻无码视频| 成人喷水亚洲一区无码| 免费av片| 激情无码五月天| 狠狠干狠狠色| 久久免费视频网站| 91狠狠综合| 中文字幕无码成人| 一级国产黄色视频| a视频免费观看| 91三级片在线播放| 亚洲资源在线观看| 久久肏逼| 影音先锋av在线资源站| 91丨九色丨熟女丰满| 二区三区在线观看| 久久精品视频18| 男女av网站| 一线天嫩穴少妇| 成人在线不卡| 午夜理论在线| 69AV在线观看| 欧美日韩人妻| 18禁网站网址| 九色PORNY国产成人| 成人精品一区日本无码网站suv/| 国产精品资源| 成人视频一区| 精品吃奶一区二区三区视频| 免费高清无码视频| 91人妻无码精品一区二区三区| 国产日韩欧美综合精品在线观看| 色老板亚洲| 韩国一区二区在线观看| 无码免费看| 亚洲天堂高清| 高清毛片AAAAAAAAA片| 尤物视频网| 国产精品无码激情| 午夜视频在线| 无码在线电影| 美女被操网站免费| 中文字幕av在线| 国产美女av| 操逼无码| 初尝人妻滑进去了莹莹视频| 伊人综合色| 97人人爽人人爽人人人| 无码蜜桃吴梦梦| 国产AV资源| 亚洲AV无码乱码A片无码沈樵| 人人色人人| 99在线国产| 天天干精品| 黄色电影免费在线观看| 日韩在线播放视频| 女人18片毛片60分钟翻译 | 久久久精品国产视频| 日本中文字幕电影| 不卡a12| 成年人性生活免费视频| 99黄色视频| 国产毛片一区| 一級免費网站| 大鸡巴在线观看| 国产第8页| 久久久无码电影| 丁香六月激情| 99精品热视频| 91人人妻人人| 99热免费| 欧美熟妇性爱| www.199麻豆在线观看网站| 免费看毛片中文字幕| 日韩精品视频在线免费观看| 青青久热| 波多野结衣高清av久久直播免| 久久久久免费视频| 婷婷久久综合久| WWWA级片| 97无码视频| 中文三区| 中文字幕无码A片| 大香蕉福利视频导航| 黄色成人视频在线免费观看| 福利无码| 久久天堂一区| 欧美日韩黄片| 在线免费观看中文字幕| 一区二区三区无码精品| 影音先锋人妻资源| 偷拍综合网| 豆花视频免费观看| av天堂一区| 手机不卡黄色视频在线| 色哟哟国产| 亚洲AV无码专区在线播放中文 | 欧美亚洲日韩在线观看| 在线免费观看国产视频| 一区精品| 一级a一级a爱片免费免免高潮| 亚洲AⅤ无码一区二区波多野按摩| 日日操天天操夜夜操| 四虎精品影院| 国产麻豆精品成人毛片| 天天操超碰| 91黄色毛片| 中文字幕日韩有码| 亚洲a级| 在线观看av资源| 骚妇一区| 99色视频| 加勒比无码在线播放| 欧美污视频在线观看| 精品国产乱子伦一区二区三区,小小扐 | 不卡a12| 国产成人三级在线播放| 大香蕉久热| 欧美AA级毛片| 中文字幕淫乱视频欧美| 高清国产mv在线观看| 日本aa视频| 91日韩视频在线| 波多野结衣高清无码视频| 午夜爱爱免费视频| 日本免费黄色视频| 国产免费www| 黑人干亚洲人| 口爆在线观看| 亚洲理论视频| 日本色天堂| 国产欧美激情| 欧美老女人操逼| 国产精品77777| 中文字幕国产一区| 米奇电影777无码| 亚洲WWW| 久久久久久性爱| 亚洲五月丁香婷婷| 国产51视频| 人妻第一页| 无码理论片| 五月婷在线观看| 91二区| 伊人久久福利视频| 九色在线观看| 免费的av网站| 五月激情天| 亚洲区综合| 亚洲成人一区二区三区| 台湾成人视频| 日韩A片在线| 黄色小说在线播放| 在线观看高清无码中文字幕| 精品在线免费观看| 国产亚洲日韩在线| 一级黄色电影免费| 8x8拨牐拨牐拨牐永久免费| 久久香蕉人| www.91自拍| 99人人操| 久久精品秘一区二区三免费 | 青青在线免费视频| 东北奇淫老老妇| 欧美色乱| 黄色电影免费在线观看| 天天射天天爽| 波多野结衣亚洲视频| 久久久久亚洲AV无码专区| 日本三级黄色视频| 日韩精品三区| 91精品国产综合久久久蜜臀九色| 视色网站| 亚洲免费人妻| 久久久午夜| 久久亚洲福利视频| av在线无码| www亚洲无码| 91九色91蝌蚪91成人| 成人永久免费视频| 黄网站欧美内射| 日韩一级一片内射视频4K| 亚洲51| 日本黄色视频网址| 七六十路の高齢熟妇无码| 高清无码视频免费| 亚洲播播在线视频| 高清操逼| 亚洲一级无码| 国产一区二区AV| www.一区二区| 中日毛片| 一级黄色生活片| 亚洲免费观看高清完整| 在线观看三级网址| A片网| 亚洲高清在线播放| 亚洲乱伦视频| 久久做爱视频| 18精品爽国产冫绿帽社| 久久久久一区二区三区| 西西444WWW无码视频软件| 黄色内射在线播放| 在线中文字幕网站| 午夜精品18视频国产17c| 天堂在线www| 成人aV无码精品国产一区二区| 一本一道波多野结衣潮喷视频| 东京热观看| 色色色成人视频| 国产精品内射| 免费a在线观看| 人妻FrXXeeXXee护士| 伊人国产女| 国产成人午夜精品无码区久久麻豆| 国产无码观看| 91就去干| 黄色一级片免费在线观看| aaa免费| 国产视频久久| 亚洲中文字幕AV| 日韩国产高清无码| 丰满少妇一区二区三区| 欧美性少妇| 三级片无码麻豆视频| 波多野结衣在线观看一区二区| 亚洲Av秘无码一区二区| 综合av| 亚洲国产精品成人网站| 免费看欧美日黄片| 黄色无码视频| 精品无码一区二区三| 亚洲专区视频| 日韩欧美高清第一期| 亚洲成人大香蕉| 国产高清A片| 五月丁香色播| 亚洲欧洲精品视频| 国产精品国产三级国产AⅤ| 成人免费无码激情AV片| 内射黄片| 欧美又粗又大AAA片| 国产美女精品久久AV爽| 美女黄网站| 亚洲电影在线观看| 中文字幕久久无码| 四虎成人网站| 欧美亚洲激情| 97精品在线视频| 蜜臀av一区二区| 一级性爽A√毛片| 九九热视频在线观看| 天堂在线观看av| 亚洲三级无码在线| 久久精彩免费视频| 亚洲天堂无码av| 九九re精品视频在线观看| 亚洲日韩精品欧美一区二区yw| 国产一级a毛片| 国产中文字幕AV| 少妇高潮av久久久久久| 天天操天天干欧美精品| 久久性爱视频| 综合+++夜夜| 黄片视频大全| 91精品人妻一区二区三区蜜桃| 日本一区二区三区免费视频| 人人干人人艹| 国产乱视频| 免费一级黄色视频| 麻豆人妻换人妻好紧| 自拍在线| 日韩免费三级片| 91丨国产丨精品丨丝袜| 91人人妻人人澡| 日本爱爱视频免费| 性满足BBWBBWBBW| 日韩三级在线观看| 手机看片1204| 免费黄片网站在线观看| 亚洲综合视频在线| 一级黄色片视频| 免费无码毛片| 久草热在线| 中文字幕AV无码| 免费AV大全| 一级婬片A片AAAA毛片A级| 色色视频网站| 99精品视频在线播放免费| 成年人观看视频| 国产在线成人| 亚洲a视频| 操逼网站免费| 午夜天堂精品久久久久| 大香蕉久草| 91日韩| 91视频在线观看免费| 精品视频一区二区| 99在线免费视频| 白洁91视频| S28AV| 先锋影音一区二区三区| av色站| 蜜桃视频网站在线观看| 国产三级片视频在线观看| 四川少妇搡BBw搡BBBB搡| 国产熟妇搡BBBB搡BBBB搡| 欧美性受XXXX黑人XYX性爽一| 精品秘一区性综合三区| 免费国产黄色视频网站| 亚洲熟妇AV日韩熟妇在线| 性欧美欧美巨大69| 韩日在线视频| 97中文字幕在线| 99热在线观看免费精品| 91jiujiu| 国产操比视频| 五月婷婷深深爱| 国产suv精品一区二区| 亚洲国产高清视频| 黄片网站免费| 国产精品三级片| 伊人成人视频在线观看| 777欧美| 精品女同一区二区三区四区外站在线| 色婷婷香蕉在线一区二区| 精品久久免费一区二区三区| 91丝袜在线| 99精品免费观看| 亚洲精品成人无码AV在线| 国产亚洲欧美精品综合在线| 国产精品色视频| 欧美污网站| 国产在线观看| 天天爱天天射| 天天色天天日| 日韩视频一二三| 免费观看黄色成人网站| 黄色福利网| av手机在线| 少妇搡BBBB搡BBB搡HD(| 逼逼网| 人妻熟妇乱子伦精品无码专区毛片| 黄色A片在线观看| 波多野结衣AV在线播放| 欧美天堂在线| 久操网站| 久久99精品国产.久久久久| 激情乱伦网站| 国产91在线拍揄自揄拍无码九色| 国产成人777777精品综合| 日本边摸边吻奶边做爰| 大香蕉男人天堂| 日本综合在线| 91精品久久香蕉国产线看观看| www.三级| 不卡无码中文字幕一区| 亚洲情在线| 日本成人免费| 成人免费乱码大片a毛片蜜芽 | 成人在线中文| 超碰人人操在线| av午夜福利| 婷婷99狠狠躁天天躁| www.| 欧洲黑人成人A版免费视频| 日韩av中文字幕在线播放| 老女人AV| 亚洲综合激情网| 久久久久久久免费| 日本熟妇一区二区三区| 白浆在线| 国产日韩欧美| 麻豆国产成人AV一区二区三区 | 中文字幕精品一区久久久久| 亚洲无码av网站| 国产欧美日韩在线视频| 超碰在线观看免费| 特黄aaaaaaaa真人毛片| 精品无码人妻| 国精产品秘一区二区| 欧美一级成人片| 久草视频在线免费看| 特级欧美AAAAAA| 97精品在线视频| 日韩激情| 极品小仙女69| 国产日韩在线播放| 在线视频福利导航| 国产做受91一片二片老头| 日本高清黄色视频| 乱伦A片| 就去色色五月丁香婷婷久久久 | 你懂的视频在线播放| 日日夜夜拍| 亚洲九九九九| 91九色丨国产丨爆乳| 成人A视频| 操极品少妇逼| 黄色在线免费观看网站| 91人人草| 久久久久成人电影| 日本黄A级A片国产免费| 日日爱av| 日韩天堂在线观看| 热99re69精品8在线播放| 不卡av在线| 91av在线播放| 日韩精品无码av| 婷婷五月天电影网| 天天拍夜夜拍| 一区高清无码| 无码国产精品一区二区三| 亚洲一区免费| 大香蕉做爱视频| 亚洲国产精品成人综合| 亚洲视频免费看| 狼友视频一国产| 亚洲激情综合视频| 一插菊花综合视频| 亚洲无码高清视频在线| 91成人电影在线观看| 秋霞无码一区二区三区| 欧美成人综合一区| 免费Av网站| 午夜AV无码| 久操视频在线| 9l蝌蚪PORNY中文| 国产麻豆精品成人免费视频| 免费无码AV| 午夜av在线| 九月丁香| 男女av网站| 欧美三级片在线视频| 在线无码高清| 亚洲九九在线| 可以看的毛片| 五月天激情综合网| 黄色免费网站在线观看| 黄色电影一区二区三区| 四虎在线免费视频| 久久成人电影院| 国产精品久久久久野外| 日日夜夜天天操| 7x7x7x人成免费观学生视频| 在线看片A| 在线视频91| 久久久人妻无码精品蜜桃| 日日操人人操| 先锋影音资源网站| 奇米影视亚洲春色| 国产成人精品亚洲男人的天堂| 精品777| 九九热超碰| 波多野结衣毛片| 中文无码毛片| 黄A网站| a天堂视频| 国产无码在线影院| 色哟哟视频| 国产91精品探花一区二区| 色网在线| 人人爱人人操人人爽| 欧美人操逼视频| 天天添天天干| 韩国毛片基地久久| 欧美在线视频一区二区| 欧美黄色网址| 91女人18毛片水多国产| 亚洲欧美久久久久久久久久久久| 国产日女人| 中文字幕熟女人妻| 中日美朝美女一级片免费看| 欧美不卡在线观看| 国产美女啪啪视频| 99精品视频在线| 先锋av资源在线| 日韩一级黄色毛片| 欧美日韩激情| 亚洲欧美日韩不卡| 国产久久在线观看| 青青草青娱乐| 蜜桃久久久亚洲精| 亚洲精品久久久久毛片A级绿茶 | 伊人伊人网| 99在线精品视频免费观看20| 人人摸人人搞| 潮喷AV| 丁香五月综合网| 亚洲视频区| 波多野结衣av一区| 亚洲区欧美区| 少妇一级片| 91在线无码精品入口电车| 久久做爱视频| 欧美色图88| 欧美精品久| 色情片在线观看| www.黄片| 日本在线免费视频| 苍井空一区二区三区| 国产三级片网站| 91吴梦梦无码一区二区| 波多野结衣在线网站| 日韩不卡| 日爽夜爽| 最新AV在线| 91狠狠爱| 一区二区成人视频| 九九这里有精品| 久久成人18免费网站波多野结衣| 国产探花在线观看| 国产白丝在线| 午夜成人黄色电影| 老熟女导航| 99视频免费看| 黄色国产在线| 亚欧洲精品在线视频免费观看| 中文字幕永久在线| 亚洲天堂无| 韩国无码专区| www.怡春院| 欧美啊啊啊| 狠狠色婷婷7777| 国产欧美综合在线观看| 一区二区三区视频在线| 色就是色欧美| 黄色一级片免费| 日韩啪啪视频| 精品人妻一区二区乱码一区二区| 欧美黄色片网站| 久久黄色视频网站| 国产主播一区二区| 伊人久久爱| 日韩黄色电影在线免费观看| 亚洲观看黄色网|