日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FFmpeg基础:音视频同步播放

發布時間:2023/12/29 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FFmpeg基础:音视频同步播放 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 定義全局數據類
    • 定義數據隊列
    • 定義SDL庫初始化操作
    • 定義音視頻流解析函數
    • 定義解封裝線程和視頻解碼線程
    • 定義音視頻的解碼函數
    • 主函數事件響應

視頻文件解復用之后視頻流和音頻流是獨立的,也是獨立播放。由于壓縮方式不同,數據格式不同,在播放的時候音頻流輸出是線性的而視頻流輸出不是線程的,這就會導致視頻流和音頻流的時間偏差越來越大,最終導致音視頻不同步。

為了解決這個問題,我們在播放視頻文件的時候需要調整音頻或者視頻的播放速度,來實現兩種數據的同步。考慮到人對聲音的敏感度要強于視頻,頻繁調節音頻會帶來較差的觀感體驗,且音頻的播放時鐘為線性增長,所以一般會以音頻時鐘為參考時鐘,將視頻同步到音頻上。

這里以一個將視頻流同步到音頻流上的例子來說明一下音視頻同步的實現方式。程序的架構圖如下圖所示:

定義全局數據類

首先定義全局數據類,用于不同線程之間的數據共享。主要數據結構VideoState記錄了音視頻文件的各種上下文參數。

//define.h #ifndef _DEFINE_H_ #define _DEFINE_H_#include <stdio.h> #include <assert.h> #include <math.h>#include <SDL.h> extern "C" { #include <libavcodec/avcodec.h> #include <libavdevice/avdevice.h> #include <libavfilter/avfilter.h> #include <libavformat/avformat.h> #include <libavformat/avio.h> #include <libavutil/avutil.h> #include <libswresample/swresample.h> #include <libswscale/swscale.h> #include <libavutil/frame.h> #include <libavutil/imgutils.h> #include <libavformat/avformat.h> #include <libavutil/time.h> } #include <iostream>#define SDL_AUDIO_BUFFER_SIZE 1024 #define MAX_AUDIO_FRAME_SIZE 192000#define MAX_AUDIOQ_SIZE (5 * 16 * 1024) #define MAX_VIDEOQ_SIZE (5 * 256 * 1024)#define AV_SYNC_THRESHOLD 0.01 #define AV_NOSYNC_THRESHOLD 10.0#define FF_REFRESH_EVENT (SDL_USEREVENT) #define FF_QUIT_EVENT (SDL_USEREVENT + 1)#define VIDEO_PICTURE_QUEUE_SIZE 1typedef struct PacketQueue {AVPacketList *first_pkt, *last_pkt;int nb_packets;int size;SDL_mutex *mutex;SDL_cond *cond; } PacketQueue;typedef struct VideoState {AVFormatContext *pFormatCtx; //音視頻的上下文int videoStreamIndex; //視頻流索引int audioStreamIndex; //音頻流索引AVStream *audio_st; //音頻流指針AVCodecContext *audio_ctx; //音頻流上下文PacketQueue audioq; //音頻流隊列//音頻緩存uint8_t audio_buf[192000 * 3 / 2];unsigned int audio_buf_size; //緩存大小unsigned int audio_buf_index; //緩存索引AVFrame audio_frame; //音頻幀AVPacket audio_pkt; //音頻包uint8_t *audio_pkt_data; //音頻數據指針 int audio_pkt_size; //音頻數據包大小int audio_hw_buf_size;struct SwrContext *audio_swr_ctx; //音頻處理操作類//音視頻的數據幀double audio_clock;double video_clock;double frame_timer;int64_t frame_last_pts;int64_t frame_last_delay;AVStream *video_st; //視頻流AVCodecContext *video_ctx; //視頻流上下文PacketQueue videoq; //視頻數據隊列struct SwsContext *video_sws_ctx; //視頻操作上下文//視頻幀數據隊列AVFrame pictq[VIDEO_PICTURE_QUEUE_SIZE];int pictq_size;int pictq_rindex;int pictq_windex;//操作數據幀的鎖和信號量SDL_mutex *pictq_mutex;SDL_cond *pictq_cond;//解封裝的線程SDL_Thread *parse_tid;//視頻流線程SDL_Thread *video_tid;//輸入文件名稱char filename[1024];//退出標志位int quit;AVFrame wanted_frame;SDL_AudioSpec wantedSpec = { 0 };SDL_AudioSpec audioSpec = { 0 }; } VideoState;SDL_mutex *text_mutex; SDL_Window *win; SDL_Renderer *renderer; SDL_Texture *texture;//視頻全局狀態 VideoState* g_state = NULL;#endif

定義數據隊列

定義音視頻數據隊列操作,用來緩存音視頻數據包。

//datequeue.h #ifndef _DATA_QUEUE_H_ #define _DATA_QUEUE_H_#include "define.h"int queue_picture(VideoState *is, AVFrame *pFrame, double pts) {SDL_LockMutex(is->pictq_mutex);while (is->pictq_size >= VIDEO_PICTURE_QUEUE_SIZE && !is->quit){SDL_CondWait(is->pictq_cond, is->pictq_mutex);}SDL_UnlockMutex(is->pictq_mutex);if (is->quit)return -1;AVFrame* current_frame = &is->pictq[is->pictq_windex];int ret = av_frame_make_writable(current_frame);if (!current_frame->data ||current_frame->width != is->video_ctx->width ||current_frame->height != is->video_ctx->height) {current_frame->format = pFrame->format;current_frame->width = pFrame->width;current_frame->height = pFrame->height;int ret = av_image_alloc(current_frame->data, current_frame->linesize, is->video_ctx->width, is->video_ctx->height,is->video_ctx->pix_fmt, 32);if (is->quit) {return -1;}}//縮放視頻if (current_frame){current_frame->pts = pFrame->pts;//將圖片數據添加到幀中uint8_t *src_planes[4];int src_linesize[4];av_image_fill_arrays(src_planes, src_linesize, (const uint8_t *)pFrame->data, is->video_ctx->pix_fmt,is->video_ctx->width, is->video_ctx->height, 1);//YUV數據轉變成SDL使用的紋理數據sws_scale(is->video_sws_ctx, (uint8_t const * const *)pFrame->data,pFrame->linesize, 0, is->video_ctx->height,current_frame->data, current_frame->linesize);//通知隊列的消費者取數據if (++is->pictq_windex == VIDEO_PICTURE_QUEUE_SIZE){is->pictq_windex = 0;}SDL_LockMutex(is->pictq_mutex);is->pictq_size++;SDL_UnlockMutex(is->pictq_mutex);}return 0; }void packet_queue_init(PacketQueue *q) {memset(q, 0, sizeof(PacketQueue));q->mutex = SDL_CreateMutex();q->cond = SDL_CreateCond(); }//添加到數據隊列中 int packet_queue_put(PacketQueue *q, AVPacket *pkt) {AVPacketList *pkt1;AVPacket* newPkt;newPkt = (AVPacket*)av_mallocz_array(1, sizeof(AVPacket));if (av_packet_ref(newPkt, pkt) < 0)return -1;pkt1 = (AVPacketList*)av_malloc(sizeof(AVPacketList));pkt1->pkt = *newPkt;pkt1->next = NULL;SDL_LockMutex(q->mutex);if (!q->last_pkt)q->first_pkt = pkt1;elseq->last_pkt->next = pkt1;q->last_pkt = pkt1;q->nb_packets++;q->size += newPkt->size;SDL_CondSignal(q->cond);SDL_UnlockMutex(q->mutex);return 0; }//讀取數據包中的數據 int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block) {AVPacketList *pkt1;int ret;SDL_LockMutex(q->mutex);while (1){pkt1 = q->first_pkt;if (pkt1) {q->first_pkt = pkt1->next;if (!q->first_pkt)q->last_pkt = NULL;q->nb_packets--;q->size -= pkt1->pkt.size;*pkt = pkt1->pkt;av_free(pkt1);ret = 1;break;}else if (!block) {ret = 0;break;}else {SDL_CondWait(q->cond, q->mutex);}}SDL_UnlockMutex(q->mutex);return ret; }#endif

定義SDL庫初始化操作

//SDL_Wraper.h #ifndef _SDL_WRAPPER_H_ #define _SDL_WRAPPER_H_ #include "define.h"void InitSDL() {//初始化SDLif (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER))printf("There is something wrong with your SDL Libs. Couldn't run");//打開音頻驅動 #ifdef _WIN32SDL_AudioInit("directsound"); #endif }//SDL顯示視頻幀信息 void video_display(VideoState *is) {SDL_Rect rect;AVFrame *vp;float aspect_ratio;int w, h, x, y;int i;vp = &is->pictq[is->pictq_rindex];if (vp){SDL_UpdateYUVTexture(texture, NULL,vp->data[0], vp->linesize[0],vp->data[1], vp->linesize[1],vp->data[2], vp->linesize[2]);rect.x = 0;rect.y = 0;rect.w = is->video_ctx->width;rect.h = is->video_ctx->height;SDL_LockMutex(text_mutex);SDL_RenderClear(renderer);SDL_RenderCopy(renderer, texture, NULL, &rect);SDL_RenderPresent(renderer);SDL_UnlockMutex(text_mutex);} } #endif

定義音視頻流解析函數

音視頻流的解析函數將音視頻流的參數解析到全局數據結構體中。

//parser_stream.h #ifndef _PARSER_STREAM_H_ #define _PARSER_STREAM_H_#include "define.h" #include "callback.h"int stream_component_open(VideoState *is, int stream_index) {if (stream_index < 0 || stream_index >= is->pFormatCtx->nb_streams){return -1;}//查找解碼器分配上下文const AVCodec* codec = avcodec_find_decoder(is->pFormatCtx->streams[stream_index]->codecpar->codec_id);if (!codec) {fprintf(stderr, "Unsupported codec!\n");return -1;}AVCodecContext* codecCtx = avcodec_alloc_context3(codec);if (!codecCtx){fprintf(stderr, "new codec context failed!\n");return -1;}int ret = avcodec_parameters_to_context(codecCtx, is->pFormatCtx->streams[stream_index]->codecpar);if (ret < 0){return -2;}if (avcodec_open2(codecCtx, codec, NULL) < 0){fprintf(stderr, "Unsupported codec!\n");return -1;}switch (codecCtx->codec_type){case AVMEDIA_TYPE_AUDIO:is->audio_ctx = codecCtx;//設置音頻參數轉換的上下文is->audio_swr_ctx = swr_alloc();if (is->audio_swr_ctx == NULL){return -4;}//設置通道數,采樣率,采樣格式的輸入輸出格式av_opt_set_channel_layout(is->audio_swr_ctx, "in_channel_layout", codecCtx->channel_layout, 0);av_opt_set_channel_layout(is->audio_swr_ctx, "out_channel_layout", codecCtx->channel_layout, 0);av_opt_set_int(is->audio_swr_ctx, "in_sample_rate", codecCtx->sample_rate, 0);av_opt_set_int(is->audio_swr_ctx, "out_sample_rate", codecCtx->sample_rate, 0);av_opt_set_sample_fmt(is->audio_swr_ctx, "in_sample_fmt", codecCtx->sample_fmt, 0);av_opt_set_sample_fmt(is->audio_swr_ctx, "out_sample_fmt", AV_SAMPLE_FMT_FLT, 0);ret = swr_init(is->audio_swr_ctx);if (ret != 0){return -5;}//打開音響設備memset(&is->wantedSpec, 0, sizeof(is->wantedSpec));is->wantedSpec.channels = codecCtx->channels;is->wantedSpec.freq = codecCtx->sample_rate;is->wantedSpec.format = AUDIO_S16SYS;is->wantedSpec.silence = 0;is->wantedSpec.samples = SDL_AUDIO_BUFFER_SIZE;is->wantedSpec.userdata = codecCtx; //音頻流的上下文is->wantedSpec.callback = audio_callback; //設置數據包的回調函數if (SDL_OpenAudio(&is->wantedSpec, &is->audioSpec) < 0){printf("Failed to open audio");return -6;}packet_queue_init(&is->audioq);is->wanted_frame.format = AV_SAMPLE_FMT_S16;is->wanted_frame.sample_rate = is->audioSpec.freq;is->wanted_frame.channel_layout = av_get_default_channel_layout(is->audioSpec.channels);is->wanted_frame.channels = is->audioSpec.channels;is->audioStreamIndex = stream_index;is->audio_st = is->pFormatCtx->streams[stream_index];is->audio_buf_size = 0;is->audio_buf_index = 0;memset(&is->audio_pkt, 0, sizeof(is->audio_pkt));SDL_PauseAudio(0);break;//對視頻數據進行處理case AVMEDIA_TYPE_VIDEO:is->video_ctx = codecCtx;is->video_st = is->pFormatCtx->streams[stream_index];is->videoStreamIndex = stream_index;is->frame_timer = (double)av_gettime() / 1000000.0;is->frame_last_delay = 40e-3;packet_queue_init(&is->videoq);is->video_sws_ctx = sws_getContext(is->video_ctx->width, is->video_ctx->height,is->video_ctx->pix_fmt, is->video_ctx->width,is->video_ctx->height, AV_PIX_FMT_YUV420P,SWS_BILINEAR, NULL, NULL, NULL);break;default:break;} } #endif

定義解封裝線程和視頻解碼線程

解封裝線程負責解析視頻文件并讀取數據包到不同的隊列中。視頻解碼線程負責將視頻數據包解析成SDL能識別的圖片數據類型。

//thread.h #ifndef _THREAD_H_ #define _THREAD_H_ #include "define.h" #include "datequeue.h" #include "parser_stream.h"double synchronize_video(VideoState *is, AVFrame *src_frame, double pts) {double frame_delay;if (pts != 0){is->video_clock = pts;}else{pts = is->video_clock;}//更新幀的時鐘frame_delay = av_q2d(is->video_ctx->time_base);frame_delay += src_frame->repeat_pict * (frame_delay * 0.5);is->video_clock += frame_delay;return pts; }int decode_video_thread(void *arg) {VideoState *is = (VideoState *)arg;AVPacket pkt1, packet;int64_t pts = 0;int ret = -1;AVFrame *pFrame = av_frame_alloc();while (1){//從隊列中提取數據包if (packet_queue_get(&is->videoq, &packet, 1) < 0){continue;}int ret = avcodec_send_packet(is->video_ctx, &packet);ret = avcodec_receive_frame(is->video_ctx, pFrame);if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF){continue;}if (ret < 0){continue;}pts = pFrame->pts;//* av_q2d(is->video_st->time_base);;//同步視頻pts = synchronize_video(is, pFrame, pts);if (queue_picture(is, pFrame, pts) < 0){break;}av_packet_unref(&packet);}av_frame_free(&pFrame);return 0; }int demux_thread(void *arg) {int ret = -1;VideoState *is = (VideoState*)arg;AVPacket packet;AVFrame *pFrame = NULL;//打開上下文解析數據流if (avformat_open_input(&is->pFormatCtx, is->filename, NULL, NULL) != 0)return -1;if (avformat_find_stream_info(is->pFormatCtx, NULL)<0)return -1;//查音視頻流的索引for (int i = 0; i<is->pFormatCtx->nb_streams; i++){if (is->pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {is->videoStreamIndex = i;}if (is->pFormatCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {is->audioStreamIndex = i;}}//解析音頻流和視頻流if (is->audioStreamIndex >= 0){stream_component_open(is, is->audioStreamIndex);}if (is->videoStreamIndex >= 0){stream_component_open(is, is->videoStreamIndex);//啟動視頻解析線程is->video_tid = SDL_CreateThread(decode_video_thread, "decode_video_thread", is);}if (is->videoStreamIndex < 0 || is->audioStreamIndex < 0){fprintf(stderr, "%s: could not open codecs\n", is->filename);return -1;}pFrame = av_frame_alloc();//讀取數據包while (av_read_frame(is->pFormatCtx, &packet) >= 0){if (packet.stream_index == is->audioStreamIndex){packet_queue_put(&is->audioq, &packet);}else{packet_queue_put(&is->videoq, &packet);SDL_Delay(10);}av_packet_unref(&packet);}__FAIL://后處理清理數據if (pFrame) {av_frame_free(&pFrame);}if (is->audio_ctx){avcodec_close(is->audio_ctx);}SDL_Quit();return ret; } #endif

定義音視頻的解碼函數

解碼函數負責從數據隊列里面讀取音視頻數據并進行渲染播放。

//callback.h #ifndef _CALL_BACK_H_ #define _CALL_BACK_H_ #include "define.h"//從音頻流中解析數據包 int audio_decode_frame(AVCodecContext* aCodecCtx, uint8_t* audio_buf, int buf_size) {static AVPacket pkt;static uint8_t* audio_pkt_data = NULL;static int audio_pkt_size = 0;static AVFrame frame;int len1;int data_size = 0;SwrContext* swr_ctx = NULL;while (1){//取到數據之后解析數據while (audio_pkt_size > 0){int got_frame = 0;avcodec_send_packet(aCodecCtx, &pkt);avcodec_receive_frame(aCodecCtx, &frame);len1 = frame.pkt_size;if (len1 < 0){audio_pkt_size = 0;break;}//拷貝音頻數據audio_pkt_data += len1;audio_pkt_size -= len1;data_size = 0;if (got_frame){int linesize = 1;data_size = av_samples_get_buffer_size(&linesize, aCodecCtx->channels, frame.nb_samples, aCodecCtx->sample_fmt, 1);assert(data_size <= buf_size);memcpy(audio_buf, frame.data[0], data_size);}//獲取通道信息if (frame.channels > 0 && frame.channel_layout == 0)frame.channel_layout = av_get_default_channel_layout(frame.channels);else if (frame.channels == 0 && frame.channel_layout > 0)frame.channels = av_get_channel_layout_nb_channels(frame.channel_layout);if (swr_ctx){swr_free(&swr_ctx);swr_ctx = NULL;}//對音頻格式進行轉換,重采樣swr_ctx = swr_alloc_set_opts(NULL, g_state->wanted_frame.channel_layout, (AVSampleFormat)g_state->wanted_frame.format, g_state->wanted_frame.sample_rate,frame.channel_layout, (AVSampleFormat)frame.format, frame.sample_rate, 0, NULL);if (!swr_ctx || swr_init(swr_ctx) < 0){printf("swr_init failed\n");}int dst_nb_samples = (int)av_rescale_rnd(swr_get_delay(swr_ctx, frame.sample_rate) + frame.nb_samples,g_state->wanted_frame.sample_rate, g_state->wanted_frame.format, AV_ROUND_INF);int len2 = swr_convert(swr_ctx, &audio_buf, dst_nb_samples,(const uint8_t**)frame.data, frame.nb_samples);if (len2 < 0){printf("swr_convert failed\n");}//data_size = 2 * g_state->wanted_frame.nb_samples * 2;data_size = g_state->wanted_frame.channels * len2 * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16);int n = 2 * g_state->audio_ctx->channels;g_state->audio_clock += (double)data_size /(double)(n * g_state->audio_ctx->sample_rate);av_packet_unref(&pkt);if (swr_ctx){swr_free(&swr_ctx);swr_ctx = NULL;}//返回數據長度return data_size;//return g_state->wanted_frame.channels * len2 * av_get_bytes_per_sample(AV_SAMPLE_FMT_S16);}//從隊列里面取數據if (packet_queue_get(&g_state->audioq, &pkt, 1) < 0)return -1;audio_pkt_data = pkt.data;audio_pkt_size = pkt.size;} }//音頻數據包的回調函數 void audio_callback(void* userdata, Uint8* stream, int len) {AVCodecContext* aCodecCtx = (AVCodecContext*)userdata;int len1, audio_size;static uint8_t audio_buff[192000 * 3 / 2];static unsigned int audio_buf_size = 0;static unsigned int audio_buf_index = 0;SDL_memset(stream, 0, len);while (len > 0){if (g_state->audio_buf_index >= g_state->audio_buf_size){audio_size = audio_decode_frame(aCodecCtx, audio_buff, sizeof(audio_buff));if (audio_size < 0){g_state->audio_buf_size = 1024*2*2;memset(audio_buff, 0, g_state->audio_buf_size);}elseg_state->audio_buf_size = audio_size;g_state->audio_buf_index = 0;}//播放取到的音頻數據len1 = g_state->audio_buf_size - g_state->audio_buf_index;if (len1 > len)len1 = len;SDL_MixAudio(stream, audio_buff + g_state->audio_buf_index, len1, SDL_MIX_MAXVOLUME);len -= len1;stream += len1;g_state->audio_buf_index += len1;} } #endif

主函數事件響應

在主函數里面對各種資源進行整合同時處理事件響應,定時刷新視頻流的顯示。

//main.cpp #include "define.h" #include "SDL_Wraper.h" #include "datequeue.h" #include "parser_stream.h" #include "callback.h" #include "thread.h"double get_audio_clock(VideoState *is) {double pts;int hw_buf_size, bytes_per_sec, n;pts = is->audio_clock;hw_buf_size = is->audio_buf_size - is->audio_buf_index;bytes_per_sec = 0;n = is->audio_ctx->channels * 2;if (is->audio_st) {bytes_per_sec = is->audio_ctx->sample_rate * n;}if (bytes_per_sec) {pts -= (double)hw_buf_size / bytes_per_sec;}return pts; }//定時發送事件 static Uint32 sdl_refresh_timer_cb(Uint32 interval, void *opaque) {SDL_Event event;event.type = FF_REFRESH_EVENT;event.user.data1 = opaque;SDL_PushEvent(&event);SDL_Delay(40);return 0; }//添加一個定時器 static void schedule_refresh(VideoState *is, int delay) {SDL_AddTimer(delay, sdl_refresh_timer_cb, is); }void video_refresh_timer(void *userdata) {VideoState *is = (VideoState *)userdata;AVFrame *vp;int64_t delay, sync_threshold, ref_clock;double actual_delay;if (is->video_st){if (is->pictq_size == 0){schedule_refresh(is, 1);}else{vp = &is->pictq[is->pictq_rindex];delay = vp->pts - is->frame_last_pts;//存儲pts和delay下次使用is->frame_last_delay = delay;is->frame_last_pts = vp->pts;//獲取音頻延遲時間ref_clock = get_audio_clock(is);double diff = vp->pts * av_q2d(is->video_st->time_base) - ref_clock;/* Skip or repeat the frame. Take delay into accountFFPlay still doesn't "know if this is the best guess." */sync_threshold = (delay > AV_SYNC_THRESHOLD) ? delay : AV_SYNC_THRESHOLD;if (fabs(diff) < AV_NOSYNC_THRESHOLD){if (diff <= -sync_threshold) {delay = 0;}else if (diff >= sync_threshold) {delay = 2 * delay;}}is->frame_timer += delay * av_q2d(is->video_st->time_base);//計算真正的延遲時間actual_delay = is->frame_timer - (av_gettime() / 1000000.0);if (actual_delay < 0.010){actual_delay = 0.010;}//std::cout << actual_delay << "frame_timer" << is->frame_timer << std::endl;schedule_refresh(is, (int)(actual_delay * 1000 + 0.5));//顯示視頻幀video_display(is);//刷新視頻信息,為下次刷新做準備if (++is->pictq_rindex == VIDEO_PICTURE_QUEUE_SIZE) {is->pictq_rindex = 0;}SDL_LockMutex(is->pictq_mutex);is->pictq_size--;SDL_CondSignal(is->pictq_cond);SDL_UnlockMutex(is->pictq_mutex);}}else{schedule_refresh(is, 100);}}int main(int argc, char *argv[]) {int ret = -1;SDL_Event event;if (argc < 2) {printf("Usage: command <file>\n");return ret;}//初始化SDLInitSDL();//初始化各種變量g_state = (VideoState*)av_mallocz(sizeof(VideoState));g_state->pictq_mutex = SDL_CreateMutex();g_state->pictq_cond = SDL_CreateCond();memcpy(g_state->filename, argv[1], sizeof(g_state->filename));//解封裝的線程g_state->parse_tid = SDL_CreateThread(demux_thread, "demux_thread", g_state);if (!g_state->parse_tid){av_free(g_state);goto __FAIL;}while (!g_state->video_ctx){SDL_Delay(10);}//創建窗口渲染視頻,在子線程里面創建會阻塞主線程的時間循環win = SDL_CreateWindow("Feifei Player",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,g_state->video_ctx->width, g_state->video_ctx->height,SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);renderer = SDL_CreateRenderer(win, -1, 0);texture = SDL_CreateTexture(renderer,SDL_PIXELFORMAT_IYUV,SDL_TEXTUREACCESS_STREAMING,g_state->video_ctx->width, g_state->video_ctx->height);schedule_refresh(g_state, 40);while (1){SDL_WaitEvent(&event);switch (event.type){case FF_QUIT_EVENT:case SDL_QUIT:g_state->quit = 1;goto __QUIT;break;case FF_REFRESH_EVENT:video_refresh_timer(event.user.data1);break;default:break;}} __QUIT:ret = 0; __FAIL:SDL_Quit();return ret; }

完善了音視頻同步之后,demo程序其實就是一個播放器的雛形了。我們可以使用它來播放各種視頻。這里以一個mkv格式的視頻為例進行播放,播放效果如下所示:

總結

以上是生活随笔為你收集整理的FFmpeg基础:音视频同步播放的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

av免费观看网站 | 国产99在线免费 | 成人毛片在线视频 | 99久久久国产免费 | 欧美日韩国产一区二区在线观看 | 激情综合色播五月 | 99热这里只有精品在线观看 | 亚洲第五色综合网 | 久久1区 | 成人午夜免费剧场 | 日韩精品免费在线 | 在线亚洲人成电影网站色www | 91免费高清视频 | 精品国产成人在线 | 在线观看aaa| 中文字幕有码在线观看 | 91豆花在线观看 | 欧美色插 | 中文字幕乱码视频 | www.com.日本一级 | 欧美激情视频一区二区三区 | av一区二区三区在线观看 | 成人国产电影在线观看 | 91在线免费播放视频 | 特级毛片网 | 久久久精品亚洲 | 色国产精品一区在线观看 | 久久手机视频 | 国产在线精品二区 | 国产.精品.日韩.另类.中文.在线.播放 | 久草在线播放视频 | 欧美日韩一区二区视频在线观看 | 亚洲国产精品va在线看黑人动漫 | 亚洲精品午夜视频 | 黄色成人在线网站 | 韩国av免费看| 不卡av电影在线观看 | 国产精品18久久久久白浆 | 91视频-88av | 国产成人三级一区二区在线观看一 | 亚洲成人资源网 | 日韩av资源在线观看 | 国产高清在线永久 | 亚洲综合激情网 | 国产韩国日本高清视频 | 五月婷婷天堂 | 日韩区欧美久久久无人区 | 亚洲va欧美va国产va黑人 | 在线观看韩国av | 日韩久久久久久久久 | 美女一区网站 | 日韩午夜在线 | 中文乱幕日产无线码1区 | 国产成人精品一区二区在线观看 | 国产免费午夜 | 国产亚洲久一区二区 | 亚洲作爱视频 | 国产999 | 五月婷婷激情五月 | 日女人电影 | 欧美视屏一区二区 | 91九色在线视频观看 | 久久久国产精品人人片99精片欧美一 | 免费黄色一区 | 777xxx欧美 | 天天色综合三 | 草久久久 | 中国精品一区二区 | 成人中文字幕+乱码+中文字幕 | 日韩a级免费视频 | av观看网站| 日韩欧三级 | 国产精品igao视频网网址 | 亚洲经典在线 | 久久视频在线观看 | 久久高清国产视频 | 色噜噜色噜噜 | 十八岁以下禁止观看的1000个网站 | 亚洲资源一区 | 亚洲免费不卡 | 午夜视频福利 | 伊人色综合久久天天 | 亚洲成人麻豆 | 美女视频黄免费的 | 色丁香久久 | 97精品国产97久久久久久久久久久久 | 日韩最新中文字幕 | 久久艹免费 | 日韩电影在线观看中文字幕 | 黄色av三级在线 | 精品在线你懂的 | 亚洲国产欧美一区二区三区丁香婷 | 亚洲午夜久久久久久久久电影网 | 丁香六月色 | 日日干 天天干 | 又污又黄网站 | 亚洲综合国产精品 | 免费福利视频网站 | 亚洲精品视频免费 | 亚洲无吗av| 免费网站v| 欧美成人精品欧美一级乱黄 | 久久字幕精品一区 | 成人一区二区在线 | 伊人久久电影网 | 免费网站在线观看人 | 69久久久| 亚洲一区二区黄色 | 亚洲免费av网站 | 成人免费视频播放 | 91成人精品观看 | 全久久久久久久久久久电影 | 日韩视频在线观看免费 | 国产精品99久久久精品 | 在线播放亚洲激情 | 99热在线这里只有精品 | 在线免费观看黄网站 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 日韩一级电影在线 | 成人午夜电影在线播放 | 超碰999| 欧美日韩高清一区二区 国产亚洲免费看 | 中文字幕亚洲欧美日韩2019 | 色的网站在线观看 | 亚洲精品五月天 | 精品伦理一区二区三区 | 久久综合偷偷噜噜噜色 | 精品一区二区三区久久久 | 欧美在线视频日韩 | 久久国产一区二区 | 国产特级毛片aaaaaa毛片 | 91九色丨porny丨丰满6 | 久久av在线 | 91精品在线观看视频 | 色婷五月天 | 国产成人精品一区二三区 | 国产精品免费久久久久久久久久中文 | 日本乱视频 | 超碰成人网 | 91麻豆精品国产自产在线游戏 | 久久视频这里只有精品 | 丁香婷婷在线观看 | 一区二区三区四区五区在线 | h网站免费在线观看 | 国产美女免费观看 | 久草色在线观看 | 视频在线国产 | 91大神免费在线观看 | 人人爱爱人人 | 丁香九月激情 | 免费网站在线观看成人 | 国产午夜三级一区二区三 | 偷拍视频一区 | 91久久精品一区二区三区 | 91桃色国产在线播放 | 精品国产观看 | 亚洲黄网站 | 久久久综合 | 一区二区三区在线观看 | 奇米影视在线99精品 | 高清国产一区 | 亚洲91网站 | 久久综合精品国产一区二区三区 | 亚洲日韩中文字幕在线播放 | 亚洲男男gaygay无套同网址 | av成人在线电影 | 五月激情婷婷丁香 | 91网站在线视频 | 91成人在线看 | 精品99视频| 日韩最新理论电影 | 成人在线观看资源 | 国产精美视频 | 亚洲国产精品成人精品 | 少妇bbw揉bbb欧美 | 成人久久久久久久久 | 亚洲永久在线 | 免费看一级特黄a大片 | 黄网站www | 99视频精品全部免费 在线 | 国产精品免费视频观看 | 日韩在线三区 | 久久免费播放视频 | 激情视频综合网 | 色综合网 | 久久天天躁 | 99在线视频免费观看 | 免费看片亚洲 | 天天天干夜夜夜操 | 欧洲亚洲精品 | 97免费中文视频在线观看 | 一级一级一片免费 | 一级特黄aaa大片在线观看 | 成人三级网址 | 波多野结衣电影久久 | 色婷婷视频 | 日韩一区二区三区不卡 | 国产成免费视频 | 欧美日韩精品在线一区二区 | 色99之美女主播在线视频 | 精品国产乱子伦一区二区 | 久久精品一二三区白丝高潮 | 国产xxxx| 国产99久久精品一区二区300 | 综合色站| 毛片网站免费在线观看 | 国产九九九精品视频 | 成人在线网站观看 | 黄色影院在线免费观看 | 黄a在线 | 超碰97免费在线 | 中文在线字幕免 | 亚洲区另类春色综合小说校园片 | 国产视频精品久久 | 香蕉视频日本 | 国产高清不卡一区二区三区 | 国产精品1区2区3区在线观看 | 欧美一级乱黄 | 区一区二区三区中文字幕 | 日韩欧美综合精品 | 91精品在线免费观看视频 | 五月婷婷六月丁香激情 | 国产精品igao视频网网址 | 91看片一区二区三区 | 久久久久久久久久久免费视频 | 国产美女视频一区 | 国产精品久久久久永久免费观看 | 在线精品视频免费观看 | 99热精品免费观看 | 国产精品九九九九九 | 91免费观看| 国产精品视频地址 | 成人国产电影在线观看 | 日韩大片在线免费观看 | 手机av电影在线观看 | 欧美视频网址 | 五月天久久 | 98久久 | 久久99精品热在线观看 | 日韩1页| 国内外成人在线视频 | 成人免费大片黄在线播放 | 九九免费精品 | 欧美男同网站 | 天天色天天爱天天射综合 | 午夜av网站 | 久久久久视| 日韩专区在线播放 | 91精品国产91久久久久福利 | 九七视频在线观看 | 久草观看视频 | www.色五月| 美女视频黄是免费的 | 伊人成人精品 | 午夜精品久久久久久99热明星 | 97韩国电影| 亚洲国产精品久久久久婷婷884 | 制服丝袜一区二区 | 国产精品一区二区久久久 | 久久精品视频国产 | 久久国产精品色av免费看 | 五月天综合婷婷 | 视频一区二区免费 | 中文字幕日韩在线播放 | 99热日本| 97色在线视频 | 久久综合亚洲鲁鲁五月久久 | 国产日韩精品在线 | 久久社区视频 | av在线成人 | 欧亚日韩精品一区二区在线 | 在线视频日韩精品 | 狠狠干网址 | 亚洲精品乱码久久久久久按摩 | 97福利视频 | 91av欧美| 99久久99久久精品国产片 | 又粗又长又大又爽又黄少妇毛片 | 热久久99这里有精品 | 四虎影视成人 | 国产女v资源在线观看 | 片网站| 免费看十八岁美女 | 97精品国产97久久久久久粉红 | 91成人短视频在线观看 | av色图天堂网 | 欧美日韩有码 | 国产午夜精品一区二区三区 | 欧美成人黄色片 | 97人人模人人爽人人喊网 | 色www免费视频| 国产麻豆精品一区 | 国产精品中文在线 | 一区二区三区在线观看免费 | 色 免费观看 | 国产 日韩 欧美 中文 在线播放 | 毛片美女网站 | 亚洲影院一区 | 久久国产亚洲 | av一区在线播放 | 国产麻豆剧传媒免费观看 | 日韩精品第1页 | 欧美久久久久久久久久久 | 808电影免费观看三年 | 西西444www大胆高清图片 | 久草网站在线 | 国产精品九九视频 | 天天爽天天爽天天爽 | 日本一区二区三区免费看 | 中文字幕乱码电影 | 天天干夜夜干 | 亚洲 成人 欧美 | 亚洲人成人在线 | 五月花丁香婷婷 | 国产伦理久久精品久久久久_ | 最近中文字幕视频完整版 | 日韩精品资源 | 亚洲国产精品一区二区尤物区 | 婷婷在线观看视频 | 久久久久国产精品视频 | 911久久香蕉国产线看观看 | 日韩在线电影一区二区 | 久久久久中文 | 天天干亚洲 | 激情文学综合丁香 | 5月丁香婷婷综合 | 91免费看黄色| 亚洲天堂视频在线 | 中文字幕丰满人伦在线 | 天天天色 | 亚洲国产97在线精品一区 | 91视频麻豆视频 | 西西444www大胆高清图片 | 日韩天堂在线观看 | 婷婷伊人网 | 成人免费视频免费观看 | 免费一级片观看 | 欧美日韩大片在线观看 | 一区二区不卡在线观看 | 在线免费中文字幕 | 久久视频免费看 | a在线观看免费视频 | 午夜精品久久久久久久99无限制 | 午夜私人影院久久久久 | 九9热这里真品2 | 99九九视频 | 97视频免费 | 欧美a级在线 | 在线免费观看视频你懂的 | 久久久黄色av | 日韩大陆欧美高清视频区 | 激情婷婷色 | 午夜aaaa| 免费在线观看国产精品 | 韩国av一区 | 欧美精品亚洲精品 | 九九热精品在线 | 91成人精品在线 | 日韩经典一区二区三区 | 91丨九色丨国产在线观看 | 精品在线一区二区 | va视频在线观看 | 人人狠 | 久久涩涩网站 | 成年人在线免费视频观看 | 精品国产欧美一区二区三区不卡 | 91av网址| ,午夜性刺激免费看视频 | 色中色综合 | 久久麻豆精品 | 国产中文欧美日韩在线 | 国产美女免费观看 | 国产精品手机在线播放 | 日韩欧美一区二区三区在线观看 | 久久黄色片子 | 国产精品久久久久久久久久久久午夜 | 成人在线观看免费 | av电影在线观看完整版一区二区 | 亚洲激情小视频 | 国产精品亚洲综合久久 | 精品国产免费人成在线观看 | 中文字幕免费不卡视频 | 久久手机视频 | 天天玩天天干天天操 | 天天干干 | 五月婷婷中文 | 久久精品综合网 | 亚洲高清网站 | 麻豆视频在线免费 | 91毛片在线 | 亚洲综合在线观看视频 | 日本高清久久久 | 日韩av片免费在线观看 | 五月天久久精品 | 欧美人人 | 不卡视频在线 | 婷婷色网视频在线播放 | 热久精品 | 国产精品久久久久久久久久久久午夜 | 久碰视频在线观看 | 国内精品视频久久 | 91精品国产91久久久久久三级 | 在线观看视频一区二区 | 国产福利网站 | 精品视频97| 精品国产美女在线 | 国产人免费人成免费视频 | 激情婷婷在线观看 | 国产精品久一 | 嫩草av在线| 亚洲三级性片 | 日本一区二区免费在线观看 | 免费看日韩 | 91福利试看| 国产1区2| 久久国产精品一区二区三区四区 | 人人讲下载 | 国产精品中文 | av在线小说 | 国内精品视频在线 | 日日夜夜天天 | 亚洲人在线7777777精品 | 国产一区在线免费 | 亚洲日本成人 | 五月婷香蕉久色在线看 | 男女拍拍免费视频 | 99在线观看 | 亚洲精品久久视频 | 亚洲精品一区二区在线观看 | 这里有精品在线视频 | 色偷偷88888欧美精品久久久 | 亚洲精品视频中文字幕 | www久久久| 999久久a精品合区久久久 | 456免费视频 | 99理论片| 探花视频免费观看高清视频 | 91综合色| 91久久奴性调教 | 亚洲精品视频网 | 在线 高清 中文字幕 | 亚洲作爱| 一区二区三区三区在线 | 免费v片 | 久久av网 | 国产 在线 高清 精品 | 亚洲黄色免费网站 | 一区二区三区国 | 亚洲黄色小说网址 | 成年人黄色免费网站 | 日韩三级精品 | 亚洲一二三久久 | 99精品久久久久久久 | 免费av一级电影 | 亚洲精品1234区 | 一区二区三区高清在线 | 中文字幕日韩国产 | 国产中文字幕视频在线观看 | 992tv又爽又黄的免费视频 | 91精品1区| 亚洲免费在线 | av在线亚洲天堂 | 亚洲电影院| 最新一区二区三区 | 日韩免费一区二区 | 久久久国产精品麻豆 | 最新日韩在线 | 欧美一级看片 | 色七七亚洲影院 | 国产一级黄色免费看 | 一区二区三区四区五区六区 | 精品国自产在线观看 | 国产精品第一页在线观看 | 国产无遮挡又黄又爽在线观看 | 亚洲精品在线免费观看视频 | 国产第一页福利影院 | 97超碰.com | 麻豆一精品传二传媒短视频 | 在线直播av | www.夜色321.com | 欧美a级在线播放 | 国产最新视频在线 | 成人网看片 | 亚洲欧美色婷婷 | 天天干,夜夜爽 | 国产美女精品久久久 | 国产一在线精品一区在线观看 | 色亚洲激情 | 久久97精品 | 怡红院av久久久久久久 | 中文字幕电影高清在线观看 | 18网站在线观看 | 亚洲在线日韩 | 91中文字幕在线播放 | 狠狠地操 | 久久免费精彩视频 | 91插插视频| 精品视频免费观看 | 91成人精品国产刺激国语对白 | 国产剧情一区二区 | bbbbb女女女女女bbbbb国产 | 欧美成人精品欧美一级乱 | 91片在线观看 | 国产一区二区在线观看视频 | 欧美a√在线 | 国产精品 中文在线 | 天天爽天天搞 | 视频91在线 | 99视频在线精品免费观看2 | 亚洲 欧洲 国产 日本 综合 | 欧美视频二区 | 婷婷色网视频在线播放 | 天堂久色 | 亚洲黄色软件 | 狠狠色婷婷丁香六月 | 日本在线成人 | 99热精品在线 | 亚洲 欧美 91 | 久久久久久久免费看 | 操操综合网 | 欧美激情h | 久久精品欧美一 | 超薄丝袜一二三区 | 天天艹日日干 | 正在播放久久 | 伊人网av | 啪啪免费试看 | 韩国av电影在线观看 | 欧美一区二区三区免费观看 | 日韩在线小视频 | 在线免费观看黄色av | 欧美激情视频一二三区 | 天天综合网 天天 | 日本69hd | 99看视频在线观看 | 久色伊人 | 黄色三级免费 | 国产成人精品一区二区三区在线观看 | 97成人在线观看 | 又黄又爽又色无遮挡免费 | 久久久久国产精品午夜一区 | 成人国产精品久久久久久亚洲 | 韩日电影在线观看 | 色婷婷播放| 久久精品这里都是精品 | 福利区在线观看 | 在线有码中文 | 日本中文乱码卡一卡二新区 | 久久99久久99精品免观看粉嫩 | 久久99久国产精品黄毛片入口 | 亚洲九九影院 | 美女网站色在线观看 | 69人人| 国产精品免费高清 | 综合久久久 | 亚洲精品乱码久久久久 | 99久久精品无码一区二区毛片 | 日本亚洲国产 | 欧美狠狠色 | 在线观看免费黄色 | 97精品国产97久久久久久粉红 | 精品国产免费一区二区三区五区 | 精壮的侍卫呻吟h | 日韩最新av | 91在线免费视频 | www.五月天婷婷| 99精品久久久久久久久久综合 | 久久电影网站中文字幕 | 国产精品综合av一区二区国产馆 | 久久精品一二三 | 欧美日韩在线视频一区 | 国产女做a爱免费视频 | 久久精品www人人爽人人 | 欧美 日韩 国产 成人 在线 | 天堂久色| 99视频精品 | 国产精品免费小视频 | 超碰在线99 | 中文字幕在线观看2018 | 中文字幕av全部资源www中文字幕在线观看 | 欧洲色综合 | 国内精品久久久久久久 | 黄色综合 | 97超碰资源 | av一级片网站 | 久草在线免费看视频 | 日韩精选在线观看 | 91精品久久久久久综合乱菊 | 免费在线观看a v | 美女网站久久 | japanesexxxhd奶水| 天天做日日爱夜夜爽 | 免费三级骚 | 久久精品永久免费 | 天堂网在线视频 | 久久久久久久久影院 | 麻豆一级视频 | 97精品国产| 亚洲视频一区二区三区在线观看 | 人成电影网 | 人人草人 | 欧美日韩国产一区二 | 激情视频二区 | 不卡视频在线看 | 国产我不卡 | 一区二区不卡在线观看 | 亚洲精品色 | 午夜av在线 | 欧美三级在线播放 | 日韩欧美视频在线观看免费 | 亚洲精品日韩在线观看 | 国产一区欧美二区 | 摸阴视频 | 国产在线a免费观看 | 久久激五月天综合精品 | 99色国产| 中文字幕成人 | a一片一级| 性色av免费观看 | 精品国产一区二区三区久久 | 久久黄色影院 | 毛片美女网站 | 最新中文字幕在线资源 | 一区二区三区免费播放 | 97超碰人人在线 | 久久私人影院 | 亚洲一级电影视频 | 日韩成人在线免费观看 | 国产精品永久久久久久久www | 69欧美视频 | h视频日本| 日韩av电影手机在线观看 | 国产一区二区三区在线免费观看 | 99久久精品无码一区二区毛片 | 天天搞夜夜骑 | 久久成人国产精品一区二区 | 91av美女| 色噜噜在线观看 | 成人免费观看视频大全 | 久久免费视频观看 | 久久刺激视频 | 精品久久久免费视频 | 在线色亚洲| 日韩3区| 久久综合射 | 手机在线看a | av福利在线 | 91精品夜夜| 最近中文字幕国语免费av | 91精品国产三级a在线观看 | 久久视频在线观看免费 | 久久久久9999亚洲精品 | 欧美日韩免费在线观看视频 | 91麻豆产精品久久久久久 | 深爱激情站 | 久久伦理影院 | 片网址 | 久久草草影视免费网 | 999视频网 | 九九视频网 | 国产日韩在线看 | 江苏妇搡bbbb搡bbbb | 国产精品久久久久久久久久久久 | 国产精品久久久久久久久费观看 | 欧美精品久久久久久久久免 | 欧美国产日韩一区二区三区 | 亚洲一片黄 | 91高清完整版在线观看 | 国产高清不卡一区二区三区 | 玖玖玖在线观看 | 99久久精品视频免费 | 97国产大学生情侣白嫩酒店 | 在线免费观看麻豆 | 成人免费在线播放 | 精品国模一区二区 | 国产免费成人 | 99热最新地址 | 亚洲免费国产视频 | 精品国产成人在线影院 | 色5月婷婷 | 久久精品综合一区 | 四虎影视成人永久免费观看亚洲欧美 | 天天操偷偷干 | 日韩欧美国产成人 | 亚洲精品国产自产拍在线观看 | 天天操比| 天天干夜夜爱 | 欧美人牲 | 伊在线视频| 亚洲欧美国产精品18p | 国产午夜精品一区二区三区嫩草 | 免费看国产精品 | 成年人在线视频观看 | 久草视频在线看 | 久久99精品久久久久蜜臀 | 久日精品| www.69xx| 免费精品在线视频 | 成人a在线观看 | 少妇bbbb| 天天操天天干天天插 | 亚洲最大在线视频 | 97电影在线 | 欧美精品做受xxx性少妇 | 91av成人 | 欧美在线视频一区二区三区 | 人人干人人干人人干 | 在线观看中文字幕一区 | 69av免费视频 | 西西444www高清大胆 | 日韩高清观看 | 成人一区二区在线观看 | 久久久免费在线观看 | 在线影视 一区 二区 三区 | 欧美极品一区二区三区 | 久久精品视频播放 | 久久久在线免费观看 | 天天干 天天摸 天天操 | 在线亚洲高清视频 | 成人永久在线 | 天堂va在线高清一区 | 99精品电影| 2020天天干天天操 | 亚洲爱爱视频 | 黄色精品在线看 | 午夜精品视频一区 | 综合婷婷 | 成人精品影视 | 欧美在线视频一区二区三区 | 久草精品免费 | 一区二区日韩av | 色999在线| 人人干免费 | 久久精彩| 99热在线免费观看 | 国产成人精品免费在线观看 | 久久精品牌麻豆国产大山 | 国产一级一片免费播放放 | 国产福利在线免费 | 99久久99 | 久久久福利视频 | 国产视频精品视频 | 精品国产成人av | 色综合久久久久综合体桃花网 | 中文在线资源 | 欧美成人精品xxx | 日韩av电影中文字幕在线观看 | 婷婷色站 | 在线观看免费 | 精品免费视频123区 午夜久久成人 | 亚洲欧洲视频 | 国产精品亚州 | 欧美精品一区二区三区四区在线 | 人人干在线观看 | 丁香六月五月婷婷 | 亚洲人人网 | 91porny九色在线播放 | 久久免费资源 | 97免费在线观看视频 | 在线成人国产 | 激情网第四色 | 国产毛片在线 | 午夜av剧场 | 中文字幕久久精品亚洲乱码 | 一本到视频在线观看 | 成人在线视频论坛 | 狠狠干狠狠艹 | 日韩久久激情 | 欧美精品一区二区在线观看 | 午夜精品三区 | 中文字幕日韩有码 | 人人爱人人爽 | 亚洲 中文 在线 精品 | www免费看| www.天堂av | 日韩电影精品 | 日日干干夜夜 | 成人av电影免费 | 成人av网站在线观看 | 免费h视频 | 欧美久久久久久久久久久久久 | 欧洲精品久久久久毛片完整版 | 国产精品一区二区在线观看 | 99在线热播精品免费 | 五月花婷婷 | 亚洲第一中文字幕 | 69xx视频 | 日韩免费视频观看 | 国产一区二区精品91 | 国产流白浆高潮在线观看 | 成年人免费在线看 | 国产欧美在线一区 | 日本性视频 | 久久久亚洲麻豆日韩精品一区三区 | 500部大龄熟乱视频使用方法 | av色一区 | 精品在线一区二区三区 | 成人免费观看网址 | 国产精品9999久久久久仙踪林 | 日韩精品视频在线观看网址 | 亚洲天堂毛片 | 久久伊人综合 | 久久久久久久久久久久久影院 | 婷婷综合网 | 国产一区高清在线观看 | 中文字幕电影在线 | 黄色小网站免费看 | 成人免费视频a | 亚洲免费公开视频 | 狠狠色丁香婷婷综合橹88 | 欧美成人一区二区 | 国产视频1区2区3区 久久夜视频 | 波多野结衣一区二区 | 欧日韩在线 | 亚洲精品乱码久久久久久9色 | 精品久久久免费视频 | 国产日产欧美在线观看 | 欧美另类视频 | 国产打女人屁股调教97 | 亚洲精品小视频在线观看 | 国产成人精品一区二区三区 | 国产在线精品区 | 韩国一区二区三区视频 | 97超碰资源| 黄色av一级片 | 久久久精品久久日韩一区综合 | 精品在线观看一区二区三区 | 看国产黄色大片 | 亚洲深夜影院 | 中文字幕免费观看 | 一级性av| 人人插人人澡 | 四虎www com| 国产精品ssss在线亚洲 | 久久久久久久久久久久久久免费看 | 美女久久久久久久久久 | 欧美在线a视频 | 国产在线精品播放 | av福利在线免费观看 | 一区二区三区四区免费视频 | 国产精品99在线播放 | 中文字幕精 | 精品美女久久久久久免费 | 色天堂在线视频 | 日韩av手机在线观看 | 人人爽久久久噜噜噜电影 | 成人av地址| 免费久久99精品国产婷婷六月 | 69成人在线 | 精品96久久久久久中文字幕无 | 97超碰人人网| 婷婷色亚洲 | 97视频免费| 亚洲 欧美变态 另类 综合 | 国产精品精品久久久久久 | 久久国产免费看 | 六月色| 亚洲视频大全 | 永久免费精品视频网站 | 黄色小说视频在线 | 日本精品视频免费 | 日韩美女av在线 | 大型av综合网站 | 精品国内自产拍在线观看视频 | 国产精品视频永久免费播放 | 国产精品入口传媒 | 欧日韩在线| 丁香色婷 | 国产亚洲精品bv在线观看 | 人人澡av| 久久久高清一区二区三区 | 99精品视频一区 | 国产精品毛片完整版 | 日韩免费高清 | 亚洲韩国一区二区三区 | 国产最新在线视频 | 日韩成人免费在线电影 | 黄色亚洲 | 97在线资源 | 日韩成人精品 | 久久国产精品99久久久久久进口 | 成人av在线看 | 黄色福利网站 | 一区二区欧美日韩 | 天天色成人网 | 香蕉成人在线视频 | 亚洲免费视频在线观看 | 九九视频精品免费 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 黄色中文字幕在线 | 日日干夜夜操视频 | 色五婷婷| 碰超人人 | 亚洲精品小区久久久久久 | 久久久久免费 | 亚洲一级片 | 99视频国产精品 | 久久精品视频一 | 人人爽人人爽人人爽 | 西西44人体做爰大胆视频 | 中文在线天堂资源 | 蜜臀久久99精品久久久酒店新书 | 综合色狠狠| 中文字幕在线不卡国产视频 | 欧美极度另类 | 天天综合网久久综合网 | 精品在线观看一区二区 | 久久国产视频网 | 成人在线免费观看网站 | 中文字幕视频在线播放 | 国产精品video爽爽爽爽 | 99久久99视频只有精品 | 狠狠狠色| 欧美激情综合五月色丁香小说 | 久久一线 | 亚洲最大免费成人网 | 亚洲精品麻豆 | 91视频91色 | 国产精品私人影院 | 黄网站色成年免费观看 | 成人av在线电影 | 天天操天天色综合 | 欧美精品视| 久久久受www免费人成 | 色婷婷导航 | 波多野结衣在线观看视频 | 久久久久久视频 | 欧美三级在线播放 | 在线 国产 亚洲 欧美 | 天天躁日日躁狠狠躁av中文 | 亚洲 欧美日韩 国产 中文 | 久久国产精品免费一区二区三区 | 亚洲精品小视频 | 中文字幕 二区 | 久久久久久久影视 | 97精产国品一二三产区在线 | 久久手机免费视频 | 亚洲精品国精品久久99热 | 天天操夜夜拍 | 亚洲 精品在线视频 | 欧美精品被 | 国产精品99久久久久久宅男 | 视频一区二区精品 | 综合天堂av久久久久久久 | 天天爱天天色 | 欧美不卡视频在线 | 91精品国产九九九久久久亚洲 | 国产精品video| 久久久穴 | 激情在线免费视频 | 久久久久久久久久久免费 | 91成人短视频在线观看 | 色偷偷88888欧美精品久久 | 国产欧美日韩视频 | av一级一片 | 亚洲欧美激情插 | 久久综合狠狠综合久久激情 | 在线色网站 | 久久精品亚洲综合专区 | 最近2019好看的中文字幕免费 | 水蜜桃亚洲一二三四在线 | 久草精品视频 | 日韩中文字幕视频在线 | 一级成人网 | 精品五月天 | 高清有码中文字幕 | 国产精品久久久久久久午夜 | 91入口在线观看 | 国产精品久久久久久69 | 99视频在线精品 | 二区三区精品 | 国产精品国产精品 | 欧美一级片在线播放 | 中文字幕在线资源 | 国产成人高清在线 | 91精品办公室少妇高潮对白 | 黄色软件在线观看 | 国产视频一 | av软件在线观看 | 月丁香婷婷 | 在线精品视频免费播放 | 天天激情在线 | 久久精品三 | 干av在线 | 日韩理论影院 | 久草国产视频 | 在线观看岛国片 | 国产综合久久 | 97超碰免费 | 日日操天天操狠狠操 | 最近中文字幕高清字幕免费mv | 成人电影毛片 | av在线不卡观看 | 天天做综合网 | 国产专区欧美专区 | japanese黑人亚洲人4k | 久草视频免费在线播放 | 国产精品黄 |