• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Spark Streaming的快速視頻轉(zhuǎn)碼方法

    2019-01-07 12:16:34楊賀昆吳唐美馮朝勝
    計(jì)算機(jī)應(yīng)用 2018年12期
    關(guān)鍵詞:轉(zhuǎn)碼視頻文件分片

    付 眸,楊賀昆,吳唐美,何 潤,馮朝勝,2,康 勝

    (1.四川師范大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,成都 610101; 2.可視化計(jì)算與虛擬現(xiàn)實(shí)四川省重點(diǎn)實(shí)驗(yàn)室(四川師范大學(xué)),成都 610101; 3.四川師大科技園發(fā)展有限公司,成都 610066)(*通信作者電子郵箱fymen@naver.com)

    0 引言

    隨著多媒體服務(wù)的蓬勃發(fā)展,尤其是智能手機(jī)的普及,人們越來越便捷地生成和傳播圖片、語音、視頻等多媒體數(shù)據(jù);其中,視頻是主要的內(nèi)容形式之一。根據(jù)中國互聯(lián)網(wǎng)信息中心(China Internet Network Information Center, CNNIC)于2018年1月發(fā)布的《第41次中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》[1],截至2017年12月,中國網(wǎng)民總數(shù)已達(dá)7.72億;其中,有7.53億網(wǎng)民同時(shí)使用手機(jī)。有5.79億網(wǎng)民使用過網(wǎng)絡(luò)視頻類應(yīng)用,占總數(shù)的75%,比2016年增加了3 437萬。

    視頻內(nèi)容的制作、上傳、分享離不開視頻轉(zhuǎn)碼處理;尤其是移動端視頻分享,例如,通過QQ空間上傳分享一段視頻,上傳完成后,需要一段時(shí)間進(jìn)行視頻轉(zhuǎn)碼工作,才能在網(wǎng)頁中觀看,轉(zhuǎn)碼時(shí)間的長短與視頻的參數(shù)相關(guān)。隨著網(wǎng)絡(luò)視頻用戶規(guī)模的不斷增加,傳統(tǒng)的單機(jī)轉(zhuǎn)碼方式開始出現(xiàn)性能瓶頸,各類視頻網(wǎng)站或視頻應(yīng)用開始借助云計(jì)算技術(shù)[2-3],搭建并行轉(zhuǎn)碼平臺以提升視頻轉(zhuǎn)碼效率。

    本文根據(jù)視頻轉(zhuǎn)碼特點(diǎn),采用分布式流處理技術(shù),提出一種基于Spark Streaming的快速視頻轉(zhuǎn)碼方法。本文分析了傳統(tǒng)的單機(jī)轉(zhuǎn)碼方法和基于Hadoop的視頻轉(zhuǎn)碼方法,改進(jìn)了視頻切割的流程;并減少了批處理轉(zhuǎn)碼方式中大量等待時(shí)間。實(shí)驗(yàn)結(jié)果表明,本文提出的轉(zhuǎn)碼方法顯著提升了轉(zhuǎn)碼效率。

    1 相關(guān)工作

    視頻數(shù)據(jù)的編碼方式有很多種,如常見的HEVC(High Efficiency Video Coding)[4]、MPEG2(Moving Picture Experts Group 2)、MPEG4、H.264、VP9、VC1等。其中,聯(lián)合國下屬機(jī)構(gòu)國際電信聯(lián)盟電信標(biāo)準(zhǔn)分局(International Telecommunication Union Telecommunication standardization sector, ITU-T)制定了H.26X系列視頻編碼標(biāo)準(zhǔn)[5],因其高效的壓縮算法、良好的實(shí)時(shí)傳播兼容性,在遠(yuǎn)程會議、網(wǎng)上聊天、在線視頻等領(lǐng)域得到廣泛應(yīng)用。

    不同的視頻編碼方法有不同的使用場景,根據(jù)需要將視頻編碼進(jìn)行轉(zhuǎn)換是不可或缺的工作。傳統(tǒng)視頻轉(zhuǎn)碼方法是使用單機(jī)進(jìn)行轉(zhuǎn)碼工作,但在處理大量視頻資源時(shí)會有三種情況產(chǎn)生:1)多個(gè)視頻文件進(jìn)行轉(zhuǎn)碼時(shí),通常會按序進(jìn)入轉(zhuǎn)碼隊(duì)列;單機(jī)在處理長隊(duì)列視頻轉(zhuǎn)碼工作十分耗時(shí)。2)某個(gè)視頻轉(zhuǎn)碼工作出現(xiàn)問題,后續(xù)工作停止,需要人工值守。3)不具備并發(fā)視頻轉(zhuǎn)碼能力。

    針對上述情況,使用并行處理方法,可以較好解決以上問題。目前廣泛使用Hadoop框架[6]、Mapreduce編程模型[6-8]、分布式文件系統(tǒng)(Hadoop Distributed File System, HDFS)實(shí)現(xiàn)分布式存儲,開源多媒體處理框架執(zhí)行視頻轉(zhuǎn)碼任務(wù)。使用Hadoop分布式視頻轉(zhuǎn)碼方案,一般會有以下幾個(gè)步驟[9]:1)將源視頻切分成視頻分片,并上傳至HDFS。2)運(yùn)行Map()從HDFS下載視頻分片。3)節(jié)點(diǎn)通過多媒體處理框架進(jìn)行轉(zhuǎn)碼,并將轉(zhuǎn)碼后的文件上傳至HDFS。4)運(yùn)行Reduce(),對轉(zhuǎn)碼后的視頻分片進(jìn)行合并。

    根據(jù)不同視頻轉(zhuǎn)碼任務(wù),多媒體處理框架有多種選擇,F(xiàn)Fmpeg[10]支持多種視頻編碼方式的解碼和編碼,并能跨平臺運(yùn)行,成為眾多視頻轉(zhuǎn)碼研究的主要技術(shù)。MEncoder[11]因命令行解碼的方式,被廣泛應(yīng)用在二次開發(fā)的視頻播放器中。Kim等[12]的團(tuán)隊(duì)對分布式視頻轉(zhuǎn)碼技術(shù)進(jìn)一步研究,2012年研發(fā)了SMCCSE(Social Media Cloud Computing Service Environment),該系統(tǒng)將社交網(wǎng)絡(luò)作為切入點(diǎn),以人們在社交網(wǎng)絡(luò)活動中產(chǎn)生的音頻、視頻、圖像等多媒體文件作為轉(zhuǎn)碼對象,使用平臺即服務(wù)(Platform-as-a-Service, PaaS)云平臺[13],構(gòu)建了基于Hadoop的多媒體轉(zhuǎn)碼系統(tǒng),從而拓展了分布式轉(zhuǎn)碼技術(shù)的應(yīng)用范圍。Kim等[14]持續(xù)關(guān)注分布式轉(zhuǎn)碼技術(shù)的研究進(jìn)展,于2015年提出了多媒體轉(zhuǎn)碼服務(wù)的優(yōu)化轉(zhuǎn)碼方案,該方案進(jìn)一步研究HDFS塊大小、塊備份數(shù)量、Java虛擬機(jī)資源占用、輸入/輸出緩存大小等多種因素對轉(zhuǎn)碼效率的影響,通過大量實(shí)驗(yàn),解決了影響效率的關(guān)鍵問題。2017年,Kim等[15]研發(fā)了另一套基于Hadoop的分布式視頻轉(zhuǎn)碼方案HVTS (Hadoop-based Video Transcoding System),該方案的優(yōu)點(diǎn)是整合了視頻上傳、視頻轉(zhuǎn)碼、視頻分布式保存等模塊,提供了靈活的轉(zhuǎn)碼參數(shù)配置。

    國內(nèi)的相關(guān)研究工作中,重點(diǎn)是對分布式視頻轉(zhuǎn)碼技術(shù)進(jìn)行優(yōu)化。早在2009年,龐一等[16]面向單機(jī)多核視頻編碼并行化技術(shù)進(jìn)行了綜述研究,介紹了在多核環(huán)境中視頻并行化處理的技術(shù)特點(diǎn)。分布式視頻轉(zhuǎn)碼的負(fù)載均衡設(shè)計(jì)也是一個(gè)相當(dāng)重要的研究工作;良好的集群的心跳連接不但可以提升系統(tǒng)穩(wěn)定性,結(jié)合調(diào)度算法,還能最大限度提升集群性能[17]。2014年,Song等[18]的團(tuán)隊(duì)研發(fā)了使用FFmpeg和MEncoder進(jìn)行解碼的分布式系統(tǒng),該系統(tǒng)的特點(diǎn)是在Map階段,使用FFmpeg進(jìn)行轉(zhuǎn)碼任務(wù);在Reduce階段,使用MEncoder進(jìn)行視頻的合并工作。2016年,Chen等[19]提出一種基于Hadoop平臺的視頻并行轉(zhuǎn)碼方法,該方法通過Mapreduce編程,并行化執(zhí)行FFmpeg命令,實(shí)現(xiàn)視頻分割、轉(zhuǎn)碼、合成。該方法與單機(jī)視頻轉(zhuǎn)碼的實(shí)驗(yàn)結(jié)果表明,該方法的轉(zhuǎn)碼效率有明顯提升。但該方法本質(zhì)是基于Hadoop的批處理方式,轉(zhuǎn)碼時(shí),需要等待視頻切割任務(wù)完成后,Map節(jié)點(diǎn)才開始執(zhí)行視頻轉(zhuǎn)碼任務(wù),冗余的等待時(shí)間使得轉(zhuǎn)碼效率提升有限。

    2 關(guān)鍵技術(shù)

    2.1 FFmpeg多媒體框架

    FFmpeg是由開源社區(qū)維護(hù)的多媒體處理框架,提供解碼、編碼、轉(zhuǎn)碼、音頻視頻合成、音視頻分解、流媒體、視頻播放等功能。視頻轉(zhuǎn)碼流程如圖1所示。FFmpeg核心組件和功能如表1所示。

    圖1 視頻轉(zhuǎn)碼流程Fig. 1 Flow chart of video transcoding表1 FFmpeg核心庫Tab. 1 FFmpeg core library

    組件功能libavutil核心工具集,提供編程示例、數(shù)學(xué)函數(shù)、數(shù)據(jù)結(jié)構(gòu)等libavcodec基本的音視頻編碼、解碼庫libavformat對音視頻進(jìn)行分解和合并libavdevice可從第三方抓取和輸入媒體流libswscale提供視頻按照一定規(guī)格進(jìn)行縮放轉(zhuǎn)換功能libswresam-ple提供對音頻進(jìn)行重采樣、重編碼等轉(zhuǎn)碼操作

    FFmpeg通過使用命令行的方式提供強(qiáng)大的多媒體操作功能,可以完成視頻的編碼、解碼。文獻(xiàn)[10]研究實(shí)現(xiàn)了對H.264和HEVC的視頻編碼,并能對這兩種編碼的視頻文件進(jìn)行相互轉(zhuǎn)換。

    FFmpeg作為開源的多媒體框架,并不只針對視頻進(jìn)行處理,還擅長處理音頻、圖片、字幕、視頻/圖片采集等。

    2.2 Spark Streaming流處理框架

    Spark是目前流行的分布式框架之一,其核心由一組功能強(qiáng)大的擴(kuò)展庫組成。目前這些庫包括SparkSQL、Spark Streaming、MLlib以及GraphX,其他一些Spark庫和擴(kuò)展也在陸續(xù)開發(fā)中。Spark Streaming是Spark的組件之一,主要功能是實(shí)現(xiàn)流處理。

    3 構(gòu)建視頻轉(zhuǎn)碼模型

    Hadoop分布式系統(tǒng)擅長處理批量作業(yè),分布式作業(yè)的運(yùn)行依賴于前一步驟作業(yè)的處理結(jié)果,需要數(shù)據(jù)全部處理完畢后,再進(jìn)行下一步作業(yè);根據(jù)視頻轉(zhuǎn)碼的特性,建立流處理模型,將視頻分片數(shù)據(jù)視為流處理中的最小單元,通過調(diào)度算法快速分發(fā)視頻分片數(shù)據(jù),節(jié)省Hadoop切片與Mapper之間的等待時(shí)間,從而達(dá)到提高視頻轉(zhuǎn)碼效率的目的。要建立視頻轉(zhuǎn)碼的流處理模型,首先要考慮視頻文件的特性,其次基于Spark Streaming框架,分別建立數(shù)據(jù)源、RDD、視頻合并服務(wù)器。其中,RDD是研究的關(guān)建。

    3.1 Spark Streaming數(shù)據(jù)源設(shè)計(jì)

    Spark Streaming運(yùn)行時(shí),需要持續(xù)不斷地獲得輸入數(shù)據(jù)。一般視頻文件都會有較大體積,視頻文件在集群網(wǎng)絡(luò)中傳輸,會加重網(wǎng)絡(luò)開銷,降低系統(tǒng)效率,因此通過將完整的視頻文件進(jìn)行切片處理,把切分的視頻分片路徑作為文本輸入數(shù)據(jù),減輕了集群網(wǎng)絡(luò)傳輸負(fù)擔(dān)。要設(shè)計(jì)持續(xù)穩(wěn)定的數(shù)據(jù)源,同時(shí)視頻分片粒度的大小保持一致,需要穩(wěn)定性良好的硬件環(huán)境和程序設(shè)計(jì)。

    完整的源視頻文件需要切分為眾多小視頻文件,并滿足:

    (1)

    視頻文件V的總時(shí)長tsum應(yīng)與各分片S的時(shí)長tn之和相同。分片模塊調(diào)用SplitApp.Split(),在該函數(shù)中,調(diào)用FFmpeg進(jìn)行具體切片工作。同時(shí),數(shù)據(jù)源需要持續(xù)不斷地產(chǎn)生視頻分片數(shù)據(jù);因此,需要持續(xù)運(yùn)行SplitApp.Split()并調(diào)用FFmpeg命令,使用Java實(shí)現(xiàn)循環(huán)邏輯,直到視頻切片完成為止。分片節(jié)點(diǎn)的處理流程為:獲得視頻文件→調(diào)用Split→保存至HDFS目錄/slices。該功能偽代碼如算法1所示。

    算法1 視頻文件分片模塊。

    輸入 視頻文件;

    輸出 視頻分片統(tǒng)一資源定位符(Uniform Resource Locator, URL)。

    BEGIN

    raw_video←源視頻目錄;t←分片時(shí)長;output←視頻輸出文件URL

    WHILE(true)

    vList=從raw_video目錄獲取視頻列表

    FOR(f:vList)

    SumTime←獲取視頻總時(shí)長;

    start←0;leftTime←0;

    FOR(s=start;leftTime>T;)

    //ffmpeg視頻切片命令

    ffmpeg -ss s -i f -c copy -t t output;

    leftTime←leftTime-T;

    s+=T;

    start=s;

    END FOR

    END FOR

    END WHILE

    通過監(jiān)控上傳目錄raw_video,當(dāng)有視頻文件上傳完成,對該視頻文件進(jìn)行分片,并將分片文件URL作為數(shù)據(jù)源。

    數(shù)據(jù)源的輸出為文本文檔,文本中包含視頻文件名稱和視頻分片的URL,格式為:

    x.avi [空格] /目錄1/目錄2/x1.avi

    建立StreamingContext對象,有以下步驟:

    1)創(chuàng)建配置文件。

    StreamingContext配置代碼格式如下:

    SparkConf().setMaster(url).setAppName(String).

    set(String,String)

    其中set(String,String)函數(shù)可設(shè)置多個(gè)不同的參數(shù),常用配置參數(shù)如表2所示。

    表2 StreamingContext 配置參數(shù)Tab. 2 StreamingContext configuration parameters

    2)參數(shù)傳遞。

    根據(jù)集群硬件配置,合理的設(shè)置參數(shù)值,可以讓系統(tǒng)更穩(wěn)定高效地運(yùn)行,提升流處理作業(yè)效率。將配置文件作為參數(shù)傳遞給StreamingContext():

    val conf=new SparkConf()

    .setMaster(url)

    .setAppName(String)

    .set(String,String

    val ssc=new StreamingContext(conf,Seconds(x))

    StreamingContext產(chǎn)生DStream,即一段連續(xù)的流數(shù)據(jù);除了通過接收數(shù)據(jù)源的數(shù)據(jù)產(chǎn)生DStream,也可通過調(diào)用DStream算子,產(chǎn)生新的DStream。產(chǎn)生DStream的時(shí)間間隔通過參數(shù)Seconds(x)指定,x值越大,產(chǎn)生的DStream的時(shí)間就越長,實(shí)時(shí)性越低。通常在實(shí)時(shí)性要求比較高的流處理模型中,x取較小值。

    對DStream的操作,可調(diào)用相關(guān)操作算子,常用算子如表3所示。

    DStream中包含從數(shù)據(jù)源獲得的數(shù)據(jù),并封裝為一系列RDD,foreachRDD()函數(shù)可對每個(gè)RDD進(jìn)行操作,格式為:

    foreachRDD(func)=>RDD(func)

    該算子將DStream內(nèi)部的RDD取出,可存放在文件系統(tǒng)中、或傳送至網(wǎng)絡(luò)、存入數(shù)據(jù)庫。

    3.2 依賴分析

    通常在進(jìn)行數(shù)據(jù)處理時(shí),不同的數(shù)據(jù)之間有一定的依賴關(guān)系,這種依賴關(guān)系在Spark里稱為Lineage,也即RDD的依賴關(guān)系,使用有向無環(huán)圖(Directed Acyclic Graph, DAG)來表示。因此,在Spark中,按照Lineage生成DAG,要根據(jù)具體的數(shù)據(jù)處理流程來確定。

    RDD有兩種類型的操作算子:Transformation和Action。Transformation類型的操作算子不會立即執(zhí)行,Action型操作算子會立即觸發(fā)作業(yè)(Job)。DAG Scheduler將作業(yè)劃分為階段(Stage),階段包含要執(zhí)行的任務(wù)集合,任務(wù)集合由TaskScheduler分配到節(jié)點(diǎn)上執(zhí)行。劃分階段的依據(jù)是RDD的依賴性,分別如下。

    寬依賴(Wide Dependency):寬依賴指當(dāng)前階段的執(zhí)行,依賴于多個(gè)前一階段的任務(wù)完成。寬依賴如圖2所示。

    表3 DStream操作算子Tab. 3 DStream operators

    圖2 寬依賴示意圖Fig. 2 Schematic diagram of wide dependency

    窄依賴(Narrow Dependency):當(dāng)前階段任務(wù)的執(zhí)行,只與當(dāng)前任務(wù)的前一階段任務(wù)有關(guān)。窄依賴示意圖如圖3所示。

    圖3 窄依賴示意圖Fig. 3 Schematic diagram of narrow dependence

    如果當(dāng)前階段要執(zhí)行,需要多個(gè)前階段執(zhí)行完畢;因此,寬依賴是劃分階段的依據(jù)。結(jié)合本文的研究內(nèi)容,分布式視頻轉(zhuǎn)碼流程有以下7個(gè)步驟:1)讀取視頻文件。2)將視頻文件切分為多個(gè)視頻分片。3)保存視頻分片URL至txt文檔。4)txt文檔作為輸入源。5)解析txt文檔中的視頻分片URL。6)合并已轉(zhuǎn)碼視頻分片為視頻文件。7)調(diào)度URL數(shù)據(jù)至Executor執(zhí)行轉(zhuǎn)碼。

    分析以上步驟的依賴關(guān)系,按照寬依賴和窄依賴概念劃分階段,可以得到面向流處理的視頻轉(zhuǎn)碼模型依賴關(guān)系圖如圖4所示。

    階段1和階段2之間通過GroupByKey將視頻分片合并,有Shuffle過程,該過程有較大網(wǎng)絡(luò)開銷。

    3.3 構(gòu)建RDD模型

    RDD是Spark分布式處理的關(guān)鍵,也是Spark Streaming的重要環(huán)節(jié),結(jié)合分布式流處理的視頻轉(zhuǎn)碼特性,合理劃分Partition、Stage、Task,將源視頻文件名稱和視頻分片文件URL組成的〈K,V〉作為要處理的原始數(shù)據(jù),能有效避免視頻文件因調(diào)度帶來的網(wǎng)絡(luò)開銷和存儲的高I/O。

    圖4 面向分布式視頻轉(zhuǎn)碼的DAGFig. 4 DAG for distributed video transcoding

    構(gòu)建RDD模型,首先要確定在Spark Streaming中的RDD產(chǎn)生和數(shù)據(jù)原理,通過3.2節(jié)針對視頻轉(zhuǎn)碼的依賴劃分階段,構(gòu)建良好的RDD模型。Spark Streaming的核心是操作RDD,DStream最終要分解為一個(gè)或多個(gè)RDD,即數(shù)據(jù)流的分布式。任務(wù)調(diào)度器(Task Scheduler)是并行化的重要環(huán)節(jié)。在Spark中,從細(xì)粒度到粗粒度劃分,處理單元可分為如下:1)工作線程(Executor)。處理數(shù)據(jù)的最小執(zhí)行單位。2)工作節(jié)點(diǎn)(Worker)。一個(gè)工作節(jié)點(diǎn)為一臺物理機(jī)器,在一個(gè)工作節(jié)點(diǎn)上,可以運(yùn)行多個(gè)工作線程。

    工作線程是執(zhí)行處理工作的最小單位,從細(xì)粒度到粗粒度劃分,要處理的業(yè)務(wù)對象可分為如下:1)任務(wù)(Task)。工作線程要處理的最小工作單位,包含一系列處理方法和數(shù)據(jù)分區(qū)(Partition)。2)階段(Stage)。一個(gè)任務(wù)集,階段按照寬依賴和窄依賴劃分;包含一系列寬窄依賴關(guān)系的RDD,如圖5所示。

    圖5 RDD業(yè)務(wù)分層調(diào)度模型Fig. 5 Hierarchical scheduling model for RDD business

    結(jié)合本文的研究工作,按照數(shù)據(jù)粒度從細(xì)到粗劃分,有以下數(shù)據(jù)對象:

    1)分區(qū)(Partition):最小的數(shù)據(jù)單位。結(jié)合本文研究內(nèi)容,將分區(qū)定義為一條〈視頻名 分片名〉文本記錄。

    2)RDD(彈性分布式數(shù)據(jù)集):RDD中定義了多種數(shù)據(jù)處理方式,即操作算子。結(jié)合本文研究內(nèi)容,將RDD定義為包含多個(gè)〈視頻名 分片名〉記錄,以及對這些記錄的處理方法。

    3)DStream(離散數(shù)據(jù)流):DStream包含多個(gè)RDD,按照設(shè)定的單位時(shí)間不斷產(chǎn)生。在本文中,產(chǎn)生DStream的數(shù)據(jù)源是包含〈視頻名 分片URL〉記錄的txt文檔。

    以上分別對處理單元、業(yè)務(wù)對象、數(shù)據(jù)對象按照粒度由小到大進(jìn)行區(qū)分,并結(jié)合本文研究內(nèi)容,將包含視頻分片信息的文本文檔作為數(shù)據(jù)源,〈視頻名 分片URL〉為最小數(shù)據(jù)單元。將以上內(nèi)容結(jié)合3.2節(jié)的依賴分析,可得基于視頻分片的RDD數(shù)據(jù)流圖,如圖6所示。

    圖6 RDD數(shù)據(jù)流圖Fig. 6 RDD data stream diagram

    根據(jù)數(shù)據(jù)流圖,可建立RDD編程模型,偽代碼如算法2所示。

    算法2 RDD編程模型。

    輸入 DStream;

    輸出 視頻分片URL。

    BEGIN

    DStream.foreachRDD

    rdd←從DStream中取得一個(gè)RDD

    IF(RDD不為空)

    rdd1←rdd.map(x=>x.split("")(1))

    item←從rdd中取得一個(gè)元素

    rdd1.foreach

    url←從rdd1中取得一個(gè)元素

    調(diào)用轉(zhuǎn)碼命令:ffmpeg -i url -c:v libvpx-vp9 output.webm

    將output.webm移動至HDFS分片目錄中

    END foreach

    END IF

    END foreach RDD

    數(shù)據(jù)源輸出的是一條文本記錄,該記錄則為RDD中的一個(gè)基本元素,格式為:

    視頻文件名[空格]視頻分片文件URL

    RDD調(diào)用map算子進(jìn)行轉(zhuǎn)換生成RDD1,通過對RDD1進(jìn)行foreach()運(yùn)算,得到RDD1中的記錄是一條視頻分片文件URL。

    3.4 視頻分片文件合并模型

    根據(jù)流處理的特性,數(shù)據(jù)持續(xù)地產(chǎn)生和處理,因此要對舊的文件和緩存進(jìn)行清理,防止因空間不足而導(dǎo)致系統(tǒng)不穩(wěn)定。視頻的合并要按照視頻分片的先后次序進(jìn)行,在分布式轉(zhuǎn)碼過程中,無法保證視頻按照先后順序依次轉(zhuǎn)碼;因此,需要等待視頻文件的所有分片都轉(zhuǎn)碼完成后,再進(jìn)行合并。視頻合并偽代碼如算法3所示。

    算法3 流處理視頻合并。

    輸入 視頻名稱,分片URL列表;

    輸出 完整視頻文件。

    BEGIN

    key←視頻名稱;values←分片URL列表;output←完整視頻輸出文件

    新建文本concatFile←對values進(jìn)行排序

    //運(yùn)行合并命令

    ffmpeg -f concat -safe 0 -i concatFile -c copy output

    上傳output到HDFS

    END

    concatFile文本文件中的分片在時(shí)間上是有序的,否則會導(dǎo)致視頻內(nèi)容錯(cuò)亂。

    4 實(shí)驗(yàn)結(jié)果與分析

    4.1 系統(tǒng)部署

    基于本文所提出的快速視頻轉(zhuǎn)碼方法,設(shè)計(jì)和實(shí)現(xiàn)了快速視頻轉(zhuǎn)碼原型系統(tǒng)。該原型系統(tǒng)部署在四川師范大學(xué)云計(jì)算實(shí)驗(yàn)室私有云平臺,該云平臺提供了友好的彈性虛擬機(jī)管理界面,通過管理界面可以對目標(biāo)虛擬機(jī)進(jìn)行復(fù)制創(chuàng)建,可短時(shí)間按需創(chuàng)建包含一定數(shù)量節(jié)點(diǎn)的同構(gòu)集群環(huán)境;同時(shí),根據(jù)不同的需求,可彈性擴(kuò)展虛擬機(jī)硬件配置,這極大地方便了實(shí)驗(yàn)的開展。

    4.2 運(yùn)行環(huán)境

    4.2.1 硬件環(huán)境

    Master節(jié)點(diǎn)需要運(yùn)行HDFS的NameNode進(jìn)程、Spark的Master進(jìn)程。該節(jié)點(diǎn)出現(xiàn)故障會對集群造成災(zāi)難性影響,因此該節(jié)點(diǎn)配置較大內(nèi)存和較多核CPU。

    SplitServer節(jié)點(diǎn)的主要工作是將視頻切分,切分工作實(shí)際上是將音視頻數(shù)據(jù)按照輸入?yún)?shù)復(fù)制并保存為音視頻數(shù)據(jù)塊。復(fù)制為多個(gè)小塊的過程比轉(zhuǎn)碼所需要的CPU運(yùn)算力要低得多;因此,切分過程由一個(gè)節(jié)點(diǎn)完成即可,為了應(yīng)對較大的視頻文件存儲問題,切分節(jié)點(diǎn)SplitServer除了配置與Master節(jié)點(diǎn)相同的CPU和內(nèi)存外,磁盤容量提升至100 GB。在實(shí)驗(yàn)中將SplitServer也視為數(shù)據(jù)源。

    MergeServer工作與SplitServer相反,把轉(zhuǎn)碼后的視頻切片,有序合并成一個(gè)視頻文件,再上傳至HDFS保存。MergeServer的輸入數(shù)據(jù)是有序的、完整的、已經(jīng)轉(zhuǎn)碼的視頻分片。

    Slave節(jié)點(diǎn),即運(yùn)行HDFS的Datanode節(jié)點(diǎn)、Spark Streaming的Work節(jié)點(diǎn),是分布式存儲、分布式轉(zhuǎn)碼工作的主要執(zhí)行節(jié)點(diǎn)。Slave節(jié)點(diǎn)初始配置4核心CPU、8 GB內(nèi)存、40 GB存儲;初始數(shù)量20個(gè),可根據(jù)實(shí)驗(yàn)要求,在云管理后臺進(jìn)行彈性配置。詳細(xì)配置如表4所示。

    表4 系統(tǒng)部署硬件配置Tab. 4 System deployment hardware configuration

    4.2.2 軟件環(huán)境

    本文系統(tǒng)所有軟件運(yùn)行在Linux平臺,私有云提供了64位CentOS 6.1操作系統(tǒng),經(jīng)測試,本文系統(tǒng)所需要的軟件都能正常穩(wěn)定地運(yùn)行在64位CentOS 6.1系統(tǒng)中。軟件詳細(xì)參數(shù)如表5所示。

    表5 系統(tǒng)部署軟件環(huán)境Tab. 5 System deployment software environment

    根據(jù)節(jié)點(diǎn)信息,繪制節(jié)點(diǎn)網(wǎng)絡(luò)拓?fù)鋱D,如圖7所示。

    圖7 節(jié)點(diǎn)網(wǎng)絡(luò)拓?fù)銯ig. 7 Node network topology

    Master節(jié)點(diǎn)與Slave節(jié)點(diǎn)配置文件基本一致。通過配置一個(gè)初始節(jié)點(diǎn),再通過私有云Web管理后臺對該節(jié)點(diǎn)進(jìn)行復(fù)制、重新分配網(wǎng)卡MAC、重新分配IP的方式快速創(chuàng)建其他節(jié)點(diǎn)。

    Hadoop配置目錄中的slaves文件指定集群由哪些節(jié)點(diǎn)組成,每行分別填寫節(jié)點(diǎn)名“slave1”至“slave20”,由20個(gè)節(jié)點(diǎn)組成slaves集群。

    4.3 實(shí)驗(yàn)結(jié)果與分析

    本節(jié)實(shí)驗(yàn)對象選取3個(gè)不同編碼的視頻文件。根據(jù)具體實(shí)驗(yàn),選取相應(yīng)視頻文件進(jìn)行實(shí)驗(yàn)分析,因視頻文件通常帶有較多參數(shù)信息,不同的參數(shù)會在解碼和編碼過程中,對視頻文件產(chǎn)生不同的損益。視頻文件的主要參數(shù)如表6所示。

    表6 實(shí)驗(yàn)視頻對象信息表Tab. 6 Experimental video object informationTable

    4.3.1 視頻分片大小實(shí)驗(yàn)與分析

    SplitServer切分的視頻分片保存在HDFS中,切分依據(jù)為時(shí)間長度(單位為ms);通過不同的時(shí)長產(chǎn)生不同大小的視頻分片文件。HDFS默認(rèn)塊大小128 MB,視頻分片大小根據(jù)視頻文件的格式、碼率、分辨率的不同而有差異。本實(shí)驗(yàn)分別設(shè)置不同時(shí)長,分析不同大小的視頻分片的轉(zhuǎn)碼效率。視頻分片大小對轉(zhuǎn)碼效率的影響如圖8所示。

    圖8 視頻分片大小對轉(zhuǎn)碼效率的影響Fig. 8 Effect of video fragment size on transcoding efficiency

    由圖8可知,在視頻分片大小為128 MB時(shí),可得到最高轉(zhuǎn)碼效率,即當(dāng)文件越來越接近HDFS塊文件時(shí),網(wǎng)絡(luò)開銷越?。划?dāng)文件大于HDFS塊大小時(shí),需要從多個(gè)節(jié)點(diǎn)的多個(gè)塊中讀取數(shù)據(jù),網(wǎng)絡(luò)開銷增大,任務(wù)處理時(shí)間變長。

    4.3.2 流處理產(chǎn)生DStream時(shí)長實(shí)驗(yàn)與分析

    Spark Streaming依據(jù)StreamContext()設(shè)置的參數(shù)產(chǎn)生DStream,本實(shí)驗(yàn)分別設(shè)置不同時(shí)長,分析相應(yīng)的轉(zhuǎn)碼效率。DStream產(chǎn)生間隔對轉(zhuǎn)碼效率的影響如圖9所示。

    圖9 DStream產(chǎn)生間隔對轉(zhuǎn)碼效率的影響Fig. 9 Effect of DStream production interval on transcoding efficiency

    由圖9可知,隨著時(shí)間間隔的增大,轉(zhuǎn)碼效率逐漸提高,在時(shí)間間隔為5 s時(shí),可得最高轉(zhuǎn)碼效率,然后隨著時(shí)間間隔增大,效率逐漸變低,并且逐漸穩(wěn)定在20 min。太短的時(shí)間間隔會產(chǎn)生冗余的空作業(yè),減少空作業(yè)是優(yōu)化的一個(gè)方向;時(shí)間間隔增長時(shí),因硬件配置的限制,集群性能無法應(yīng)對短時(shí)間的大量轉(zhuǎn)碼作業(yè),造成作業(yè)積壓,根據(jù)調(diào)度算法,將處理作業(yè)加入隊(duì)列,流處理的實(shí)時(shí)性降低。

    4.3.3 視頻不同編碼互轉(zhuǎn)實(shí)驗(yàn)與分析

    本實(shí)驗(yàn)對常見的視頻編碼之間的相互轉(zhuǎn)換進(jìn)行分析,封裝格式為MKV。實(shí)驗(yàn)對象如表6中A.mkv所示。

    本實(shí)驗(yàn)選取3種常見的視頻編碼進(jìn)行互轉(zhuǎn)碼實(shí)驗(yàn),為了結(jié)果的準(zhǔn)確有效,使用控制變量法,對A.mkv進(jìn)行轉(zhuǎn)碼時(shí),除編碼方法外,其他參數(shù)不作調(diào)整,如表7所示。

    表7 編碼相互轉(zhuǎn)換設(shè)計(jì)Tab. 7 Coding mutual conversion design

    因?yàn)橄嗤幋a的視頻轉(zhuǎn)碼實(shí)際上是將原來的數(shù)據(jù)進(jìn)行復(fù)制,沒有進(jìn)行解碼、重編碼工作;所以對相同視頻轉(zhuǎn)碼的轉(zhuǎn)換時(shí)間開銷設(shè)置為“1”。對表6中的視頻文件進(jìn)行不同編碼的轉(zhuǎn)制,不同視頻編碼的轉(zhuǎn)碼效率如圖10所示。

    圖10 不同視頻編碼的轉(zhuǎn)碼效率Fig. 10 Transcoding efficiency of different video encoding

    實(shí)驗(yàn)結(jié)果表明,不同的編碼之間進(jìn)行轉(zhuǎn)換效率差異很大。不同的視頻編碼,有不同的編碼算法。設(shè)有A、B視頻文件分別用A1、B1編碼算法進(jìn)行編碼。視頻轉(zhuǎn)碼的流程如圖1,原理是首先將A視頻按照A1算法進(jìn)行解碼,得到視頻幀,將視頻幀按照B2進(jìn)行編碼,得到B視頻。因此,不同的視頻編碼因?yàn)樗惴ǖ牟煌室膊煌?/p>

    4.3.4 源視頻與切片時(shí)長關(guān)系實(shí)驗(yàn)

    通常碼率越大、分辨率越高的視頻占用的空間也會越大。通過對不同大小的源視頻進(jìn)行不同方式的切片實(shí)驗(yàn),有助于發(fā)現(xiàn)最高效的切分方法。本實(shí)驗(yàn)對源視頻大小/切片大小進(jìn)行實(shí)驗(yàn),為了避免相同視頻編碼方法的相互轉(zhuǎn)換,本實(shí)驗(yàn)的目標(biāo)視頻編碼為MPEG-4,封裝格式為avi。不同時(shí)間長度的視頻文件轉(zhuǎn)碼效率如圖11所示。

    圖11 不同時(shí)間長度的視頻文件轉(zhuǎn)碼效率Fig. 11 Video file transcoding efficiency with different time lengths

    由圖11分析可知,源視頻的參數(shù)不同,切分的視頻分片大小不同,轉(zhuǎn)碼效率也不同。

    4.3.5 節(jié)點(diǎn)/CPU核心數(shù)量對轉(zhuǎn)碼效率的影響

    1)節(jié)點(diǎn)數(shù)量-轉(zhuǎn)碼效率。

    通過對集群節(jié)點(diǎn)數(shù)量進(jìn)行調(diào)整,發(fā)現(xiàn)節(jié)點(diǎn)數(shù)量與轉(zhuǎn)碼效率的關(guān)系。本實(shí)驗(yàn)共啟用20個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)分配1個(gè)CPU核心。起始節(jié)點(diǎn)數(shù)量從2開始,依次遞增1。實(shí)驗(yàn)對象為A.mkv、B.avi、C.mp4,三個(gè)視頻文件不分次序轉(zhuǎn)碼為flv格式,編碼為H.264,10次實(shí)驗(yàn)后取均值,結(jié)果如圖12所示。

    圖12 集群節(jié)點(diǎn)數(shù)量對轉(zhuǎn)碼效率的影響Fig. 12 Effect of number of cluster nodes on transcoding efficiency

    由圖12可以看出,隨著節(jié)點(diǎn)的增加、集群計(jì)算能力的增強(qiáng),視頻轉(zhuǎn)碼消耗的時(shí)間不斷減少。在分布式系統(tǒng)中,節(jié)點(diǎn)的增加也意味著分布率的提升。在Spark Streaming中,同一個(gè)節(jié)點(diǎn),可能同時(shí)運(yùn)行著多個(gè)CPU核心。在節(jié)點(diǎn)數(shù)量為11時(shí),轉(zhuǎn)碼效率沒有進(jìn)一步提升,隨著節(jié)點(diǎn)數(shù)量的增加,三個(gè)視頻文件的轉(zhuǎn)碼總時(shí)間在27 min左右。該實(shí)驗(yàn)結(jié)果表明,當(dāng)集群節(jié)點(diǎn)達(dá)到一定規(guī)模、轉(zhuǎn)碼任務(wù)不變的情況下,隨著集群節(jié)點(diǎn)的增加,并不能帶來效率的繼續(xù)提升。通過查看日志發(fā)現(xiàn),部分節(jié)點(diǎn)并沒有執(zhí)行轉(zhuǎn)碼任務(wù),處于空置狀態(tài)。

    2)CPU核心數(shù)量-轉(zhuǎn)碼效率。

    本實(shí)驗(yàn)通過更改Spark Shell程序提交參數(shù),完成對CPU核心數(shù)量的關(guān)閉/啟用,命令格式如下:

    spark-submit --master spark:master:7 077 --spark.cores.maxNa.jar

    將N取1~10。實(shí)驗(yàn)對象為A.mkv、B.avi、C.mp4,三個(gè)視頻文件不分次序轉(zhuǎn)碼為flv格式,編碼為H.264,10次實(shí)驗(yàn)后取均值,得到運(yùn)行結(jié)果如圖13所示。

    圖13 集群CPU核心總數(shù)量對轉(zhuǎn)碼效率的影響Fig. 13 Effect of total number of cluster CPU cores on transcoding efficiency

    集群使用的CPU總核心數(shù)量越多,視頻轉(zhuǎn)碼消耗的時(shí)間越小,轉(zhuǎn)碼效率越高,至18個(gè)時(shí),效率沒有隨著核心數(shù)的增多而提升,這與增加集群節(jié)點(diǎn)數(shù)量的趨勢大致相同。進(jìn)一步研究節(jié)點(diǎn)數(shù)量與集群CPU總核心數(shù)量之間的轉(zhuǎn)碼差異,結(jié)果如圖14所示。

    圖14 不同集群總CPU/核心數(shù)量的轉(zhuǎn)碼效率對比Fig. 14 Transcoding efficiency comparison of of different cluster total CPUs/cores

    從圖14中可以看出,隨著集群節(jié)點(diǎn)數(shù)量與集群CPU總核心數(shù)量的增多,視頻轉(zhuǎn)碼效率在不斷地提升;但當(dāng)集群總節(jié)點(diǎn)數(shù)與CPU總核心數(shù)為8個(gè)時(shí),兩者轉(zhuǎn)碼用時(shí)相同;繼續(xù)增加CPU核心數(shù)量和節(jié)點(diǎn)數(shù)量,CPU核心數(shù)量的增加能帶來更高的效率。集群節(jié)點(diǎn)數(shù)在12個(gè)時(shí),達(dá)到最大轉(zhuǎn)碼效率;CPU總核心在集群節(jié)點(diǎn)數(shù)為18個(gè)時(shí)達(dá)到最大轉(zhuǎn)碼效率。結(jié)合Spark調(diào)度原理,可進(jìn)一步分析出現(xiàn)這種差異是因?yàn)檎{(diào)度管理器會優(yōu)先將作業(yè)交給已經(jīng)存儲有視頻分片的節(jié)點(diǎn)進(jìn)行處理,從而降低數(shù)據(jù)在集群中傳輸帶來的網(wǎng)絡(luò)開銷。

    4.3.6 不同平臺實(shí)現(xiàn)的視頻轉(zhuǎn)碼系統(tǒng)對照實(shí)驗(yàn)

    目前使用Hadoop實(shí)現(xiàn)的分布式視頻轉(zhuǎn)碼方法很多,相關(guān)學(xué)術(shù)研究資料豐富,視頻轉(zhuǎn)碼方案也很成熟。本文對文獻(xiàn)[15]、文獻(xiàn)[19]、文獻(xiàn)[20]的Hadoop的分布式轉(zhuǎn)碼方案進(jìn)行了研究;改進(jìn)了需要手工進(jìn)行視頻分片的問題,進(jìn)一步實(shí)現(xiàn)了一套基于Hadoop的分布式視頻轉(zhuǎn)碼系統(tǒng)。因?yàn)镾park Streaming與Hadoop有良好的兼容性,所以兩者可在相同的硬件環(huán)境中運(yùn)行,因此,可認(rèn)為基于Hadoop分布式的視頻轉(zhuǎn)碼方案與基于Spark Streaming的分布式流處理視頻轉(zhuǎn)碼方案有相同的硬件和軟件環(huán)境。通過對三個(gè)不同的視頻文件進(jìn)行轉(zhuǎn)碼,探索基于Spark Streaming實(shí)現(xiàn)的轉(zhuǎn)碼系統(tǒng)與基于Hadoop實(shí)現(xiàn)的視頻轉(zhuǎn)碼系統(tǒng)中的效率問題。實(shí)驗(yàn)對象信息如表6所示。

    分別使用基于Hadoop實(shí)現(xiàn)的分布式轉(zhuǎn)碼系統(tǒng)和基于Spark Streaming實(shí)現(xiàn)的分布式流處理轉(zhuǎn)碼系統(tǒng)對A.mkv、B.avi、C.mp4進(jìn)行目標(biāo)編碼方法為MPEG-4的轉(zhuǎn)碼。通過10次實(shí)驗(yàn),每項(xiàng)結(jié)果取平均值,結(jié)果如圖15所示。

    圖15 Hadoop與Spark Streaming分布式轉(zhuǎn)碼系統(tǒng)效率對比Fig. 15 Efficiency comparison between Hadoop and Spark Streaming distributed transcoding systems

    通過圖15可以得出,基于Spark Streaming實(shí)現(xiàn)的分布式流處理視頻轉(zhuǎn)碼系統(tǒng)比基于Hadoop實(shí)現(xiàn)的分布式轉(zhuǎn)碼系統(tǒng)的轉(zhuǎn)碼效率提升了26.7%。理論分析結(jié)果表明,在視頻文件切分到視頻分片轉(zhuǎn)碼環(huán)節(jié),不需要視頻文件全部切分完成即可進(jìn)行轉(zhuǎn)碼工作,通過Spark構(gòu)建的DAG任務(wù)模型節(jié)省了這部分的時(shí)間開銷,提升了轉(zhuǎn)碼效率。

    4.3.7 與文獻(xiàn)[19]的視頻轉(zhuǎn)碼方法對照實(shí)驗(yàn)

    本文按照文獻(xiàn)[19]提出的基于Hadoop平臺的視頻并行轉(zhuǎn)碼方法,實(shí)現(xiàn)了一種基于Hadoop的視頻轉(zhuǎn)碼系統(tǒng),與基于本文所提出視頻轉(zhuǎn)碼方法實(shí)現(xiàn)的原型系統(tǒng)進(jìn)行對比實(shí)驗(yàn)。實(shí)驗(yàn)硬件配置為4個(gè)節(jié)點(diǎn)(CPU為雙核1 GHz、內(nèi)存為16 GB),通過四川師范大學(xué)私有云快速創(chuàng)建與該硬件參數(shù)相近的節(jié)點(diǎn)。實(shí)驗(yàn)選取了三個(gè)視頻文件作為實(shí)驗(yàn)對象[19],參數(shù)如表8所示。

    表8 視頻文件信息Tab. 8 Video file information

    表8中的實(shí)驗(yàn)對象通過FFmpeg對一段視頻進(jìn)行處理生成,實(shí)驗(yàn)規(guī)定了視頻轉(zhuǎn)碼后的目標(biāo)參數(shù)[19],如表9所示。

    表9 視頻轉(zhuǎn)碼參數(shù)Tab. 9 Video transcoding parameters

    針對同一視頻進(jìn)行了10次實(shí)驗(yàn),取平均轉(zhuǎn)碼時(shí)間,實(shí)驗(yàn)結(jié)果對比如圖16所示。

    圖16 不同方案的轉(zhuǎn)碼效率對比Fig. 16 Transcoding efficiency comparison of different schemes

    和文獻(xiàn)[19]的方法相比,本文方法對Video1的轉(zhuǎn)碼效率提升21%,對Video2的轉(zhuǎn)碼效率提升了19.7%,對Video3的轉(zhuǎn)碼效率提升了19.6%;三個(gè)視頻的平均效率提升了20.1%。對比實(shí)驗(yàn)結(jié)果表明,本文提出的視頻轉(zhuǎn)碼方法較文獻(xiàn)[19]方法效率顯著提高。

    5 結(jié) 語

    現(xiàn)有的單機(jī)視頻轉(zhuǎn)碼方法存在的轉(zhuǎn)碼速度較慢、瓶頸等問題給用戶帶來較差體驗(yàn);現(xiàn)有的基于Hadoop的并行轉(zhuǎn)碼方法比傳統(tǒng)單機(jī)轉(zhuǎn)碼在轉(zhuǎn)碼速度上有較大提升,但其面向批處理的特點(diǎn)決定了轉(zhuǎn)碼過程存在較多等待時(shí)間,使得轉(zhuǎn)碼效率提升不夠充分。為此,將Spark Streaming引入到視頻轉(zhuǎn)碼的設(shè)計(jì)之中,提出了一種面向流處理的基于并行計(jì)算的快速視頻轉(zhuǎn)碼方法。實(shí)驗(yàn)表明,所提出的基于Spark Streaming的視頻轉(zhuǎn)碼方法在轉(zhuǎn)碼效率上有顯著提升。本文所提方法也有不足,即當(dāng)任務(wù)量太大時(shí),集群超負(fù)荷工作,也會形成隊(duì)列工作。同時(shí),本文采用Fair調(diào)度算法,沒有針對視頻流的特點(diǎn)進(jìn)行算法上的改進(jìn)。因此在使用分布式流處理技術(shù)進(jìn)行的視頻轉(zhuǎn)碼工作,仍有很大的改進(jìn)空間。

    猜你喜歡
    轉(zhuǎn)碼視頻文件分片
    移動云盤在線轉(zhuǎn)碼功能技術(shù)研究
    流媒體視頻文件相似性識別的方法
    上下分片與詞的時(shí)空佈局
    詞學(xué)(2022年1期)2022-10-27 08:06:12
    隨心定制視頻文件的縮略圖
    視頻轉(zhuǎn)碼技術(shù)在廣播電視中的應(yīng)用研究
    締客世界(2020年1期)2020-12-12 18:18:28
    分片光滑邊值問題的再生核方法
    CDN存量MP4視頻播放優(yōu)化方法
    基于模糊二分查找的幀分片算法設(shè)計(jì)與實(shí)現(xiàn)
    基于IPTV點(diǎn)播業(yè)務(wù)的視頻分段式轉(zhuǎn)碼方案的研究與應(yīng)用
    傳播力研究(2018年7期)2018-05-10 09:42:47
    基于Hadoop 的分布式視頻轉(zhuǎn)碼方案
    俄罗斯特黄特色一大片| 黄色丝袜av网址大全| 日韩 亚洲 欧美在线| 一本久久中文字幕| 日韩欧美免费精品| 亚洲无线在线观看| a级毛片免费高清观看在线播放| 天堂动漫精品| 国产主播在线观看一区二区| 91午夜精品亚洲一区二区三区 | 91av网一区二区| 18禁黄网站禁片免费观看直播| 又粗又爽又猛毛片免费看| 99久久久亚洲精品蜜臀av| 91久久精品电影网| 国产午夜福利久久久久久| 欧美区成人在线视频| 国产熟女欧美一区二区| 麻豆成人av在线观看| 国产老妇女一区| 女同久久另类99精品国产91| 麻豆成人av在线观看| 国产精品98久久久久久宅男小说| 大又大粗又爽又黄少妇毛片口| 日韩强制内射视频| 国产国拍精品亚洲av在线观看| 99在线人妻在线中文字幕| 国产欧美日韩精品亚洲av| 99在线人妻在线中文字幕| 国产精品日韩av在线免费观看| 露出奶头的视频| 一级毛片久久久久久久久女| 欧美一区二区亚洲| 国内毛片毛片毛片毛片毛片| 一级毛片久久久久久久久女| 91在线精品国自产拍蜜月| 夜夜爽天天搞| videossex国产| 亚洲黑人精品在线| 91久久精品国产一区二区成人| 日本a在线网址| 一边摸一边抽搐一进一小说| 色精品久久人妻99蜜桃| 欧美黑人巨大hd| 亚洲五月天丁香| 亚洲五月天丁香| 99riav亚洲国产免费| 美女cb高潮喷水在线观看| 毛片女人毛片| 欧美色视频一区免费| 国产美女午夜福利| 性欧美人与动物交配| 蜜桃亚洲精品一区二区三区| 色视频www国产| 99热这里只有精品一区| 老司机福利观看| 校园春色视频在线观看| 欧美极品一区二区三区四区| 久久草成人影院| 99国产精品一区二区蜜桃av| 露出奶头的视频| 色哟哟·www| АⅤ资源中文在线天堂| 亚洲最大成人av| 国产欧美日韩精品亚洲av| a级毛片免费高清观看在线播放| 亚洲最大成人av| 亚洲七黄色美女视频| 亚洲av熟女| 久久亚洲真实| 亚洲最大成人手机在线| 乱系列少妇在线播放| 51国产日韩欧美| 亚洲一区高清亚洲精品| 如何舔出高潮| 色尼玛亚洲综合影院| 国产 一区 欧美 日韩| 欧美潮喷喷水| 99久久精品一区二区三区| 日韩欧美在线乱码| 国产成人一区二区在线| 欧美不卡视频在线免费观看| 女同久久另类99精品国产91| ponron亚洲| 大型黄色视频在线免费观看| av中文乱码字幕在线| 一级a爱片免费观看的视频| 婷婷六月久久综合丁香| 国产男人的电影天堂91| 国产亚洲91精品色在线| a级毛片a级免费在线| 久久久久久久精品吃奶| av在线蜜桃| 免费在线观看影片大全网站| 亚洲av中文av极速乱 | 午夜福利视频1000在线观看| 毛片女人毛片| 国产成人av教育| 日本三级黄在线观看| 十八禁国产超污无遮挡网站| 成人欧美大片| 韩国av一区二区三区四区| 99久久九九国产精品国产免费| 在线观看免费视频日本深夜| 身体一侧抽搐| 波多野结衣高清无吗| 亚洲成人中文字幕在线播放| 草草在线视频免费看| 久久精品影院6| 一个人免费在线观看电影| 一区二区三区免费毛片| 精品人妻熟女av久视频| 久久草成人影院| 成人美女网站在线观看视频| 亚洲午夜理论影院| 黄色日韩在线| 亚洲精品亚洲一区二区| 一区福利在线观看| 亚洲国产欧美人成| 国产黄色小视频在线观看| 亚洲最大成人手机在线| 欧美丝袜亚洲另类 | 自拍偷自拍亚洲精品老妇| 色综合亚洲欧美另类图片| 久久精品影院6| 美女xxoo啪啪120秒动态图| 啦啦啦韩国在线观看视频| 欧美+亚洲+日韩+国产| 午夜免费成人在线视频| 九九久久精品国产亚洲av麻豆| 亚洲av成人av| 狠狠狠狠99中文字幕| 99在线视频只有这里精品首页| 两人在一起打扑克的视频| 欧美高清性xxxxhd video| 国产精品电影一区二区三区| 少妇高潮的动态图| 欧美+亚洲+日韩+国产| 国产不卡一卡二| 亚洲av美国av| 中文字幕熟女人妻在线| 一边摸一边抽搐一进一小说| xxxwww97欧美| 精品99又大又爽又粗少妇毛片 | 久久99热这里只有精品18| 丰满乱子伦码专区| 欧美在线一区亚洲| 国产真实乱freesex| 中出人妻视频一区二区| 亚洲在线自拍视频| 亚洲,欧美,日韩| 成人av一区二区三区在线看| 男人舔女人下体高潮全视频| АⅤ资源中文在线天堂| 欧美zozozo另类| 日韩 亚洲 欧美在线| 99热这里只有精品一区| 亚洲午夜理论影院| 夜夜看夜夜爽夜夜摸| 婷婷色综合大香蕉| 美女高潮喷水抽搐中文字幕| 啪啪无遮挡十八禁网站| 国产高清有码在线观看视频| 99久久精品国产国产毛片| 麻豆av噜噜一区二区三区| 精品久久久久久久久久免费视频| 看免费成人av毛片| 国产三级中文精品| 免费电影在线观看免费观看| 一夜夜www| 成年人黄色毛片网站| 男人狂女人下面高潮的视频| 可以在线观看毛片的网站| 黄色日韩在线| 日韩欧美一区二区三区在线观看| 在线a可以看的网站| 深夜a级毛片| 琪琪午夜伦伦电影理论片6080| www.www免费av| 欧美丝袜亚洲另类 | 亚洲精品日韩av片在线观看| 免费高清视频大片| 在线免费观看的www视频| 国产精品日韩av在线免费观看| 亚洲av免费高清在线观看| 欧美成人免费av一区二区三区| 久久久久久久久中文| 欧美日韩黄片免| 3wmmmm亚洲av在线观看| 欧美性猛交黑人性爽| 久久亚洲真实| 韩国av在线不卡| 国产精品电影一区二区三区| 欧美最新免费一区二区三区| 亚洲自拍偷在线| 国国产精品蜜臀av免费| 久久九九热精品免费| 九九爱精品视频在线观看| 亚洲性久久影院| 久久精品91蜜桃| 在线观看一区二区三区| 国产精品自产拍在线观看55亚洲| 美女cb高潮喷水在线观看| 日本一本二区三区精品| 搡老妇女老女人老熟妇| 别揉我奶头~嗯~啊~动态视频| 内地一区二区视频在线| 中文字幕av在线有码专区| 国产高清视频在线播放一区| 色综合亚洲欧美另类图片| 超碰av人人做人人爽久久| 久99久视频精品免费| 高清在线国产一区| 一个人看视频在线观看www免费| 久久欧美精品欧美久久欧美| 国产欧美日韩精品亚洲av| 亚洲精华国产精华精| 欧美丝袜亚洲另类 | 午夜a级毛片| 欧美日韩乱码在线| 欧美xxxx性猛交bbbb| 99热精品在线国产| 亚洲成人免费电影在线观看| 久久久久久久久大av| 国产精品久久久久久av不卡| 欧美3d第一页| 国产欧美日韩精品一区二区| 99视频精品全部免费 在线| 欧美日韩精品成人综合77777| 日韩强制内射视频| 欧美激情在线99| 亚洲最大成人手机在线| 51国产日韩欧美| 欧美中文日本在线观看视频| 成人精品一区二区免费| 身体一侧抽搐| 国产精品免费一区二区三区在线| 91在线精品国自产拍蜜月| 婷婷丁香在线五月| 久久久久国产精品人妻aⅴ院| 村上凉子中文字幕在线| 成年女人永久免费观看视频| 成年人黄色毛片网站| 国产综合懂色| 99视频精品全部免费 在线| 一进一出好大好爽视频| 丝袜美腿在线中文| 午夜福利成人在线免费观看| 搞女人的毛片| 人人妻人人澡欧美一区二区| 久久久久久久午夜电影| 国产真实乱freesex| 日韩大尺度精品在线看网址| 精品一区二区三区视频在线观看免费| av国产免费在线观看| 国产精品爽爽va在线观看网站| 国产精品一区www在线观看 | 免费电影在线观看免费观看| 午夜老司机福利剧场| 直男gayav资源| 国产精品1区2区在线观看.| 精品国产三级普通话版| 毛片一级片免费看久久久久 | 简卡轻食公司| 高清在线国产一区| 黄色配什么色好看| 日本五十路高清| 国产精品爽爽va在线观看网站| 一本久久中文字幕| 亚洲图色成人| av视频在线观看入口| 伦精品一区二区三区| 人人妻,人人澡人人爽秒播| 亚洲av日韩精品久久久久久密| 精品人妻熟女av久视频| 99久久精品一区二区三区| 国产午夜福利久久久久久| 亚洲av.av天堂| 免费人成视频x8x8入口观看| 成年女人毛片免费观看观看9| 久久久久久久久久成人| 亚洲乱码一区二区免费版| 十八禁网站免费在线| 毛片女人毛片| 日韩大尺度精品在线看网址| 夜夜看夜夜爽夜夜摸| 亚洲自偷自拍三级| 亚洲国产色片| 免费人成在线观看视频色| 国产午夜福利久久久久久| 变态另类丝袜制服| 在现免费观看毛片| 99热精品在线国产| 99久久久亚洲精品蜜臀av| АⅤ资源中文在线天堂| 最近在线观看免费完整版| 免费在线观看日本一区| 不卡一级毛片| 精品午夜福利在线看| 午夜精品久久久久久毛片777| 成人一区二区视频在线观看| 欧美日本亚洲视频在线播放| 深爱激情五月婷婷| 亚洲精品456在线播放app | 99热网站在线观看| 久久天躁狠狠躁夜夜2o2o| 特大巨黑吊av在线直播| 天天一区二区日本电影三级| 搡女人真爽免费视频火全软件 | 亚洲自偷自拍三级| 别揉我奶头~嗯~啊~动态视频| 成人美女网站在线观看视频| 身体一侧抽搐| 国产黄a三级三级三级人| 欧美xxxx性猛交bbbb| 国产亚洲精品av在线| 精品人妻视频免费看| 中亚洲国语对白在线视频| 久久精品国产亚洲av涩爱 | 看免费成人av毛片| 亚洲国产欧洲综合997久久,| 美女高潮的动态| 国产一级毛片七仙女欲春2| 一级毛片久久久久久久久女| 亚洲不卡免费看| 午夜福利在线在线| 一本久久中文字幕| 欧美+日韩+精品| www.色视频.com| 能在线免费观看的黄片| 亚洲性久久影院| 国产男靠女视频免费网站| 69人妻影院| 天堂影院成人在线观看| 麻豆久久精品国产亚洲av| 欧美性感艳星| 亚洲男人的天堂狠狠| 麻豆成人av在线观看| 免费高清视频大片| 麻豆精品久久久久久蜜桃| 久久久久国产精品人妻aⅴ院| 99久久中文字幕三级久久日本| 久9热在线精品视频| 中文字幕av在线有码专区| 精华霜和精华液先用哪个| 日韩av在线大香蕉| 久久久久久久亚洲中文字幕| 22中文网久久字幕| 91在线精品国自产拍蜜月| 欧美国产日韩亚洲一区| 一级黄色大片毛片| 日韩欧美一区二区三区在线观看| 亚洲va在线va天堂va国产| 亚洲中文日韩欧美视频| 少妇人妻一区二区三区视频| 毛片一级片免费看久久久久 | 国产精品亚洲一级av第二区| 我的女老师完整版在线观看| 人妻少妇偷人精品九色| 国产成人一区二区在线| 成人三级黄色视频| 欧美成人性av电影在线观看| 国产综合懂色| 嫩草影视91久久| 日本a在线网址| 亚洲天堂国产精品一区在线| 精品人妻偷拍中文字幕| 日韩强制内射视频| 尤物成人国产欧美一区二区三区| 不卡一级毛片| 18禁在线播放成人免费| 高清在线国产一区| 亚洲专区中文字幕在线| 欧美激情在线99| 校园春色视频在线观看| 三级国产精品欧美在线观看| 国产一区二区三区在线臀色熟女| 婷婷丁香在线五月| 欧美三级亚洲精品| 国产一区二区激情短视频| 如何舔出高潮| 国产精品久久久久久久电影| a级毛片免费高清观看在线播放| 极品教师在线视频| 全区人妻精品视频| a级毛片免费高清观看在线播放| 别揉我奶头 嗯啊视频| 欧美一区二区精品小视频在线| 天美传媒精品一区二区| 久久久精品大字幕| 此物有八面人人有两片| 国产综合懂色| 免费人成视频x8x8入口观看| 直男gayav资源| 日本成人三级电影网站| 欧美黑人欧美精品刺激| 麻豆成人午夜福利视频| 国产色婷婷99| 国产精品99久久久久久久久| 亚洲性久久影院| 免费人成在线观看视频色| 成人欧美大片| 中国美白少妇内射xxxbb| 韩国av一区二区三区四区| 国产亚洲精品综合一区在线观看| 在线观看av片永久免费下载| 久久精品综合一区二区三区| 校园春色视频在线观看| 久久精品人妻少妇| videossex国产| 亚洲成av人片在线播放无| 丰满的人妻完整版| 亚洲成人久久爱视频| 亚洲av二区三区四区| 日韩强制内射视频| 99久久成人亚洲精品观看| 午夜福利高清视频| 国产精品爽爽va在线观看网站| 久久草成人影院| 1000部很黄的大片| 欧美zozozo另类| 精品国内亚洲2022精品成人| 少妇被粗大猛烈的视频| 精品一区二区三区视频在线| 精品福利观看| 亚洲最大成人av| 国产大屁股一区二区在线视频| 日本五十路高清| 禁无遮挡网站| 国产亚洲精品av在线| 国产精品,欧美在线| 最新在线观看一区二区三区| 欧美区成人在线视频| 欧美一区二区亚洲| 免费观看精品视频网站| 久久久久久九九精品二区国产| 国产人妻一区二区三区在| 国产欧美日韩一区二区精品| 国产精品国产高清国产av| 国产一区二区在线av高清观看| 99热这里只有精品一区| 亚洲成人精品中文字幕电影| 男人和女人高潮做爰伦理| 婷婷精品国产亚洲av| 久久久久久大精品| 中文字幕人妻熟人妻熟丝袜美| 村上凉子中文字幕在线| 久久久色成人| 国内精品一区二区在线观看| 九九热线精品视视频播放| 老师上课跳d突然被开到最大视频| 午夜福利18| 麻豆国产av国片精品| 国产精品一区二区三区四区免费观看 | 一卡2卡三卡四卡精品乱码亚洲| 国产乱人视频| 男人的好看免费观看在线视频| 国产精品人妻久久久久久| 国产三级在线视频| 男人和女人高潮做爰伦理| 国产黄片美女视频| 亚洲狠狠婷婷综合久久图片| 亚洲图色成人| 日韩欧美精品v在线| 真人一进一出gif抽搐免费| 又黄又爽又免费观看的视频| 91久久精品电影网| 久久亚洲真实| 免费看光身美女| 国产亚洲av嫩草精品影院| 又爽又黄a免费视频| 日韩精品青青久久久久久| 亚洲av免费高清在线观看| .国产精品久久| 91在线精品国自产拍蜜月| 波多野结衣巨乳人妻| 亚洲精品色激情综合| 国产久久久一区二区三区| 91av网一区二区| 很黄的视频免费| 免费在线观看影片大全网站| 久久久久国内视频| 国产乱人伦免费视频| 国内毛片毛片毛片毛片毛片| 99久久精品一区二区三区| 美女黄网站色视频| 国产久久久一区二区三区| 99精品在免费线老司机午夜| 久久精品国产亚洲av香蕉五月| 中出人妻视频一区二区| 亚洲真实伦在线观看| 欧美色视频一区免费| 成人特级黄色片久久久久久久| 国模一区二区三区四区视频| 欧美激情国产日韩精品一区| a级毛片免费高清观看在线播放| 精品一区二区三区av网在线观看| 久久这里只有精品中国| 女的被弄到高潮叫床怎么办 | 国产高清有码在线观看视频| 亚洲性久久影院| 国产一区二区亚洲精品在线观看| 亚洲综合色惰| 成人鲁丝片一二三区免费| 国产三级在线视频| 午夜激情福利司机影院| 麻豆久久精品国产亚洲av| 99riav亚洲国产免费| 欧美精品啪啪一区二区三区| 久久人人爽人人爽人人片va| 日本三级黄在线观看| 男人舔女人下体高潮全视频| 亚洲欧美激情综合另类| 人人妻,人人澡人人爽秒播| 欧美xxxx性猛交bbbb| 国产熟女欧美一区二区| 美女cb高潮喷水在线观看| 小说图片视频综合网站| 我的女老师完整版在线观看| 中文字幕人妻熟人妻熟丝袜美| 亚洲综合色惰| 精品久久久久久久久久久久久| 99久久精品热视频| 日韩欧美在线二视频| 婷婷六月久久综合丁香| 内地一区二区视频在线| 3wmmmm亚洲av在线观看| 人妻久久中文字幕网| 成人三级黄色视频| 99热6这里只有精品| 精品人妻1区二区| 亚洲成a人片在线一区二区| 最好的美女福利视频网| 免费在线观看成人毛片| 波多野结衣高清无吗| 亚洲成a人片在线一区二区| av天堂在线播放| 无人区码免费观看不卡| 国产女主播在线喷水免费视频网站 | 亚洲在线观看片| 99久久中文字幕三级久久日本| 日韩欧美国产在线观看| 国产精品一及| 一本精品99久久精品77| 免费不卡的大黄色大毛片视频在线观看 | 18禁黄网站禁片免费观看直播| 中出人妻视频一区二区| 亚洲欧美日韩无卡精品| 中出人妻视频一区二区| 一a级毛片在线观看| 久久精品国产99精品国产亚洲性色| 最好的美女福利视频网| 国产精品久久久久久久久免| 最新中文字幕久久久久| 欧美中文日本在线观看视频| 国产 一区精品| 久久久国产成人精品二区| 波多野结衣高清无吗| 国产亚洲欧美98| 国产乱人视频| 久99久视频精品免费| 97碰自拍视频| 两人在一起打扑克的视频| 国产精品福利在线免费观看| 男人狂女人下面高潮的视频| 亚洲精品一区av在线观看| 久久99热6这里只有精品| 18禁黄网站禁片免费观看直播| 久99久视频精品免费| 欧美+亚洲+日韩+国产| 桃色一区二区三区在线观看| 自拍偷自拍亚洲精品老妇| 久久草成人影院| 亚洲黑人精品在线| 久久精品国产99精品国产亚洲性色| 少妇人妻一区二区三区视频| 欧美日韩亚洲国产一区二区在线观看| 欧美日韩精品成人综合77777| 99热这里只有精品一区| 草草在线视频免费看| av黄色大香蕉| 亚洲18禁久久av| 少妇的逼水好多| 日本免费a在线| 亚洲色图av天堂| 男人的好看免费观看在线视频| 国产高清视频在线播放一区| 精品无人区乱码1区二区| 国产午夜精品久久久久久一区二区三区 | 婷婷精品国产亚洲av在线| 久久久久性生活片| 3wmmmm亚洲av在线观看| 亚洲国产精品久久男人天堂| 丰满人妻一区二区三区视频av| 日韩大尺度精品在线看网址| 国产一区二区激情短视频| 日日摸夜夜添夜夜添av毛片 | 亚洲无线观看免费| 国产黄色小视频在线观看| 欧美最新免费一区二区三区| 亚洲最大成人手机在线| 亚洲精品亚洲一区二区| 久久精品国产99精品国产亚洲性色| 日韩中字成人| 久久久久精品国产欧美久久久| 国产高清视频在线观看网站| 国产激情偷乱视频一区二区| 深爱激情五月婷婷| 成年版毛片免费区| 桃红色精品国产亚洲av| 久久热精品热| 国产v大片淫在线免费观看| www.色视频.com| 成人一区二区视频在线观看| 18禁在线播放成人免费|