精华内容
下载资源
问答
  • Java 视频时长计算

    千次阅读 2019-03-13 16:47:40
    计算某个文件夹下面所有wmv视频的总时长: String path = "F:\\BaiduNetdiskDownload\\Python\\尚硅谷Python项目之谷粒教育\\视频"; File file = new File(path); File[] tempList = file.listFiles...

    计算某个文件夹下面所有wmv视频的总时长:

      String path = "F:\\BaiduNetdiskDownload\\Python\\尚硅谷Python项目之谷粒教育\\视频";
            File file = new File(path);
            File[] tempList = file.listFiles();
            if (tempList != null) {
                long ls1 = 0;
                for (int i = 0; i < tempList.length; i++) {
    
    //                if (tempList[i].isDirectory()) {
                        if (tempList[i].getAbsolutePath().endsWith(".wmv")) {
                            Encoder encoder = new Encoder();
                            try {
                                MultimediaInfo m = encoder.getInfo(tempList[i]);
                                long ls = m.getDuration();
                                ls1 += ls;
                            } catch(Exception e) {
                                e.printStackTrace();
                            }
                        }
    //                }
                }
                System.out.println("学习时长:"+(ls1/3600/1000)+"小时");
            }

    其他视频请改 

    if (tempList[i].getAbsolutePath().endsWith(".wmv")) {

    这一句代码的后缀,下载jar包地址http://www.sauronsoftware.it/projects/jave/download.php

    展开全文
  • FFmpeg 3.0 计算视频时长

    千次阅读 2017-02-16 09:11:49
    那么,步骤7验证中计算视频时长可简化为 double totalSeconds = videoStream-> duration * av_q2d(videoStream-> time_base); printf( "totalSeconds = %lf\n" , totalSeconds); 执行结果为totalSeconds =...

    本博客转载于:http://www.jianshu.com/p/66b13b2b2979


    1、问题:AVFormatContextAVStream都有duration: int64_t字段,调用av_dump_format()打印的多媒体文件时长是怎么算出来的呢?

    2、av_dump_format输出示例

      Metadata:
        major_brand     : qt  
        minor_version   : 0
        compatible_brands: qt  
        creation_time   : 2014-01-26 20:14:21
      Duration: 00:00:04.00, start: 0.063733, bitrate: 7987 kb/s

    3、AVStream对于duration的描述如下:

    /**
     * Decoding: duration of the stream, in stream time base.
     * If a source file does not specify a duration, but does specify
     * a bitrate, this value will be estimated from bitrate and file size.
     */
    int64_t duration;

    4、AVFormatContext对于duration的描述如下:

    /**
     * Duration of the stream, in AV_TIME_BASE fractional
     * seconds. Only set this value if you know none of the individual stream
     * durations and also do not set any of them. This is deduced from the
     * AVStream values if not set.
     *
     * Demuxing only, set by libavformat.
     */
    int64_t duration;

    5、int av_read_frame(AVFormatContext *s, AVPacket *pkt);有如下描述:

     * pkt->pts, pkt->dts and pkt->duration are always set to correct
     * values in AVStream.time_base units (and guessed if the format cannot
     * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format
     * has B-frames, so it is better to rely on pkt->dts if you do not
     * decompress the payload.
     *
     * @return 0 if OK, < 0 on error or end of file
     */
    int av_read_frame(AVFormatContext *s, AVPacket *pkt);

    6、avformat.h的描述

     * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be
     * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for
     * pts/dts, 0 for duration) if the stream does not provide them. The timing
     * information will be in AVStream.time_base units, i.e. it has to be
     * multiplied by the timebase to convert them to seconds.

    7、验证

    从前述可知,duration以AV_TIME_BASE分数形式表示。若写入文件时不设置AVFormatContext的duration字段值,则从AVStream对应的字段中推断得出。那么,我理解的计算方式为:

    IF AVFormatContext.duration != AV_NOPTS_VALUE
        time = AVFormatContext.duration * (1.0 * AVStream.num / AVStream.den)
    THEN
        time = AVStream.duration * (1.0 * AVStream.num / AVStream.den)

    time 的组成为123...n,从右往左数三个位为毫秒,剩余值为秒。

    简单设计一段粗暴的验证代码:

    AVStream *videoStream = fmtCtx->streams[videoStreamIndex];
    int den = videoStream->time_base.den;
    int num = videoStream->time_base.num;
    printf("\nfmtContext->duration = %lld, stream->duration = %lld",
           fmtCtx->duration == AV_NOPTS_VALUE ? -1 : fmtCtx->duration ,
           videoStream->duration == AV_NOPTS_VALUE ? -1 : videoStream->duration);
    printf("\nstream->numerator = %d, stream->denominator = %d", num, den);
    if (fmtCtx->duration != AV_NOPTS_VALUE) {
        printf("\nfmtContext->duration = %lf, fmtContext->duration = %d(s)%3d(ms)",
               fmtCtx->duration * (num * 1.0 / den),
               (int)(fmtCtx->duration * (num * 1.0 / den) / 1000),
               ((int)(fmtCtx->duration * (num * 1.0 / den))) % 1000);
    } else {
        printf("\nstream->duration = %lf",
               videoStream->duration * (num * 1.0 / den));
    }

    输入案例:

    • 样本1:
      Duration: 00:00:16.16
      fmtContext->duration = 16160000, stream->duration = -1
      stream->numerator = 1, stream->denominator = 1000
      fmtContext->duration = 16160.000000, fmtContext->duration = 16(s)160(ms)
    • 样本2:
      Duration: 00:03:01.39
      fmtContext->duration = 181389622, stream->duration = 16325066
      stream->numerator = 1, stream->denominator = 90000
      // AVFormatContext的计算结果
      fmtContext->duration = 2015.440244, fmtContext->duration = 2(s)15(ms)
      // AVStream的计算结果
      stream->duration = 181.389622
    • 样本3:
      Duration: 00:00:04.00
      fmtContext->duration = 4004967, stream->duration = 123123
      stream->numerator = 1, stream->denominator = 30000
      // AVFormatContext的计算结果
      fmtContext->duration = 133.498900, fmtContext->duration = 0(s)133(ms)
      // AVStream的计算结果
      stream->duration = 4.104100

    从样本2、3可知,当AVStream.duration有值时,AVStream.duration的计算结果近似FFmpeg的计算结果。

    8、FFmpeg源码

    int hours, mins, secs, us;
    int64_t duration = fmtCtx->duration + (fmtCtx->duration <= INT64_MAX - 5000 ? 5000 : 0);
    secs  = duration / AV_TIME_BASE;
    us    = duration % AV_TIME_BASE;
    mins  = secs / 60;
    secs %= 60;
    hours = mins / 60;
    mins %= 60;
    av_log(NULL, AV_LOG_INFO, "%02d:%02d:%02d.%02d", hours, mins, secs,
           (100 * us) / AV_TIME_BASE);

    源码以AV_TIME_BASE为基准进行处理,定义如下。

    /**
     * Internal time base represented as integer
     */
    #define AV_TIME_BASE            1000000

    那么,AVFormatContext.duration的描述可能是我理解错了。

    9、AV_TIME_BASE、AV_TIME_BASE_Q和pts

    AV_TIME_BASE_Q定义如下:

    /**
     * Internal time base represented as fractional value
     */
    #define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}

    AVRatioal定义如下:

    /**
     * rational number numerator/denominator
     */
    typedef struct AVRational{
        int num; ///< numerator
        int den; ///< denominator
    } AVRational;

    分数表示形式不方便计算,就如我前面写了很多冗余代码一样,FFmpeg提供了一个便捷函数。

    /**
     * Convert rational to double.
     * @param a rational to convert
     * @return (double) a
     */
    static inline double av_q2d(AVRational a){
        return a.num / (double) a.den;
    }

    那么,步骤7验证中计算视频时长可简化为

    double totalSeconds = videoStream->duration * av_q2d(videoStream->time_base);
    printf("totalSeconds = %lf\n", totalSeconds);

    执行结果为totalSeconds = 181.389622。


    展开全文
  • 为啥E进制计算机的效率最高?

    万次阅读 2019-03-11 11:30:04
    只要有人开发有人用, 它一定是有数学理论基础作支撑的, 比如SQL语言就是基于关系代数和集合论, 俄罗斯曾经研究过3进制计算机也是因为数学证明3进制比2进制理论上效率要高, 因为3比2更接近自然常数'e' (2.71828....)...

    任何一套计算机技术, 只要有人开发有人用, 它一定是有数学理论基础作支撑的, 比如SQL语言就是基于关系代数和集合论, 俄罗斯曾经研究过3进制计算机也是因为数学证明3进制比2进制理论上效率要高, 因为3比2更接近自然常数'e' (2.71828....).

    很久以前,我在一本《计算机应用基础》教程上看到类似这样的描述:“理论上e进制是最优的进制,考虑到取整数,三进制是实际可用的最优进制,但是考虑到尽可能简化硬件电子器件的设计与制造,现代电子计算机系统的设计普遍基于二进制”。当时我就很不明白这个“e进制”结论是如何推导出来的?从什么角度出发来看待“最优”?那个时候我才刚刚学会用电脑打字,才刚刚学会浏览网页,无法在中文网页上查到任何答案,英文的网页也看不懂。当时我的兴趣也不在计算机科学上,这个困惑就不了了之了,但是问题始终是记在了心里,没敢忘记。

    今天重新回到了这个问题, 以一个新的观念思考E进制问题, 尽可能的通俗易懂, 然后由于职业病, 本文许多地方将用ecmascript表达式来表示一些无法表示的数学公式~

    什么叫"效率最高"呢? 我认为是利润率最高, 换个形式就是, 得到相同的回报, 成本越低的方案效率越高.

    假设我们有n位比特(不只是2进制), 那么可以建立这样一张表:

     二进制三进制r进制
    产出2**n3**nr**n
    投入2n3nrn

    进制的'表示能力'很好理解, 但如何衡量进制的成本?

    我们认为, 投入的成本就是总共多少位乘每位多少个状态, 也就是总共需要的状态数量, 把它作为成本. 虽然我不知道这样衡量成本是否一定准确, 但是纯数学没有'存储'的概念, 所以这个成本概念仍然是依赖于物理.

    或许把'成本'理解成'存储空间'的相对大小最合适, 注意, 是相对大小而不是绝对大小, 因为一个2进制比特所占据的物理空间未必是4进制比特的一半. 但是数学家不想考虑那么多真实世界的情况, 他们就认为存储3种状态的成本是2种状态的1.5倍, 至于具体情况就甩给物理学家来研究吧, 重点! 这也是日后物理学家选择2进制而非3进制的原因!!

    但是进制的产出或者叫'表示数的能力'很好理解, 就是r^n个数.

     

    如何比较效率?

    当n==1的时候, 我们会发现所有进制的效率都是相等的, 因为成本:回报==1, 但是我们真的能用比率的形式来表示效率吗, 仔细想一下就知道不行, 因为这个比率与n相关, 如果r进制是常量的话, 回报率等于(r**n)/(r*n)也就是r**(n-1)/n这个关于n的函数是递增的, 也就是位数越多, 回报率越大......

    所以人类并不会将全世界的晶体管都拿来做内存以获得无穷无尽的回报, 因为当硬件成本越来越低, '无穷无尽'的回报大都是useless的.

    那么该如何公平的比较不同进制的效率呢????如果按照上面推断, 应该是进制越大效率越高哇, 咋回捏??

    真实情况是, 比特并不需要多大

    和理想状态下不同, 真实情况下, 我们需要多个比特之间顺序排列才能有意义, 哪怕一个一千进制的比特,它同一时间也只能表示1种状态, 即一个对象, 这样的话如果来表示bool类型数据就太浪费了. 同样, 如果用3个比特表示一个数, 数的数量是r**3个, r太大了也没有意义.

    举个最简单的例子, 如果银行肯借给我10亿, 我立马能用它每个月1000万的利息致富, 这种方式比任何亿元以下的投资都划算, 但现实情况就是, 10亿根本得不到.....

    所以我们应该换一种思路来考虑进制的效率, 那就是: 当目标回报一定的时候, 哪种进制的成本最低?

    设目标回报等于m, 即r**n===m, n===log(r,m)     (或者LOGr(m)... 怎么开心怎么写)

    那么成本关于r的表达式即: r*log(r,m), 这个函数其实只要利用换底公式就可以轻松转化成对数函数 , 以便用JavaScript画出来:

    cost = r => C1*r/log(c2,r), 为了比较相对的cost就可以把常数C1去掉, 得到:

    cost_rela = r => r/log(c,r), 于是我分别让c等于e,2和10, 图像都长成类似这样:

    可以看出, 曲线的最小值就在E~2.7处, 所以E进制的成本是最小的. 至于用一个无限不循环的小数作为进制我实在不敢想象,而E最接近的整数就是3了,但是由于种种原因, 因为当前科技水平, 仍然是二进制的物理成本更低, 所以计算机选择了2进制而不是3进制.

    为啥人脑使用10进制而不是3进制呢?

    我再次咒骂自己一遍: 为啥要思考这种无聊的问题????? 既然思考了就简单说一下结论吧: 因为人类不惜牺牲大脑存储空间来换取时间效率, 哪怕平均下来仍然是亏的......最主要的是人脑空间无法自有利用, 所以不用白不用啊, 很合理吧~~~

    当然, 这篇文章仍然没有解释为啥自然常数e这么特殊, 为啥e在自然界处处可见, 这个说来话长了, e的神奇之处恐怕1天也说不完...

     

    最后感谢mommytalk这个B站up主的视频给了我灵感:

    https://www.bilibili.com/video/av27013943

    展开全文
  • 视频码率的计算

    千次阅读 2019-07-29 14:48:38
    原文出处https://juejin.im/post/5d34116ce51d4576bc1a0ebf 一、前言 音视频处理相关,首先需要面临的是音视频多媒体的比特率问题,比特率也是码率,一个音频比特率为 128kb/s,即每秒128k bit,8bit=1Byte,也...

    原文出处https://juejin.im/post/5d34116ce51d4576bc1a0ebf

    一、前言

            音视频处理相关,首先需要面临的是音视频多媒体的比特率问题,比特率也是码率,一个音频比特率为 128kb/s,即每秒128k bit,8bit=1Byte,也就是这个音频每秒钟占用16KB的存储空间,而如果涉及到多声道就应该乘以相应的倍数。

            由于视频由视频图像数据与音频数据组装而成,因此 对于视频来说,就除了音频audio之外,还要加上video的大小。

            上述音频视频的码率都会涉及到编解码压缩比例的问题。

    二、正文

    音频码率相关

            首先是音频码率的计算,一个音频的基本属性假设为: 采样率:44.1KHZ,码率:128kb/s,通道数:双声道。

    1. 采样率——44.1KHZ,每秒钟对音频的采样频次。
    2. 通道数——双声道(立体音)左右耳听到差异的声音,有多少个通道数就有多少个维度的音频数据。
    3. 比特率(码率)——128kb/s,每秒钟占多少kb。
    4. 采样位数  采样样本幅度量化,衡量声音波动变化的一个参数,也可以说是声卡的分辨率。即纵轴刻度的精确度。假设采样位数如下:

            ——1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级;

            ——2 字节(也就是16bit) 可以细到 65536 个数,  CD 标准

            于是先放一张图如下所示,这张图是一个音频的波形图,波形的横轴设为X,纵轴为Y。Y轴的精度就是采样位数,而X轴的精度则代表每秒钟采样频次即采样率,因此一个音频的比特率即单位时间所占空间大小为:比特率=采样率 * 采样位数 * 通道数。

                   

    image

     

     

            而又由于音频格式的不同,所采用的压缩编码方式皆不相同,因此在计算音频对应比特率时,还应乘以压缩的倍率,如0.2等。

            比特率=采样率 * 采样位数 * 通道数 * 压缩比例

    视频码率相关

            由于视频由视频图像及音频声音封装而成,因此视频的码率计算需要分为两部分:视频图像的码率 + 视频中音频的码率。而音频的码率我们已经在上面计算过了,因此接下来要说的是视频图像的码率。                

    image

     

     

            如上图所示,是一段视频,如果要计算一个未经过压缩的视频图像的码率,则需要图像的分辨率(如1080*720)属性,图像位深度(如8或16)以及每秒帧数(如60,90)。即公式如下:

            帧率 * 像素宽 * 像素长 * 位深度 = 视频图像码率。如一个视频属性为:60fps(帧率),480*720p,32位位深,则视频图像码率 = 60 * 480 * 720 * 32。

            整个未压缩的视频码率 = 音频码率 + 视频图像码率;由于当前视频均采用编码压缩,因此还需要乘以倍率,视频码率 = 音频码率* 音频压缩比率 + 视频图像码率* 视频压缩比率。而计算出的视频码率只能大约得估算出真正的视频码率,因为其中还有一些其他的影响参数。

    三、结语

            在写这篇博客的时候,也发现了有个根据视频参数自动计算视频码率的网站,toolstud.io/video/bitra… ,感觉很不错,推荐。

     

    展开全文
  • 计算机专业学习资源合集 | 视频电子书资源

    千次阅读 多人点赞 2019-03-25 12:35:17
    偶然发现的计算机资源的合集,大部分是视频教程,也有电子书等内容。亲测有效。希望对大家有所帮助。 【C/C++】: 1.C语言 徐洪波 // 提取码:ukzc 链接:https://pan.baidu.com/s/1IID-Pzx2bm3vFn5j77mNvA 2....
  • 视频大小与帧的计算

    千次阅读 2018-09-12 20:25:32
    帧数简单地说,帧数就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每...在二进制中,MB也表示到了百万级的数量级,但1MB不正好等于1000000字节,而是1048576字节,即 1MB = 2E+20 Bytes = 1048576Bytes。
  • 请确保你的计算机的声卡和视频卡可以使用,并安装了最新的驱动程序,然后重试 0x8007007e” 已进行360体检,已安装驱动精灵,已确定设备管理器里无禁用设备,也无黄色三角符号警示。 我也是刚刚弄好的,右击开始菜单...
  • 海思Hi3518E MPP学习_02视频输入 1.视频输入介绍2.重要概念3.从官方venc Sample看VI模块 1.视频输入介绍 视频输入(VI模块)可以通过DC(Digital Camera)接口、 MIPI Rx(含 MIPI 接口、 LVDS 接口和 HISPI 接口)等接收...
  • 并行计算:ed2k://|file|%E5%B9%B6%E8%A1%8C%E8%AE%A1%E7%AE%97.rar|412481162|481371E18EFFF991B6D28745FC7F9FCC|h=BFCEVBXCOSGVIM6C7MFHNRVNJUNZ2OAS|/ 计算机网络体系结构:ed2k://|file|%E8%AE%A1%E7%AE%...
  • 计算机本质

    万次阅读 2017-02-16 15:49:56
    ”我的专利不仅仅能实现加法操作,也能实现减法操作,计算具有普遍性,具有划时代的意义,可以把人类从复杂的计算中解救而出来...“ 至此,我们实现了一个简单的计算器实现,不难吧?然而这才只是万里长征的第一...
  • 5 海思Hi3518E视频输入(VI)模块

    千次阅读 2019-03-03 17:12:38
    视频输入(VI)模块实现的功能:通过 ITU-R BT656/601/1120 接口或 Digital Camera接口、 MIPI Rx(含 MIPI 接口、 LVDS 接口和 HISPI 接口)接收视频数据。 当工作在离线模式时,将接收到的数据存入到指定的内存区域...
  • 计算机组成原理核心知识点总结&面试笔试要点

    万次阅读 多人点赞 2019-08-13 14:04:07
    作为一名计算机专业的学生,计算机组成原理、计算机网络、操作系统这三门课程可以说是专业核心基础课,是至...而且很多互联网公司在笔试和面试中都会涉及到这三门课程的知识点,因此我通过视频学习对这三门课程就行...
  • 本课程的教材是著名的《Introduction to algorithms...本课程由两位教授开课,其中一位就是本书的作者,Charles E. Leiserson,通过视频,让我们一起感受master的风采。下载地址:http://cypress.csail.mit.edu/lectix/
  • [并行计算] 1. 并行计算简介

    万次阅读 多人点赞 2017-07-20 15:30:07
    这篇帖子旨在为并行计算这一广泛而宏大的话题提供一个非常快速的概述,作为随后教程的先导。因此,它只涵盖了并行计算的基础知识,实用于刚刚开始熟悉该主题的初学者。
  • 自动驾驶与移动边缘计算

    千次阅读 2019-01-11 00:00:34
    传统网络运营商负责对传输流进行控制(比如转发和包过滤等),但在移动边缘计算中,云服务器也部署在每个基站上。因此,网络运营商也承担了为移动用户提供服务的重要责任。移动边缘计算平台通过为边缘网...
  • 因为一直在看矩阵算法相关的文章,算法的研究陷入了瓶颈,所以想从数据上找找突破口。 欢迎做这个比赛的同学一起交流分享! ... 2019年2月11日:发布测试集,...2019年4月7日:测试集结果提交截止,计算排名 系统环...
  • 计算机视觉入门

    万次阅读 多人点赞 2018-05-18 21:42:00
    计算机视觉的理念其实与很多概念有部分重叠,包括:人工智能、数字图像处理、机器学习、深度学习、模式识别、概率图模型、科学计算以及一系列的数学计算等。 所以在入门CV之前,同学们最好对基础的学术课程都有对应...
  • 计算社会初探

    千次阅读 2016-08-05 12:26:48
    计算社会科学”的学科概念已提出四年多,但国内信息科学界的很多学者认为计算社会科学基本等同于社会计算 ,或者干脆将计算社会科学看作社会计算的一部分,我认为为计算社会科学与社会计算之间确有交叉 ,但两者同时...
  • 边缘计算中的边缘(edge)指的是网络边缘上的计算和存储资源,这里的网络边缘与数据中心相对,无论是从地理距离还是网络距离上来看都更贴近用户。作为一种新的计算范式,边缘计算计算任务部署于接近数据产生源的...
  • js计算出来的文件md5值跟java计算出来的不一致
  • 自然图像抠图/视频抠像技术发展情况梳理 Sason@CSDN 持续更新. 当前更新日期2013.03.05, 添加Fast Mating、Global Matting、视频扣像。 当前更新日期2013.04.23,添加2本Computer Vision书籍中相关章节。 自然...
  • 深度学习AI美颜系列---肤色相似度计算(CIELAB色差计算) 在AI美颜中,经常会用到肤色相似度计算,如何实现这个算法? 步骤如下: 1,人脸皮肤分割; 2,对人脸皮肤分割结果进行LAB颜色空间转换; 3,设立...
  • 计算机的工作原理

    万次阅读 多人点赞 2018-09-13 15:14:58
    第三行:计算并显示(a + b) // 逐行执行:第一行 ---> 第二行 ---> 第三行...... 选择 :如果某个条件满足(比如x)就到第p行;如果不满足(比如x>=y)就到第q行 第一行:a = 1 第二行:b = 用户输入 第三...
  • 异构计算 文章

    千次阅读 2015-06-05 00:03:07
    从桌面到移动:异构计算翻天覆地的技术变革 http://www.csdn.net/article/2014-07-10/2820610-heterogeneous-computing-in-mobile/1
  • 计算机组成原理 — GPU 图形处理器

    万次阅读 多人点赞 2019-08-12 19:32:44
    而 GPU,是一种特殊类型的处理器,具有数百或数千个内核,经过优化,可并行运行大量计算,主要用来处理计算性强而逻辑性不强的计算任务,GPU 中可利用的处理单元可以更多的作为执行单元。因此,相较于 CPU,GPU 在...
  • Android实现视频剪切、视频拼接以及音视频合并

    万次阅读 多人点赞 2017-07-06 18:10:38
    因公司项目有需求,要实现视频剪切,视频拼接以及音视频合并的功能,自己通过在网上查找大量的资料终于把功能实现了,把实现的公共类提取出来,以便以后复习巩固。 使用map4parser作为视频处理包,android studio...
  • 互联网日志的种类、存储和计算

    千次阅读 2013-12-17 20:45:15
    根据我有限的阅历来看,数据最常见的形式就是日志,各种各样的日志。 限于从业经验有限,本文只是简要介绍下日志的种类、存储和计算,仅供参考。
  • 物联网之边缘计算

    千次阅读 2017-09-27 15:29:28
    IT行业分析公司Gartner预计物联网终端的增长速度约为30%,到2020年物联网接入设备的总数将会高达200亿。接入设备的爆发为数据分析和数据处理带来...在边缘计算中,计算能力是分散的,无限接近传感器、设备,设备的数据

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,761
精华内容 45,104
关键字:

e计算视频