亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

前端canvas動(dòng)畫如何轉(zhuǎn)成mp4視頻的方法

2024-08-26 00:21:31
字體:
供稿:網(wǎng)友

用戶通過上傳合適尺寸的圖片,選著渲染動(dòng)畫的效果和音樂,可以預(yù)覽類似幻燈片的效果,最后點(diǎn)擊確認(rèn)生成視頻,可以放到頭條或者抖音播放。

canvas,動(dòng)畫,mp4,視頻

生成視頻可能的方案

純前端的視頻編碼轉(zhuǎn)換(例如WebM Encoder Whammy)

  • 圖片地址只能是相對(duì)地址
  • 音樂不能收錄
  • 生成的視頻需要下載再上傳

將每幀圖片傳給后端實(shí)現(xiàn),由后端調(diào)用FFmpeg進(jìn)行視頻轉(zhuǎn)碼

  • 截圖多的時(shí)候,base64字符串形式的圖片太大,在前端不好傳給后端
  • 在前端截圖還依賴用戶電腦性能;

最后定的方案流程

  • canvas動(dòng)畫和截圖在服務(wù)器端運(yùn)行,后端根據(jù)標(biāo)識(shí)獲取截圖
  • 利用FFmpeg將圖片合并成視頻,并將視頻存儲(chǔ)在server端,并返回相應(yīng)下載url
  • 前端通過請(qǐng)求得到視頻文件

前端canvas如何截圖

每幀圖片生成

圖片生成可以通過canvas原生接口toDataURL實(shí)現(xiàn),最終返回base64形式的圖像數(shù)據(jù)

function generatePng() {    var canvas = document.createElement('canvas');    let icavas = '#canvas' //渲染動(dòng)畫的canvas id    if (wrapWidth == 2) {        icavas = '#verticalCanvas'    }    var canvasNode = document.querySelector(icavas)    canvas.width = canvasNode.width;    canvas.height = canvasNode.height;    var ctx = canvas.getContext('2d');    ctx.drawImage(canvasNode, 0, 0);    var imgData = canvas.toDataURL("image/png");    return imgData;}

canvas動(dòng)畫截圖的方法

用setInterval定時(shí)執(zhí)行圖片生成的方法,當(dāng)然也可以用requestAnimationFrame

setInterval(function() {    imgsTemp.push(generatePng())}, 1000/60)

后端如何獲取每幀圖片

方案一:無頭瀏覽器運(yùn)行前端canvas動(dòng)畫js,然后js截圖

最初設(shè)想:

截圖用console.log打印出來,canvas截圖是base64格式的,一個(gè)15秒的動(dòng)畫,截圖有100多張,直接導(dǎo)致服務(wù)器運(yùn)行崩潰(被否了);

試運(yùn)行方案:

截圖存儲(chǔ)在js變量中,動(dòng)畫播放完成,在頁面中加一個(gè)標(biāo)識(shí),然后后端去取這個(gè)變量,代碼如下:

const pages = {    imageZoomOut: import ('./image_zoom_inout.js'), //縮放    imageArt: import ('./image_art.js'), //擦除    imageGrid: import ('./image_grid.js'), //網(wǎng)格    imageRotate: import ('./image_rotate.js'), //開合    imageFlash: import ('./image_flash.js'), //圖文快閃    imageVerticalArt: import ('./image_vertical_art.js'), //豎版擦除    imageVerticalGrid: import ('./image_vertical_grid.js'), //豎版網(wǎng)格    imageVerticalRotate: import ('./image_vertical_rotate.js'), //豎版開合    imageVerticalFlash: import ('./image_vertical_flash.js'), //豎版圖文快閃    imageVerticalZoomOut: import ('./image_vertical_zoom_inout.js'), //豎版縮放    imageVertical: import ('./image_vertical.js'), //豎版通用};var isShow = falsevar imgsBase64 = []var imgsTemp = []var cutInter = nullvar imgsTimeLong = 0function getQuerys(tag) {    let queryStr = window.location.search.slice(1);    let queryArr = queryStr.split('&');    let query = [];    let spec = {}    for (let i = 0, len = queryArr.length; i < len; i++) {        let queryItem = queryArr[i].split('=');        let qitem = decodeURIComponent(queryItem[1])        if (queryItem[0] == tag) {            query.push(qitem);        } else {            spec[queryItem[0]] = qitem        }    }    return { list: query, spec: spec };}var getQuery = getQuerys('images')var effectTag = getQuery.spec.tidvar wrapWidth = getQuery.spec.templateTypelet num = 0let imgArr = []function creatImg() {    var images = getQuery.list    let newImg = []    let vh = wrapWidth == 1 ? 360 : 640    let vw = wrapWidth == 1 ? 640 : 360    if (effectTag.indexOf('Flash') > -1) {        images.map(function(item, index) {            if (11 === index || 13 === index || 16 === index) {                var temp = new Image(vw, vh)                temp.setAttribute('crossOrigin', 'anonymous');                temp.src = item;                newImg.push(temp)            } else {                newImg.push(item)            }        })        imgArr = newImg        renderAnimate(effectTag)    } else {        images.map(function(item) {            var temp = new Image(vw, vh)            temp.setAttribute('crossOrigin', 'anonymous');            temp.src = item;            temp.onload = function() {                num++                if (num == images.length) {                    renderAnimate(effectTag)                }            }            newImg.push(temp)        })        imgArr = newImg    }}async function renderAnimate(page) {    //await creatImg()    let me = this    const pageA = await pages[page];    let oldDate = new Date().getTime()    let icavas = '#canvas'    if (wrapWidth == 2) {        icavas = '#verticalCanvas'    }    let innerCanvas = document.querySelector(icavas)    isShow = false    pageA[page].render(null, {        canvas: innerCanvas,        images: imgArr    }, function() {        //動(dòng)畫播完        isShow = true;        imgsTemp.push(generatePng())        imgsBase64.push(imgsTemp)        let now = new Date().getTime()        window.imgsTimeLong = now - oldDate        clearInterval(cutInter)        document.getElementById('cutImg').innerHTML = 'done'//頁面標(biāo)識(shí)    })    cutInter = setInterval(function() {        imgsTemp.push(generatePng())        if (imgsTemp.length >= 50) {            imgsBase64.push(imgsTemp)            imgsTemp = []        }    }, 130)}function getImgs() {    return imgsBase64}function generatePng() {    var canvas = document.createElement('canvas');    let icavas = '#canvas'    if (wrapWidth == 2) {        icavas = '#verticalCanvas'    }    var canvasNode = document.querySelector(icavas)    canvas.width = canvasNode.width;    canvas.height = canvasNode.height;    var ctx = canvas.getContext('2d');    ctx.drawImage(canvasNode, 0, 0);    var imgData = canvas.toDataURL("image/png");    return imgData;}window.imgsBase64 = imgsBase64 //截圖存儲(chǔ)變量creatImg()

試運(yùn)行方案的弊端:

  • 截圖間隔130ms截一張圖片,截圖數(shù)量太少,導(dǎo)致生成的動(dòng)畫不流暢;
  • 截圖間隔調(diào)成1秒60幀的話,動(dòng)畫播放緩慢,導(dǎo)致生成視頻時(shí)間變長(zhǎng);(settimeout和setinterval的機(jī)制)
  • 圖片尺寸在640x360或者360x640,生成的動(dòng)畫在手機(jī)端預(yù)覽不清晰;
  • 需求換成圖片尺寸為1280x720或者720x1280之后,原本15秒的動(dòng)畫在服務(wù)器端執(zhí)行變成了70多秒
  • canvas截圖存在跨域問題,可以如下設(shè)置
var temp = new Image(vw, vh)temp.setAttribute('crossOrigin', 'anonymous');

最終方案:在NODE端運(yùn)行動(dòng)畫

用node-canvas,把每幀截圖用 fs.writeFile 寫到指定的文件夾里

const {    createCanvas,    loadImage} = require("canvas");const pages = {    imageZoomOut: require('./image_zoom_inout.js'), //縮放    imageArt: require('./image_art.js'), //擦除    imageGrid: require('./image_grid.js'), //網(wǎng)格    imageRotate: require('./image_rotate.js'), //開合    imageFlash: require('./image_flash.js'), //圖文快閃    imageVerticalArt: require('./image_vertical_art.js'), //豎版擦除    imageVerticalGrid: require('./image_vertical_grid.js'), //豎版網(wǎng)格    imageVerticalRotate: require('./image_vertical_rotate.js'), //豎版開合    imageVerticalFlash: require('./image_vertical_flash.js'), //豎版圖文快閃    imageVerticalZoomOut: require('./image_vertical_zoom_inout.js'), //豎版縮放    imageVertical: require('./image_vertical.js'), //豎版通用};const fs = require("fs");const querystring = require('querystring');let args = process.argv && process.argv[2]let parse = querystring.parse(args)let vh = parse.templateType == 1 ? 720 : 1280 //canvas 高let vw = parse.templateType == 1 ? 1280 : 720 //canvas 寬let imgSrcArray = parse.images //圖片數(shù)組let effectTag = parse.tid //動(dòng)畫效果let saveImgPath = process.argv && process.argv[3]let loadArr = []imgSrcArray.forEach(element => {    if (//.(jpg|jpeg|png|JPG|PNG)$/.test(element)) {        loadArr.push(loadImage(element))    } else {        loadArr.push(element)    }});const canvas = createCanvas(vw, vh);const ctx = canvas.getContext("2d");Promise.all(loadArr)    .then((images) => {        //初始化動(dòng)畫        console.log('開始動(dòng)畫')        let oldDate = new Date().getTime()        pages[effectTag].render(null, {            canvas: canvas,            images: images        }, function() {            clearInterval(interval)            let now = new Date().getTime()            console.log(now - oldDate, '動(dòng)畫結(jié)束')        })        const interval = setInterval(            (function() {                let x = 0;                return () => {                    x += 1;                    ctx.canvas.toDataURL('image/jpeg', function(err, png) {                        if (err) {                            console.log(err);                            return;                        }                        let data = png.replace(/^data:image///w+;base64,/, '');                        let buf = new Buffer(data, 'base64');                        fs.writeFile(`${saveImgPath}${x}.jpg`, buf, {}, (err) => {                            console.log(x, err);                            return;                        });                    });                };            })(),            1000 / 60        );    })    .catch(e => {        console.log(e);    });

在iterm下執(zhí)行下面命令

node testCanvas.js 'tid=imageArt&templateType=1&images=../assets/imgs/8.png&images=../assets/imgs/6.png&images=../assets/imgs/7.png&images=../assets/imgs/6.png&images=../assets/imgs/8.png&images=../assets/imgs/7.png&images=../assets/imgs/4.png&images=../assets/imgs/6.png&images=../assets/imgs/8.png&images=../assets/imgs/7.png' './images/'

參數(shù)說明:
1)tid 是動(dòng)畫名稱
2)templateType是尺寸:"1":1280*720;"2":720*1280
3) images是圖片地址
4)變量'./images/'是截圖保存的地址,

NODE環(huán)境下運(yùn)行的弊端

  • 參數(shù)圖片地址只能是相對(duì)地址
  • 動(dòng)畫過于復(fù)雜時(shí),運(yùn)行時(shí)間長(zhǎng),如下:當(dāng)頁面的圖形數(shù)量達(dá)到一定時(shí),動(dòng)畫每一幀就要大量調(diào)用canvas的API,要進(jìn)行大量的計(jì)算,再加上圖片體積很大,就會(huì)慢

每隔13秒循環(huán)一次下面的畫圖:   

 

   for (var A = 0; 50 > A; A++)        p.beginPath(),        p.globalAlpha = 1 - A / 49,        p.save(),        p.arc(180,320,P + 2 * A, 0, 2 * Math.PI),        p.clip(),        p.drawImage(x[c], 0, 0, y.width, y.height),        p.restore(),        p.closePath();    for (var S = 0; 50 > S; S++)        p.beginPath(),        p.globalAlpha = 1 - S / 49,        p.save(),        p.rect(0, 0, d + P + 2 * S, g + b + 2 * S),        p.clip(),        p.drawImage(x[c], 0, 0, y.width, y.height),        p.restore(),        p.closePath();

因?yàn)镹ode.js 的事件循環(huán)模型,要求 Node.js 的使用必須時(shí)刻保證 Node.js 的循環(huán)能夠運(yùn)轉(zhuǎn),如果出現(xiàn)非常耗時(shí)的函數(shù),那么事件循環(huán)就會(huì)陷入進(jìn)去,無法及時(shí)處理其他的任務(wù),所以導(dǎo)致有些動(dòng)畫還是慢

后期優(yōu)化的可能

嘗試用go語言,來截圖;

重寫canvas動(dòng)畫;

番外

視頻碼率

視頻碼率就是數(shù)據(jù)傳輸時(shí)單位時(shí)間傳送的數(shù)據(jù)位數(shù),一般我們用的單位是kbps即千位每秒。通俗一點(diǎn)的理解就是取樣率,單位時(shí)間內(nèi)取樣率越大,精度就越高,處理出來的文件就越接近原始文件。舉例來看,對(duì)于一個(gè)音頻,其碼率越高,被壓縮的比例越小,音質(zhì)損失越小,與音源的音質(zhì)越接近。

FPS 每秒傳輸幀數(shù)(Frames Per Second))

FPS是圖像領(lǐng)域中的定義,是指畫面每秒傳輸幀數(shù),通俗來講就是指動(dòng)畫或視頻的畫面數(shù)。FPS是測(cè)量用于保存、顯示動(dòng)態(tài)視頻的信息數(shù)量。每秒鐘幀數(shù)愈多,所顯示的動(dòng)作就會(huì)愈流暢。通常,要避免動(dòng)作不流暢的最低是30。例如電影以每秒24張畫面的速度播放,也就是一秒鐘內(nèi)在屏幕上連續(xù)投射出24張靜止畫面。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到HTML教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产成人精品www牛牛影视| 免费性色视频| 一区二区三区视频在线免费观看| 亚洲欧美色图| 午夜国产在线视频| 2020国产精品| 国模无码国产精品视频| 国产99久久精品一区二区 夜夜躁日日躁| 91精品入口| 日韩精品一区二区三区蜜臀| 午夜免费播放观看在线视频| 亚洲精品中文字幕有码专区| 性欧美video视频另类| 国产综合图区| 国产成人久久久精品一区| 亚洲最大成人网站| 精品国产一级| 中国china体内裑精亚洲片| 伊人精品一区二区三区| 免费成年人视频在线观看| 一级网站免费观看| 日韩电影大片中文字幕| 最近免费中文字幕在线第一页| 免费在线不卡av| 99久久精品99国产精品| 窝窝九色成人影院| 国产日本欧美一区| 成人97在线观看视频| 国产视频久久久久久久| 欧美性欧美巨大黑白大战| 亚洲免费高清视频在线| 精品成人久久久| 久久―日本道色综合久久| 成人福利电影精品一区二区在线观看| 国产视色精品亚洲一区二区| 国产一区免费观看| 亚洲精品免费在线视频| 国产精品亚洲一区二区三区在线| 国产成人无码www免费视频播放| 亚洲人av在线| 青青青伊人色综合久久| 久久手机免费视频| 国产精品二区一区二区aⅴ| 欧美在线中文字幕高清的| 欧美美女喷水视频| 99热精品免费| 欧美成人福利| 丝袜a∨在线一区二区三区不卡| 91精品xxx在线观看| аⅴ资源天堂资源库在线| 亚洲精品自拍动漫在线| 波多野结衣在线aⅴ中文字幕不卡| 在线免费av网| 欧美v亚洲v综合ⅴ国产v| 精品亚洲aⅴ无码一区二区三区| 超碰97久久国产精品牛牛| 无码国产精品一区二区色情男同| 国产sm精品调教视频网站| 欧美大片顶级少妇| 精品国精品国产尤物美女| 九九热精品视频在线| 亚洲成人免费电影| 色先锋av资源中文字幕| 黑人与娇小精品av专区| 免费不卡亚洲欧美| 中文字幕欧美日韩一区| 麻豆精品蜜桃一区二区三区| 美女18一级毛片一品久道久久综合| 侵犯稚嫩小箩莉h文系列小说| 一级做a爰片久久毛片| 91精品久久久久久久久久久久| 亚洲免费一在线| 亚洲日本三级| 国产日韩欧美高清免费| 久久aaaa片一区二区| 中文字幕一区二区三区人妻电影| 日韩啪啪电影网| 明星乱亚洲合成图.com| 一二三区视频在线观看| 97超级碰在线看视频免费在线看| 97人妻精品一区二区免费| 小嫩嫩12欧美| 中文字幕一区二区三区5566| 日本女优爱爱视频| yellow网站在线观看| 美女福利视频在线观看| 快射av在线播放一区| 国产一级av毛片| 香蕉免费一区二区三区在线观看| 欧洲伦理片一区 二区 三区| 成人成人成人在线视频| 欧美黄色一级大片| 91高清视频在线| 欧美大片va欧美在线播放| 国产91精品久久久久久久网曝门| 国产超碰91| 精品国产亚洲一区二区三区在线| 2018亚洲男人天堂| 18av.com视频| 欧美深深色噜噜狠狠yyy| 亚洲av无码一区二区三区在线| 日韩精品1区2区| 日韩欧美一级视频| 欧美成人久久电影香蕉| 91麻豆精品国产自产在线| 日本免费高清视频| 欧美尤物巨大精品爽| 中文在线观看av| 国产美女精品久久| 国产精品国产三级国产aⅴ入口| 国产精品伊人| 久久综合成人| 成人黄色免费网址| 亚洲精品免费一区二区三区| 欧美韩国日本在线| 成人黄视频在线观看| 欧美成人精品网站| 欧美激情成人网| 国产最新视频在线观看| 国产亚洲人成a在线v网站| 午夜欧美巨大性欧美巨大| 欧美性xxxxhd| av资源在线看片| 亚洲国产最新| 91成人在线观看喷潮教学| 91亚洲国产成人精品一区二三| 最近2018中文字幕免费在线视频| 久久久资源网| 中文字幕一区二区在线观看视频| 日本不卡一二三区| 亚洲女与黑人做爰| 99久久这里只有精品| 久久99国产精品久久99果冻传媒| 国产激情一区| 国产精品无码永久免费不卡| 亚洲国产免费看| 亚洲精品aaaa精品| 99re6在线视频| 日本另类视频| 日本少妇激三级做爰在线| 国产又大又黄又猛| 欧美三级在线免费观看| 中文字幕日韩一区二区三区| 中文字幕人成人乱码| 日本韩国欧美中文字幕| 欧美激情一级二级| 日韩av在线网页| 免费观看成年在线视频网站| 色女孩综合影院| 1区2区3区在线视频| 亚洲欧美在线人成swag| 蜜桃视频在线免费| 国产chinese男男gaygay网站| 一区二区三区四区av| 91在线九色porny| av中文在线资源库| 国产 欧美 日韩 在线| 亚洲午夜免费福利视频| 日韩精品中文字幕在线一区| 国产激情综合五月久久| 亚洲国产精品中文| 天天操天天干天天舔| 3344国产永久在线观看视频| 亚洲视频精品在线| 成人欧美在线视频| 少妇网站在线观看| 精品国产99国产精品| 国产日产一区二区三区| 日韩av片在线看| 97福利一区二区| 一个色在线视频| 国产女优在线播放| 午夜免费福利视频在线观看| 日韩欧美三级在线观看| 91福利免费| 亚洲第一久久影院| 欧美激情性做爰免费视频| 亚洲男人都懂第一日本| 国产黄色免费网| 亚洲精品成a人| 91影院在线观看| 色综合天天视频在线观看| 精品国产亚洲一区二区三区在线| 色琪琪原网站亚洲香蕉| 狠狠入ady亚洲精品经典电影| 欧美日韩一区二区三区四区五区| 国产精品网站入口| 欧洲美女网站| 午夜影院在线观看国产主播| 久久免费视频6| 国产精品免费一区豆花| 给个网站可以在线观看你懂的| 亚洲免费av网| 欧美午夜精品一区二区三区| 无遮挡爽大片在线观看视频| 欧美成人有码| 欧美一区二区三区啪啪| 色偷偷一区二区三区| 午夜精品蜜臀一区二区三区免费| 亚洲第一搞黄网站| 日本少妇激情视频| 国产精品日韩电影| 成人在线观看一区| 国产中文一区二区三区| 国产精品69久久久久| 中文字幕高清在线播放| 欧美日韩国产成人在线| 亚洲日本欧美在线| 91浏览器在线观看| 你懂得网站在线| 在线成人av网站| av免费在线一区| 日韩免费va| 天天影视涩香欲综合网| 老熟妇高潮一区二区三区| 欧美裸体在线版观看完整版| 97碰碰视频| 久久91超碰青草在哪里看| 国产精品一区二区免费不卡| 久久福利在线| 91精品国产综合久久香蕉922| 日本在线免费观看视频| 亚州精品永久观看视频| 色999日韩自偷自拍美女| 亚洲成a人v欧美综合天堂| 欧美综合在线视频观看| www.一区二区.com| 欧美xxx另类| 日韩欧美在线观看一区二区三区| 欧美精品v国产精品v日韩精品| 国产精品一区二区免费福利视频| 高潮白浆女日韩av免费看| 6080午夜伦理| 国产精品50p| 免费91在线视频| 8×8x拔擦拔擦在线视频网站| 蜜臀一区二区三区精品免费视频| 在线亚洲不卡| 日本一道高清一区二区三区| 91精品国产综合久久精品图片| 亚洲午夜日本在线观看| 亚洲丶国产丶欧美一区二区三区| 成人动漫视频| 国产精品88久久久久久妇女| 精品国产www| 欧美日韩123| 成人福利免费在线观看| 3d动漫一区二区三区| 欧美日韩一区二区三区在线看| 国产精品流白浆在线观看| 狠狠久久婷婷| 亚洲一区第一页| 蜜桃视频网站www| 亚洲av无码一区二区二三区| 中文字幕久久亚洲| 捆绑调教美女网站视频一区| 性无码专区无码| 亚洲国产精品视频在线观看| 日本www视频在线观看| 国产激情在线观看视频| 日本高清视频免费在线观看| 国产天堂视频| 91九色porny在线| 97影院秋霞午夜在线观看| 高清视频在线观看一区| 中文字幕av免费在线观看| 成人av免费电影网站| 中文字幕永久在线| 自拍在线播放| 中文字幕精品一区久久久久| 国产特级淫片高清视频| 国产精品高清乱码在线观看| 中文字幕の友人北条麻妃| 国产精品久久久国产盗摄| 欧美猛男男办公室激情| 超碰在线人人爱| 日韩亚洲第一页| 日本少妇高清视频| 二区在线播放| 精精国产xxxx视频在线播放| 天天射天天爱天天射干| 一本加勒比北条麻妃| 色姑娘综合网| 亚洲精品免费观看| 性感女国产在线| 国产九色视频| 2019国产精品自在线拍国产不卡| 国产欧美日韩一级| 国产一级片免费| 国产 日韩 欧美 在线| 99国产盗摄| 日韩中文字幕视频在线观看| eeuss鲁丝片eeuss影院| 成人精品视频99在线观看免费| 久久黄色小视频| 国产免费不卡视频| 熟妇人妻中文av无码| 日韩三级在线观看视频| av激情亚洲男人天堂| 亚洲综合色一区| 日本视频二区| www.黄色网址.com| 日本久久高清视频| 一区二区三区在线观看免费视频| 久久成人国产精品入口| 91视频 - 88av| 能免费看av的网站| 精品久久久久久久久久| 久久99国产精品久久99大师| 97一区二区国产好的精华液| 亚洲精品高清视频在线观看| 艳妇乳肉亭妇荡乳av| 91麻豆免费看| 先锋资源中文在线| 91精品国产一区二区人妖| 香蕉视频黄色在线观看| 欧美日韩精品综合在线| 欧美视频日韩| 男人天堂网av| 国产免费不卡av| 天天摸天天碰天天添| 久久久精品有限公司| 夜先锋资源站| 中文娱乐网av| 日本高清久久天堂| www.欧美黄色| 天堂网在线免费观看| 国产成一区二区|