精华内容
下载资源
问答
  • 2020-11-01 12:28:13

    python是一种解释性、交互式、面向对象的跨平的语言。近年来,热持续上涨,人才需求量也祝年攀升,备受程序员的追捧。那么python语言的特点有哪些呢?我们下面来说一下。

    Python语言主要有以下9个特点:

    (1)简单易学

    Python是一种代表简单主义思想的语言。阅读一个良好的 Python程序就感觉像是在读英语段落一样,尽管这个英语段落的语法要求非常严格。 Python最大的优点之一是具有伪代码的本质,它使我们在开发 Python程序时,专注的是解决问题,而不是搞明白语言本身。

    20190712164208199.jpg

    (2)面向对象

    Python既支持面向过程编程,也支持面向对象编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他主要的语言如C++和Java相比, Python以一种非常强大又简单的方式实现面向对象编程。

    (3)可移植性

    由于 Python的开源本质,它已经被移植在许多平台上。如果小心地避免使用依赖于系统的特性,那么所有 Python程序无需修改就可以在下述任何平台上运行,这些平台包括Lnux、Windows、 FreeBSD、 Macintosh、 Solaris、OS/2、Amiga、AROS、AS/400、Beos OS/390、Z/OS、 Palm OS、QNX、VMS、 Psion、 Acorn RISC OS、VxWorks、 PlayStation、 Sharp Zaurus、Windows CE,甚至还有 PocketPC、Symbian以及 Google基于Lnux开发的Android平台。

    (4)解释性

    一个用编译性语言如C或C++写的程序可以从源文件(即C或C++语言)转换到一个计算机使用的语言。这个过程通过编译器和不同的标记、选项完成。当运行程序的时候,连接转载器软件把程序从硬盘复制到内存中并且运行。而Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。事实上,由于不再担心如何编译程序,如何确保连接转载正确的库等,这一切使得使用Python变得更加简单。由于只需要把Python程序复制到另外一台计算机上,它就可以工作了,这也使得Python程序更加易于移植。

    (5)开源

    Python是 FLOSS(自由/开放源码软件)之一。简单地说,你可以自由地发布这个软件的拷贝,阅读它的源代码,对它做改动,把它的一部分用于新的自由软件中。 FLOSS是基于一个团体分享知识的概念,这是为什么Python如此优秀的原因之一 ——它是由一群希望看到一个更加优秀的 Python的人创造并经常改进这的。

    (6)高级语言

    Python是高级语言。当使用 Python语言编写程序时,无需再考虑诸如如何管理程序使用的内存一类的底层细节。

    (7)可扩展性

    如果需要一段关键代码运行的更快或者希望某些算法不公开,就可以把部分程序用C或C语言编写,然后在 Python程序中使用它们。

    (8)丰富的库

    Python标准库确实很庞大,它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGl、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GU(图形用户界面)Tk和其他与系统有关的操作。记住,只要安装了 Python,所有这些功能都是可用的,这被称作 Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如 wXPython、 Twisted和Pyon图像库等。

    (9)规范的代码

    Python采用强制缩进的方式使得代码具有极佳的可读性。

    以上我们介绍了,Python语言的特点,希望能解决您有所帮助。如果您对于python还有其他问题,可以点击页面的咨询按钮了解更多。【python视频教程下载】

    推荐了解

    影视制作培训

    软件培训测试

    区块链培训

    更多相关内容
  • Python语言的特点有哪些Python 是目前最...Python 语言主要有以下特点:1) 容易:Python 是一种代表容易主义思想的语言。阅读一个良好的 Python 程序就感觉像是在读英语一样,尽管这个英语的要求非常严格。Python ...

    Python语言的特点有哪些

    Python 是目前最流行的语言之一,从云计算、大数据到人工智能,Python 无处不在,Python 人才需求量也在逐年攀升,Python 为何能发展如此的迅猛,究竟有什么特点呢?

    Python 语言主要有以下特点:

    1) 容易:Python 是一种代表容易主义思想的语言。阅读一个良好的 Python 程序就感觉像是在读英语一样,尽管这个英语的要求非常严格。Python 的这种伪代码本质是其优点之一,使用户能够专注于解决问题而不是去搞明白语言本身。

    2) 易学:Python 有极其容易的语法,非常容易上手。

    3) 免费、开源:Python 是 FLOSS(自由/开源软件)之一。容易来说,用户可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS 是基于一个团体分享知识的概念,这也是为什么 Python 如此优秀的原因之一:它由一群希望看到 Python 更加优秀的人创造,并被他们不断改进。

    4) 高层语言:使用 Python 语言编写程序时,不用考虑如何管理程序使用的内存等底层细节。

    5) 可移植性强:由于它的开源本质,Python 已经被移植在许多平台上。如果 Python 程序没有使用依赖于系统的特性,那么程序不用修改就可以在下述任意平台上面运行。这些平台包括 Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、Pocket PC 和 Symbian。

    6) 解释型语言:编译型语言(如 C 或 C++)源程序从源文件(即 C 或 C++ 语言)转换到二进制代码(即 0 和 1)的过程通过编译器和不同的标记、选项完成,当运行程序的时候,连接器把程序从硬盘复制到内存中并且运行。而 Python 程序不需要编译成二进制代码,直接从源代码运行程序。

    在计算机内部,Python 解释器把源代码转换成字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。因此,用户不再需要操心如何编译程序、如何确保指定了正确的模块或包文件等细节,所有这一切使得使用 Python 更加容易。同时,由于只需要把 Python 程序拷贝到另外一台计算机上即可工作,这也使得 Python 程序更加易于移植。

    7) 面向对象:Python 既支持面向过程的编程也支持面向对象的编程。在面向过程的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在面向对象的语言中,程序是由数据和功能组合而成的对象构建起来的。与其他语言(如 C++ 和 Java)相比,Python 以一种非常强大又容易的方式实现面向对象编程。

    8) 可扩展性强:如果希望把一段关键代码运行得更快或希望某些算法不公开,可以使用 C 或 C++ 语言编写这部分程序,然后在 Python 程序中调用它们。

    9) 可嵌入性强:可以把 Python 嵌入 C/C++ 程序,从而向用户提供脚本功能。

    10) 丰富的扩展库:Python 扩展库很庞大,可以帮助处理包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV 文件、密码系统、GUI(图形用户界面)、Tk 以及其他与系统有关的操作。只要安装了 Python,所有这些功能都是可用的,这被称作 Python 的“功能齐全”理念。除了扩展库以外,还有许多其他高质量的库,如 wxPython、Twisted 和 Python 图像库等。

    编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

    通俗易懂,深入浅出,一篇文章只讲一个知识点。

    文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

    文章不涉及代码,不烧脑细胞,人人都可以学习。

    当你决定关注「编程帮」,你已然超越了90%的程序员!

    erweima_biancheng.gif?v=1.6.43

    微信扫描二维码关注

    展开全文
  • HTML5+CSS3学习总结(完结)

    万次阅读 多人点赞 2020-06-14 21:45:05
    一、HTML5的语义化 二、CSS3动画 三、CSS3阴影 四、CSS3过渡(非常重要) 五、弹性布局 六、栅格布局 七、渐变 八、媒体查询

    前端小白简单总结,参考黑马课程以及其他内容整合,还望各位大佬多多指教~

    一、HTML5

    1)什么是HTML5

    1. HTML5简介

    万维网的核心语言、标准通用标记语言下的一个应用超文本标记语言(HTML)的第五次重大修改,作为HTML语言,具有新的元素、属性和行为。
    在这里插入图片描述

    2. 广义的HTML5
    • 广义的HTML5是HTML5本身 + CSS3 + JavaScript
    • 这个集合有时称为HTML5和朋友,通常缩写为HTML5
    • 虽然HTML5的一些特性仍然不被某些浏览器支持,但是它是一种发展趋势
    • HTML5 MDN介绍:

    2)H5新增语义化标签

    以前布局,我们基本用div来做,div对于搜索引擎来说,是没有语义的
    在这里插入图片描述

    新增语义化标签
    • header — 头部标签
    • nav — 导航标签
    • article — 内容标签
    • section — 块级标签
    • aside — 侧边栏标签
    • footer — 尾部标签
      在这里插入图片描述

    注意

    • 这种语义化标签主要针对搜索引擎
    • 这些新标签在页面中可以使用多次
    • IE9 浏览器中,需要把这些语义化标签都转换为块级元素
    • 语义化标签,在移动端支持比较友好

    3)H5新增多媒体标签

    多媒体标签包含两个:

    • 音频:<audio>
    • 视频:<video>
      使用它们可以很方便的在页面中嵌入音频和视频,而不再去使用落后的flash和其他浏览器插件。
    1. <audio>音频标签

    HTML5在不使用插件的情况下也可以原生的支持音频格式文件的播放,当然支持格式是有限的。

    • 音频格式
      当前, <audio>元素支持三种音频格式:
      在这里插入图片描述
      语法格式:
        <audio src='media/test.mp3 ' controls='controls'></audio>
    

    因为不同浏览器支持不同格式,我们采取的解决方案是我们为这个音频准备多个格式

        <!-- 谷歌浏览器把autoplay属性给我们禁用了 -->
        <audio controls="controls">
        <source src="media/test.mp3" type="audio/mpeg">
        <source src="media/test.mp3" type="audio/ogg">
        </audio>
        您的浏览器不支持audio标签播放音频
    
    2. <video>视频标签

    在这里插入图片描述

    1. 语法格式:
        <video src='media/video.mp4 ' controls='controls'></video>
    
        <!-- 谷歌浏览器把autoplay属性给我们禁用了 有解决方案:给视频添加静音属性-->
        <video muted = "muted" loop = "loop" poster="media/pig.jpg">
        <source src="media/move.ogg" type="video/mpeg"/>
        <source src="media/move.mp4" type="video/ogg"/>
        </video>
        您的浏览器不支持video标签播放视频
    
    1. <video>视频标签常见属性
      在这里插入图片描述
    2. 总结:
    • 音频标签和视频标签使用基本一致
    • 浏览器支持情况不同
    • 谷歌浏览器把音频和视频自动播放禁止了
    • 我们可以给视频标签添加muted属性可以自定义播放视频,音频不可以
    • 视频标签是重点,我们经常设置自动播放,不使用controls控件,循环和设置大小属性

    4)、HTML5新增input表单、表单属性

    在这里插入图片描述

        <ul>
        <li>邮箱:<input type="email" /></li>
        <li>网址:<input type="url" /></li>
        <li>日期:<input type="date" /></li>
        <li>时间:<input type="date" /></li>
        <li>数量:<input type="number" /></li>
        <li>手机号码:<input type="tel" /></li>
        <li>搜索:<input type="search" /></li>
        <li>颜色:<input type="color" /></li>
        <input type="submit" value="提交">
        </ul>
    

    在这里插入图片描述在这里插入图片描述

        <form action="">
            用户名:<input type="text" required="required" placeholder="请输入用户名" autofocus="autofocus" name="username" autocomplete="off" >
            <input type="submit" value="提交">
            上传头像:<input type="file" name="" id="" multiple="multiple">
    

    在这里插入图片描述

    二、CSS3

    在这里插入图片描述

    CSS3现状

    • 在CSS2的基础上新增(扩展)样式
    • 移动端支持优于PC端
    • 不断改进中
    • 应用相对广泛

    1. CSS3属性(结构)选择器

    在这里插入图片描述

    2. CSS3结构伪类选择器

    在这里插入图片描述
    nth-child 详解

    • 注意:本质上就是选中第几个子元素

    • n 可以是数字、关键字、公式

    • n 如果是数字,就是选中第几个

    • 常见的关键字有 even 偶数、odd 奇数

    • 常见的公式如下(如果 n 是公式,则从 0 开始计算)

    • 但是第 0 个元素或者超出了元素的个数会被忽略
      在这里插入图片描述
      nth-childnt-of-type 的区别

    • nth-child 选择父元素里面的第几个子元素,不管是第几个类型

    • nt-of-type 选择指定类型的元素

    3. CSS3伪元素选择器

    在这里插入图片描述
    注意事项:

    • beforeafter 必须有 content 属性
    • before 在内容前面,after 在内容后面
    • beforeafter 创建的是一个元素,但是属于行内元素
    • 创建出来的元素在 Dom 中查找不到,所以称为伪元素
    • 伪元素和标签选择器一样,权重为 1
      典型应用:
      添加字体图标
    p {
       width: 220px;
       height: 22px;
       border: 1px solid lightseagreen;
       margin: 60px;
       position: relative;
    }
    p::after {
      content: '\ea50';
      font-family: 'icomoon';
      position: absolute;
      top: -1px;
      right: 10px;
    }
    

    4. CSS3过渡(非常重要)

    过渡动画:是从一个状态渐渐的过渡到另外一个状态,IE9以下不支持,经常和:hover一起搭配使用
    语法格式:

    transition:要过渡的属性 花费时间 运动曲线 何时开始
    
    属性描述CSS
    transition简写属性,用于在一个属性中设置四个过渡属性。3
    transition-property规定应用过渡的 CSS 属性的名称。属性就是你想要变化的 css 属性, 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡, 写一个all 就可以。3
    transition-duration定义过渡效果花费的时间(必须写单位)。默认是 0。3
    transition-timing-function规定过渡效果的时间曲线。默认是 “ease”。3
    transition-delay规定过渡效果何时开始,可以设置 延迟触发时间。默认是 0,鼠标触发就立即开始。3
    运动曲线示意图:
    在这里插入图片描述
    样例:
    div {
            width: 200px;
            height: 100px;
            background-color: pink;
            /* transition: 要过渡的属性  花费时间  运动曲线  何时开始; */
            /* transtion 过渡的意思  这句话写到div里面而不是 hover里面 
            过渡写到本身上,谁做动画,给谁加*/
            transition: width 0.6s ease 0s, height 0.3s ease-in 1s;
            
      
                
    }
    div:hover {  /* 鼠标经过盒子,我们的宽度变为400 */
    
                width: 600px;
                height: 300px
    }
    
    transition: all 0.6s;  /* 所有属性都变化用all 就可以了  后面俩个属性可以省略 */
    

    常见效果:
    按钮变换底色 图片移动 小米效果 (阴影效果) 传智导航栏效果 等等

    5. CSS3 2D转换

    转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果。
    转换(transform)可以简单理解为变形

    • 移动:translate
    • 旋转:rotate
    • 缩放:scale
    1)二维坐标系

    2D转换是改变标签在二维平面上的位置和形状的一种技术,
    在这里插入图片描述

    2)2D转换之移动translate

    2D移动是2D转换里的一种功能,可以改变元素在页面中的位置,类似定位
    在这里插入图片描述

    1. 语法:
        transform: translate(x, y);
                /* 或者分开写 */
        transform: translateX(x);
        transform: translateY(y);
    
    1. 重点
    • 定义2D转换中的移动,沿着X和Y轴移动元素
    • translate最大的优点:不会影响到其他元素的位置
    • translate中的百分比单位是相对于自身元素的translate:(50%, 50%);
    • 对行内标签没有效果
    3)2D转换之旋转rotate

    2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转。
    在这里插入图片描述

    1. 语法
        transform: rotate(度数);
    
    1. 重点
    • rotate里面跟度数,单位是deg比如rotate(45deg)
    • 角度为正时为顺时针,负时为逆时针
    • 默认旋转的中心点是元素的中心点
    案例:三角形

    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>三角形</title>
        <style>
            div {
                position: relative;
                width: 249px;
                height: 35px;
                border: 1px solid #000;
            }
            
            div::after {
                content: "";
                position: absolute;
                top: 8px;
                right: 15px;
                width: 10px;
                height: 10px;
                border-bottom: 1px solid #000;
                border-right: 1px solid #000;
                transform: rotate(45deg);
                transition: all 0.2s;
            }
            /* 鼠标经过div 里面的三角旋转 */
            div:hover::after {
                transform: rotate(225deg);
            }
        </style>
    </head>
    
    <body>
        <div></div>
    </body>
    
    </html>
    

    结果如图:
    在这里插入图片描述

    4)2D转换中心点transform-origin

    我们可以设置元素转换的中心点

    1. 语法
        transform-origin: x y;
    
    1. 重点
    • 注意后面的参数x和y用空格隔开
    • x y默认的中心点是元素的中心点(50% 50%)
    • 还可以给x y设置像素或者方位名词(top bottom left right center)
    案例:旋转案例
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>旋转案例</title>
        <style>
            div {
                width: 200px;
                height: 200px;
                border: 1px solid pink;
                margin: 100px auto;
                overflow: hidden;
            }
            
            div::before {
                content: "黑马";
                display: block;
                width: 200px;
                height: 200px;
                background-color: lightgreen;
                transform: rotate(180deg);
                transform-origin: left bottom;
                transition: all 0.2s;
            }
            /* 鼠标经过div 里面的before复原 */
            
            div:hover::before {
                transform: rotate(0deg);
            }
        </style>
    </head>
    
    <body>
        <div></div>
    </body>
    
    </html>
    

    结果如图:
    在这里插入图片描述
    在这里插入图片描述

    5)2D转换之缩放scale

    可以放大和缩小,只要给元素添加上了这个属性就能控制它放大还是缩小
    在这里插入图片描述

    1. 语法
        transform: scale(x, y);
    
    1. 注意
    • 注意其中的x和y用逗号分隔,里面的数字不跟单位就是倍数
    • transform: scale(1, 1):宽和高都放大一倍,相当于没有放大
    • transform: scale(2, 2):宽和高都放大了2倍
    • transform: scale(2):只写一个参数,第二个参数则和第一个参数一样
    • transform: scale(0.5, 0.5):缩小
    • scale缩放最大的优势:可以设置转换中心点缩放,默认以中心点缩放的,而且不影响其他盒子
    案例:图片放大
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>图片放大</title>
        <style>
            div {
                overflow: hidden;
                float: left;
                margin: 10px;
            }
            
            div img {
                transition: all .4s;
            }
            
            div img:hover {
                transform: scale(1.1);
            }
        </style>
    </head>
    
    <body>
        <div>
            <a href="#"><img src="media/scale.jpg" alt=""></a>
        </div>
        <div>
            <a href="#"><img src="media/scale.jpg" alt=""></a>
        </div>
        <div>
            <a href="#"><img src="media/scale.jpg" alt=""></a>
        </div>
    </body>
    
    </html>
    

    结果如图:
    在这里插入图片描述

    案例:分页按钮
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>分页按钮案例</title>
        <style>
            li {
                float: left;
                width: 30px;
                height: 30px;
                line-height: 30px;
                text-align: center;
                margin-left: 10px;
                margin-top: 20px;
                border-radius: 50%;
                list-style: none;
                border: 1px solid green;
                cursor: pointer;
                transition: all .4s;
            }
            
            li:hover {
                transform: scale(1.2);
            }
        </style>
    </head>
    
    <body>
        <div>
            <ul>
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
                <li>5</li>
                <li>6</li>
                <li>7</li>
            </ul>
        </div>
    </body>
    
    </html>
    

    结果如图:
    在这里插入图片描述

    6)2D转换综合写法

    注意:

    1. 同时使用多个转换,其格式为:transform: translate() rotate() scale()……等
    2. 其顺序会影响转换的效果(先旋转会改变坐标轴的方向)
    3. 当我们同时有位移和其他属性的时候,记得要将位移放到最前面

    6. CSS3动画

    动画(animation)是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。
    相比较过渡,动画可以实现更多的变化,更多的控制,连续自动播放等效果。

    1)动画的基本使用

    制作动画分为两步:

    1. 先用keyframes定义动画(类似定义类选择器)
      动画序列
    • 0%是动画的开始,100%是动画的完成,这样的规则就是动画序列
    • 在**@keyframes**中规定某项CSS样式,就能创建由当前样式逐渐改为新样式的动画效果
    • 动画是使元素从一种样式逐渐便化为另一种样式的效果,你可以改变任意多的样式任意多的次数
    • 请用百分比来规定变化发生的时间,或用关键词 " form " 和 ‘’ to " ,等同于0%100%
      在这里插入图片描述
        @keyframes 动画名称 {
            0%{
                width: 100px;
            }
            100%{
                width: 200px;
            }   
        }
    
    1. 再使用(调用)动画
      div{
           width: 200px;
           height: 200px;
           background-color: green;
           margin: 100px auto;
           /* 调用动画 */
           animation-name: 动画名称;
           /* 持续时间 */
           animation-duration: 持续时间;
       }
    
    2)动画常用属性

    在这里插入图片描述

    3)动画简写属性

    animation:动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或者结束的状态;
    animation: name duration timing-function delay iteration-count direction fill-mode;

    • 简写属性里面不包含animation-play-state,如需使用,单独写
    • 暂停动画:animation-play-state:puased;经常和鼠标经过等其他配合使用
    • 想要动画走回来,而不是直接就回来:animation-direction: alternate
    • 盒子动画结束后,停在结束位置:animation-fill-mode: forwards
    案例:热点图
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>热点图</title>
        <style>
            body{
                background-color: #333;
            }
            .map{
                position: relative;
                width: 747px;
                height: 616px;
                margin: 0 auto;
                background: url('media/map.png') no-repeat;
            }
            .city{
                position: absolute;
                top: 227px;
                right: 191px;
            }
            .tb{
                top: 499px;
                right: 80px;
            }
            .dotted{
                width: 8px;
                height: 8px;
                border-radius: 50%;
                background-color: #09f;
            }
            div[class^='pulse']{
                position: absolute;
                top: 50%;
                left: 50%;
                width: 10px;
                height: 10px;
                transform: translate(-50%, -50%);
                border-radius: 50%;
                box-shadow: 0 0 12px #009dfd;
                animation: pulse 1.2s linear infinite;
            }
            .city .pulse2{
                animation-delay: 0.4s;
            }
            .city .pulse3{
                animation-delay: 0.8s;
            }
            @keyframes pulse {
                0%{}
                70%{
                    /* 用scale会导致阴影也放大 */
                    /* transform: scale(2); */
                    width: 40px;
                    height: 40px;
                    opacity: 1;
                } 
                100%{
                    width: 70px;
                    height: 70px;
                    opacity: 0;
                }
            }
        </style>
    </head>
    <body>
        <div class="map">
            <div class="city">
                <div class="dotted">
                    <div class="pulse1"></div>
                    <div class="pulse2"></div>
                    <div class="pulse3"></div>
                </div>
            </div>
            <div class="city tb">
                <div class="dotted">
                    <div class="pulse1"></div>
                    <div class="pulse2"></div>
                    <div class="pulse3"></div>
                </div>
            </div>
        </div>
    </body>
    </html>
    

    结果如图:
    在这里插入图片描述

    如果用scale结果如图:
    在这里插入图片描述

    4)速度曲线细节

    animation-timing-function:规定动画的速度曲线,默认是ease
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>速度曲线案例</title>
        <style>
            div{
                width: 0;
                height: 20px;
                background-color: lightgreen;
                font-size: 12px;
                /* 让文字强制一行显示 */
                white-space: nowrap;
                /* steps就是分几步来完成动画 */
                animation: move 5s steps(8) forwards;
                
            }
            @keyframes move {
                0%{
                    width: 0;
                }
                100%{
                    width: 100px;
                }
            }
        </style>
    </head>
    <body>
        <div>
            是日前端欢迎您!
        </div>
    </body>
    </html>
    
    案例:奔跑的熊
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>奔跑的熊</title>
        <style>
            body{
                background: url('media/bg1.png') no-repeat;
                animation: bgback 6s steps(8) infinite;
            }
            div{
                position: absolute;
                width: 200px;
                height: 100px;
                background: url('media/bear.png') no-repeat;
                animation: bear 0.4s steps(8) infinite, move 2s steps(8) forwards; 
            }
            @keyframes bear {
                0%{
                    background-position: 0 0;
                }
                100%{
                    background-position: -1600px 0;
                }
            }
            @keyframes move {
                0%{
                    left: 0;
                    top: 200px;
                }
                100%{
                    left: 50%;
                    top: 200px;
                    transform: translateX(-50%);
                }
            }
            @keyframes bgback {
                0%{
                    background-position: 0 0;
                }
                100%{
                    background-position: -1600px 0;
                }
            }
        </style>
    </head>
    <body>
        <div></div>
    </body>
    </html>
    

    结果如图:
    在这里插入图片描述

    7. 3D转换

    在这里插入图片描述

    特点
    • 近大远小
    • 物体后面遮挡不可见
    1. 三维坐标系

    在这里插入图片描述
    三维坐标系其实就是指立体空间,立体空间是由3个轴共同组成的。

    • x轴:水平向右 注意:x右边是正值
    • y轴:垂直向下 注意:y下面是正值
    • z轴:垂直屏幕 注意:往外面是正值
    2. 3D移动 translate3d

    3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向

    • transform: translateX(100px):仅仅是在X轴上移动
    • transform: translateY(100px):仅仅是在Y轴上移动
    • transform: translateZ(100px):仅仅是在Z轴上移动(注意:translateZ一般用px单位)
    • transform: translate3d(x,y,z):其中x、y、z分别要移动的轴的方向的距离(x、y、z没有不可省略,写0)
    3. 透视perspective(一般给父盒子添加)

    在这里插入图片描述
    在2D平面产生近大远小视觉立体,但是只是效果是二维的

    • 如果想要在网页产生3D效果需要透视(可理解成3D物体投影在2D平面内)
    • 模拟人类的视觉位置,可认为安排一只眼睛去看
    • 透视也称为视距:视距就是人的眼睛到屏幕的距离
    • 距离视觉点越近的在电脑平面成像就越大,越远成像就越小
    • 透视的单位是像素
      透视写在被观察元素的父盒子上面的
      d:就是视距,视距就是一个距离人的眼睛到屏幕的距离
      z:就是z轴,物体距离屏幕的距离,z轴越大(正值)我们看到的物体就越大。
    4. translateZ(一般给里面的盒子添加)

    transform: translateZ(100px):仅仅是在Z轴上移动,有了透视,就能看到translateZ引起的变化了。

    5. 3D旋转rotate3d

    3D旋转指可以让元素在三维平面内沿着x轴,y轴,z轴或者自定义轴进行旋转。
    语法

    • transform: rotateX(45deg):沿着x轴正方向旋转45度
    • transform: rotateY(45deg):沿着y轴正方向旋转45度
    • transform: rorateZ(45deg):沿着z轴正方向旋转45deg
    • transform: rotate3d(x, y, z, deg):沿着自定义轴旋转,deg为角度(了解)
      沿x轴旋转:单杠
      在这里插入图片描述
      对于元素旋转的方向的判断,需要用到左手准则
      左手准则
    • 左手的手拇指指向x轴的正方向
    • 其余手指的弯曲方向就是该元素沿着x轴旋转的方向
      在这里插入图片描述
      沿y轴旋转:钢管舞
      在这里插入图片描述
      对于元素旋转的方向的判断,需要用到左手准则

    左手准则

    • 左手的手拇指指向y轴的正方向
    • 其余手指的弯曲方向就是该元素沿着y轴旋转的方向(正值)
      在这里插入图片描述
      沿z轴旋转:抽奖转盘
      在这里插入图片描述
      transform: rotate3d(x, y, z, deg):沿着自定义轴旋转deg为角度(了解即可)
      xyz是表示旋转轴的矢量,是标识你是否希望沿着该轴旋转,最后一个标示旋转的角度。
    6. 3D呈现transform-style

    在这里插入图片描述

    • 控制子元素是否开启三维立体环境
    • transform-style: flat子元素不开启3d立体空间,默认的
    • transform-style: preserve-3d;子元素开启立体空间
    • 代码写给父级,但是影响的是子盒子
    • 这个属性很重要
    案例:两面翻转的盒子
    实现步骤
    1. 搭建HTML结构
    • box父盒子里面包含两个子盒子
    • box是翻转的盒子,front是前面盒子,back是后面盒子
    1. CSS样式
    • box指定大小,切记要添加3d呈现
    • back盒子要沿着Y轴翻转180度
    • 最后鼠标经过box沿着Y旋转180deg
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>3D导航栏</title>
        <style>
            body {
                perspective: 400px;
            }
            
            .box {
                position: relative;
                width: 300px;
                height: 300px;
                margin: 200px auto;
                transition: all .5s;
                /* 让背面的盒子保留立体空间,给父级添加 */
                transform-style: preserve-3d;
            }
            
            .front,
            .back {
                position: absolute;
                left: 0;
                top: 0;
                width: 100%;
                height: 100%;
                border-radius: 50%;
                font-size: 24px;
                text-align: center;
                line-height: 300px;
            }
            
            .front {
                background-color: lightcoral;
                z-index: 1;
            }
            
            .back {
                background-color: lightgreen;
                /* 像手机一样背靠背旋转 */
                transform: rotateY(180deg);
            }
            
            .box:hover {
                transform: rotateY(180deg);
            }
        </style>
    </head>
    
    <body>
        <div class="box">
            <div class="front">是日前端</div>
            <div class="back">在这里等你</div>
        </div>
    </body>
    
    </html>
    
    案例:3D导航栏
    实现步骤:
    1. 搭建HTML结构
    • li做导航栏
    • .box是翻转的盒子,front是前面的盒子,bottom是底下的盒子
      思路:
      在这里插入图片描述
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>3D导航栏</title>
        <style>
            li {
                list-style: none;
                perspective: 500px;
            }
            
            ul {
                margin: 100px;
            }
            
            ul li {
                float: left;
                width: 100px;
                height: 50px;
                margin-left: 10px;
            }
            
            .box {
                position: relative;
                width: 100%;
                height: 100%;
                transition: all .5s;
                transform-style: preserve-3d;
            }
            
            .front,
            .bottom {
                position: absolute;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                line-height: 50px;
                text-align: center;
            }
            
            .front {
                background-color: lightgreen;
                transform: translateZ(25px);
            }
            
            .bottom {
                background-color: yellowgreen;
                /* 这里的x轴一定是负值 */
                /* 如果有移动或者其他样式,必须先写移动 */
                transform: translateY(25px) rotateX(-90deg);
            }
            
            .box:hover {
                transform: rotateX(90deg);
            }
        </style>
    </head>
    
    <body>
        <ul>
            <li>
                <div class="box">
                    <div class="front">是日前端</div>
                    <div class="bottom">在这里等你</div>
                </div>
            </li>
            <li>
                <div class="box">
                    <div class="front">是日前端</div>
                    <div class="bottom">日拱一卒</div>
                </div>
            </li>
            <li>
                <div class="box">
                    <div class="front">是日前端</div>
                    <div class="bottom">在这里等你</div>
                </div>
            </li>
        </ul>
    </body>
    
    </html>
    

    结果如图:
    在这里插入图片描述

    H5C3综合案例:旋转木马
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>旋转木马</title>
        <style>
            body{
                perspective: 800px;
            }
            section{
                position: relative;
                width: 300px;
                height: 200px;
                margin: 100px auto;
                transform-style: preserve-3d;
                animation: rotate 8s linear infinite;
                background: url(images/pig.jpg) no-repeat;
            }
            section div {
                position: absolute;
                top: 0;
                left: 0;
                width: 100%;
                height: 100%;
                background: url(images/dog.jpg) no-repeat;
            }
            section div:first-child{
                transform: rotateY(0deg) translateZ(300px);
            }
            section div:nth-child(2){
                transform: rotateY(60deg) translateZ(300px);
            }
            section div:nth-child(3){
                transform: rotateY(120deg) translateZ(300px);
            }
            section div:nth-child(4){
                transform: rotateY(180deg) translateZ(300px);
            }
            section div:nth-child(5){
                transform: rotateY(240deg) translateZ(300px);
            }
            section div:last-child{
                transform: rotateY(320deg) translateZ(300px);
            }
            section:hover{
                animation-play-state: paused;
            }
            @keyframes rotate {
                0%{
                    transform: rotateY(0);
                }
                100%{
                    transform: rotateY(360deg);
                }
            }
        </style>
    </head>
    <body>
        <section>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </section>
    </body>
    </html>
    

    结果如图:
    在这里插入图片描述

    练习1

    在这里插入图片描述
    HTML结构:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>01.《阴阳师》二维码</title>
        <link rel="stylesheet" href="css/index.css">
    </head>
    <body>
        <div class="scan">
            <img class="qrcode" src="images/57b280b496dee47507111c56NRN73rVj.png" alt="">
            <img class="line" src="images/line_dd0b705.png" alt="">
        </div>
    </body>
    </html>
    

    CSS样式:

    *{
        margin: 0;
        padding: 0;
    }
    body{
        padding: 50px;
    }
    .scan{
        position: relative;
        /* margin: 50px; */
        width: 145px;
        height: 297px;
        background: url(../images/index_z_71df05e.png) 0 0 no-repeat;
    }
    .qrcode{
        position: absolute;
        display: block;
        left: 19px;
        top: 45px;
        width: 107px;
    }
    .line{
        position: absolute;
        left: 9px;
        top: -3px;
        width: 120px;
        height: 15px;
        -webkit-animation: sao 4s linear infinite;
        -moz-animation: sao 4s linear infinite;
        -ms-animation: sao 4s linear infinite;
        animation: sao 4s linear infinite;
    }
    @keyframes sao{
        0%{
            top: 42px;
        }
        50%{
            top: 145px;
        }
        100%{
            top: 42px;
        }
    }
    

    结果如图:
    在这里插入图片描述

    练习2

    在这里插入图片描述

    7. 浏览器私有前缀

    浏览器私有前缀是为了兼容老版本的写法,比较新版本的浏览器无需添加。

    7.1 私有前缀
    • -moz-:代表firefox浏览器私有属性
    • -ms-:代表ie浏览器私有属性
    • -webkit-:代表safari、chrome私有属性
    • -o-:代表Opera私有属性
    7.2 提倡的写法

    在这里插入图片描述

    配套资料请关注公众号“是日前端”,输入关键词"html5"或者“css3”获取相关资源

    如果大家想一起交流学习,共同进步,欢迎搜索公众号“是日前端”,输入关键词如:前端基础,获取资料,资料刚开始整理,目前还在完善中,点击交流群按钮进交流群,群里仅限技术交流、面试交流等,需要其它相关资料可以群里说,后续交流群人数增多会考虑特色内容,再次感谢大家的支持~

    展开全文
  • HTML5视频直播及H5直播扫盲

    万次阅读 多人点赞 2016-08-15 14:00:22
    分享内容简介: 目前视频直播,尤其是移动端的视频直播已经火到不行了,基本上各大互联网公司都有了自己的直播产品,所以对于直播的一些基本知识和主要...1. 怎样利用 HTML5 来播放直播视频 2. 怎样录制直播视频 3.

    文章来源:http://geek.csdn.net/news/detail/95188

    分享内容简介:
    目前视频直播,尤其是移动端的视频直播已经火到不行了,基本上各大互联网公司都有了自己的直播产品,所以对于直播的一些基本知识和主要技术点也要有所了解,本次分享就向大家介绍一下其中的奥秘。

    内容大体框架:
    1. 怎样利用 HTML5 来播放直播视频
    2. 怎样录制直播视频
    3. 怎样实时上传直播视频
    4. 直播中的用户交互

    分享人介绍:

    吕鸣 目前在腾讯SNG担任手Q的web前端开发工作
    博客:http://www.nihaoshijie.com.cn/


    下面是本期分享内容整理


    Hello, 大家好,我是吕鸣,目前是在腾讯 SNG 的即通应用部负责手Q的兴趣部落 Web 前端开发工作。

    针对目前比较火的视频直播,我做了一些研究和探索,同时我们的项目将会用到直播为此打下技术基础,下面就向大家分享一下直播的整个流程和一些技术点。

    一、移动视频直播发展

    大家首先来看下面这张图:

    可以看到,直播从 PC 到一直发展到移动端,越来越多的直播类 App 上线,同时移动直播进入了前所未有的爆发阶段,但是对于大多数移动直播来说,还是要以 Native 客户端实现为主,但是 HTML5 在移动直播端也承载着不可替代的作用,例如 HTML5 有着传播快,易发布的优势,同时最为关键的时 HTML5 同样可以播放直播视频。

    大家可以看下面这张大概的实现图

    完整的直播可以分为以下几块:

    1. 视频录制端:一般是电脑上的音视频输入设备或者手机端的摄像头或者麦克风,目前以移动端的手机视频为主。
    2. 视频播放端:可以是电脑上的播放器,手机端的 Native 播放器,还有就是 HTML5 的 video 标签等,目前还是已手机端的 Native 播放器为主。
    3. 视频服务器端:一般是一台 nginx 服务器,用来接受视频录制端提供的视频源,同时提供给视频播放端流服务。

    大家可以看下大致的结构图:

    二、HTML5 录制视频:

    对于HTML5视频录制,可以使用强大的 webRTC (Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的技术,缺点是只在 PC 的 Chrome 上支持较好,移动端支持不太理想。

    使用 webRTC 录制视频基本流程是:

    1. 调用 window.navigator.webkitGetUserMedia() 获取用户的PC摄像头视频数据。
    2. 将获取到视频流数据转换成 window.webkitRTCPeerConnection (一种视频流数据格式)。
    3. 利用 webscoket 将视频流数据传输到服务端

    由于许多方法都要加上浏览器前缀,所以很多移动端的浏览器还不支持 webRTC,所以真正的视频录制还是要靠客户端(iOS,Android)来实现,效果会好一些。

    三、HTML5 播放直播视频:

    对于视频播放,可以使用 HLS(HTTP Live Streaming)协议播放直播流,iOS和 Android 都天然支持这种协议,配置简单,直接使用 video 标签即可。

    下面是简单的代码使用 video 播放直播视频:

    1.什么是 HLS 协议:

    简单讲就是把整个流分成一个个小的,基于 HTTP 的文件来下载,每次只下载一些,前面提到了用于 HTML5 播放直播视频时引入的一个 .m3u8 的文件,这个文件就是基于 HLS 协议,存放视频流元数据的文件。

    每一个 .m3u8 文件,分别对应若干个 ts 文件,这些 ts 文件才是真正存放视频的数据,m3u8 文件只是存放了一些 ts 文件的配置信息和相关路径,当视频播放时,.m3u8 是动态改变的,video 标签会解析这个文件,并找到对应的 ts 文件来播放,所以一般为了加快速度,.m3u8 放在 Web 服务器上,ts 文件放在 CDN 上。

    .m3u8 文件,其实就是以 UTF-8 编码的 m3u 文件,这个文件本身不能播放,只是存放了播放信息的文本文件。

    打开之后就是这个样子:

    下面这个是 ts 文件,就是存放视频的文件:

    2.HLS 的请求流程:

    1. HTTP 请求 m3u8 的 url。
    2. 服务端返回一个 m3u8 的播放列表,这个播放列表是实时更新的,一般一次给出5段数据的 url。
    3. 客户端解析 m3u8 的播放列表,再按序请求每一段的 url,获取 ts 数据流。

    大概是这个流程:

    3.HLS 直播延时:

    我们知道 hls 协议是将直播流分成一段一段的小段视频去下载播放的,所以假设列表里面的包含5个 ts 文件,每个 TS 文件包含5秒的视频内容,那么整体的延迟就是25秒。因为当你看到这些视频时,主播已经将视频录制好上传上去了,所以时这样产生的延迟。当然可以缩短列表的长度和单个 ts 文件的大小来降低延迟,极致来说可以缩减列表长度为1,并且 ts 的时长为1s,但是这样会造成请求次数增加,增大服务器压力,当网速慢时回造成更多的缓冲,所以苹果官方推荐的 ts 时长时10s,所以这样就会大改有30s的延迟。所以服务器接收流,转码,保存,切块,再分发给客户端,这里就延时的根本原因。

    更多关于延迟的问题可以参考苹果官方地址:
    https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html

    但是 HTML5 直播视频却有一些不可替代的优势:

    1. 传播性好,利于分享等操作。
    2. 可以动态发布,有利于实时迭代产品需求并迅速上线。
    3. 不用安装 App,直接打开浏览器即可。

    四、iOS 采集(录制)音视频数据OS

    关于音视频采集录制,首先明确下面几个概念:

    • 视频编码:所谓视频编码就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式,我们使用的 iPhone 录制的视频,必须要经过编码,上传,解码,才能真正的在用户端的播放器里播放。
    • 编解码标准:视频流传输中最为重要的编解码标准有国际电联的 H.261、H.263、H.264,其中 HLS 协议支持 H.264 格式的编码。
    • 音频编码:同视频编码类似,将原始的音频流按照一定的标准进行编码,上传,解码,同时在播放器里播放,当然音频也有许多编码标准,例如 PCM 编码,WMA 编码,AAC 编码等等,这里我们 HLS 协议支持的音频编码方式是 AAC 编码。

    利用 iOS 上的摄像头,进行音视频的数据采集,主要分为以下几个步骤:

    1. 音视频的采集,iOS 中,利用 AVCaptureSession 和 AVCaptureDevice 可以采集到原始的音视频数据流。
    2. 对视频进行 H264 编码,对音频进行 AAC 编码,在 iOS 中分别有已经封装好的编码库来实现对音视频的编码。
    3. 对编码后的音、视频数据进行组装封包;
    4. 建立 RTMP 连接并上推到服务端。

    下面是具体的采集音视频数据的流程:

    1.关于 RTMP:

    Real Time Messaging Protocol(简称 RTMP)是 Macromedia 开发的一套视频直播协议,现在属于 Adobe。和 HLS 一样都可以应用于视频直播,区别是 RTMP 基于 flash 无法在 iOS 的浏览器里播放,但是实时性比 HLS 要好。所以一般使用这种协议来上传视频流,也就是视频流推送到服务器。

    下面是 HLS 和 RTMP 的对比:

    2.推流

    所谓推流,就是将我们已经编码好的音视频数据发往视频流服务器中,在 iOS 代码里面一般常用的是使用 RTMP 推流,可以使用第三方库 librtmp-iOS 进行推流,librtmp 封装了一些核心的 API 供使用者调用。例如推流 API 等等,配置服务器地址,即可将转码后的视频流推往服务器。

    那么如何搭建一个推流服务器呢?

    简单的推流服务器搭建,由于我们上传的视频流都是基于 RTMP 协议的,所以服务器也必须要支持 RTMP 才行,大概需要以下几个步骤:

    1. 安装一台 nginx 服务器。
    2. 安装 nginx 的 RTMP 扩展,目前使用比较多的是 https://github.com/arut/nginx-rtmp-module
    3. 配置 nginx 的 conf 文件
    4. 重启 nginx,将 RTMP 的推流地址写为 rtmp://ip:1935/hls/mystream, 其中 hls_path 表示生成的 .m3u8 和 ts 文件所存放的地址,hls_fragment 表示切片时长,mysteam 表示一个实例,即将来要生成的文件名可以先自己随便设置一个。

    更多配置可以参考:https://github.com/arut/nginx-rtmp-module/wiki/

    下面是 nginx 的配置文件

    五、直播中的用户交互:

    对于直播中的用户交互大致可以分为:

    1. 送礼物
    2. 发表评论或者弹幕

    对于送礼物,在 HTML5 端可以利用 DOM 和 CSS3 实现送礼物逻辑和一些特殊的礼物动画,实现技术难点不大。

    对于弹幕来说,要稍微复杂一些,可能需要关注以下几点:

    1. 弹幕实时性,可以利用 webscoket 来实时发送和接收新的弹幕并渲染出来。
    2. 对于不支持 webscoket 的浏览器来说,只能降级为长轮询或者前端定时器发送请求来获取实时弹幕。
    3. 弹幕渲染时的动画和碰撞检测(即弹幕不重叠)等等

    六、总结

    目前较为成熟的直播产品,大致都是以 Server 端和 HTML5 和 Native(android,ios)搭配实现直播:

    基本是下图这个套路:

    所以 HTML5 在整个直播中,还是有着重要的地位的!

    Demo 分享

    最后,根据本次分享的内容,我这边实现了一个 iOS 端录制,推流,NGINX 接收流,同时分发的 HLS 直播流的一整套 Demo,感兴趣的同学可以看下面这个链接:

    https://github.com/lvming6816077/LMVideoTest

    好了,本次分享先到这里了,谢谢大家~

    互动问答环节

    Q1: Demo 包含 iOS 端的 RTMP 播放不?

    答:Demo 里面没有 RTMP 的播放,Demo 主要是提供录制,推流的。

    Q2: 对于 HTML5 HLS 播放 卡顿问题,前端与 server 端,有什么配置上的优化吗?

    答:server 端要做好分片策略,同时要将 ts 文件放在 CDN 上,前端这边可以尽量做到 DNS 缓存等,由于HTML5是使用的 video 标签,所以要修改 video 的播放优化,还是不那么容易。

    Q3: 在手机推流时的码率是根据怎样的策略做选择的?不同机型和网络下如何保持流畅?

    答:可以提供不同的视频码率来供用户选择,例如网速差的可以选择较为低清晰度的码率,网络好的用户可以选择更加清晰的码率,同时做好视频播放端的容错和异常处理等等。

    Q4: RTMP 比起 HTTP 他的优势主要是几种在哪里?

    答:RTMP 是基于 TCP 的保持的是长连接,而 HTTP 是一次性的,每次都要三次握手,所以对于直播来说还是 RTMP 好一些

    Q5: 据我所知 nginx rtmp-module 好像性能不是很高…..为什么会采用这个来作为后端服务?

    答:这里只是 Demo 用了这个 nginx rtmp-module,其实也可已选择 SRS(simple-rtmp-server)都是可以的哈

    Q6: 移动端这边怎么进行编码转码?用 ffmpeg 编译时很麻烦

    答:关于 iOS 这边,其实不用关心转码问题,因为已经有了很多开源的库提供给我们了例如:
    x264 编码:https://github.com/kewlbear/x264-ios
    faac 编码:https://github.com/fflydev/faac-ios-build

    Q7: 您介绍的都是 Native 播放和还有 HTML5 的 video 标签播放, iOS 端有没有考虑过整个用原生的 OC 或者 Swift 实现?

    答:关于播放端,其实真正体验好的还是要用 native 来实现的,而且 native 实现可以用 RTMP 来播放直播,延迟会好很多,HTML5 来播直播主要是考虑到易传播性好。

    Q8: 在用户非常多的情况下,或者网络慢的情况下,有什么策略可以保证质量?

    答:可以提供不同的视频码率来供用户选择,例如网速差的可以选择较为低清晰度的码率,网络好的用户可以选择更加清晰的码率,同时做好视频播放端的容错和异常处理等等。

    Q9: 请问直播这块的测试中关注的几个指标是什么,有什么比较好的测试方法呢?

    答:主要就是:
    1. 首次打开的白屏时间
    2. 直播中的卡顿和缓冲
    3. 直播的延时

    Q10: 您提供的 Demo 为什么不是 HTML5 的呢 iOS 推流和 nginx 服务器都有,能不能提供一个前面第二张叶子美女直播那个页面的 Demo?

    答:这个 Demo 你下载下拉运行的话,根据配置就可直接自己实现一个利用 HTML5 直播的页面,很简单,就像使用 video 标签一样,其他的样式你可以自己定制的。

    Q11: HLS 的延时有没有比较好的方法解决?

    答:HLS 确实是会有延迟,相对比较优的策略是调整好分片策略,在保证性能的情况下,和延迟达到平衡。

    Q12: 如果加入视频电话功能,上面的结构需要作什么改变?视频电话的目的大概是:直播可以选择某一观众或者多个观众视频对话

    答:视频电话,也就是说作为视频录制端的同时也作为视频播放端,所以实现实时电话简单就是:我在直播的同时观看别人的直播视频,别人在直播的同时观看我的直播视频,可以这样理解,上面的结构复制一份对调即可。

    Q13: 如何实现滤镜功能?

    答:一般是在视频录制之后,在转码前给视频数据增加滤镜功能,在 iOS 里可以使用一些滤镜库等等实现滤镜功能

    Q14: 在 App 端如果不利用 HTML5 能实现直播吗?

    答:可以啊,app 有更加丰富的播放接口,和开源播放器可以实现直播的。

    Q15: 既然 HLS 有较高的延迟 为什么苹果推荐的的方式却是 HLS?

    答:并不是说苹果主要推荐使用 HLS,对于 HTML5 来说目前只有这一种比较好的方式来播放直播视频,所以还是很期待苹果能对延迟问题做一些改进的。

    Q16: 同滤镜问题,音频变声是如何实现的?

    答:同样是可以在对音频转码前操作。

    Q17: 如果针对网络较差的观看用户,是需要直播推流到服务器后做多份不同分辨率的拷贝,以适应不同网络的用户观看?如果是这样的话,对延迟会不会影响很大? 毕竟编解码也是需要时间的.

    答:这个其实本身就应该做的,对于网络差的用户,完全可以提供给他们较低码率的直播流来减少卡顿问题,延迟问题的话还是要根据具体使用哪种协议来定。

    Q18: 推流目前大部分都是第三方在做,难度点在哪?然后目前业内比较成熟的主要哪些?

    答:难点主要是服务器端的性能压力和分发直播流的效率,业界都已经有了较成熟的方案,例如腾讯云的直播。

    点此查看 Dev Club 往期分享汇总


    腾讯 Bugly是一款专为移动开发者打造的质量监控工具,帮助开发者快速,便捷的定位线上应用崩溃的情况以及解决方案。智能合并功能帮助开发同学把每天上报的数千条Crash 根据根因合并分类,每日日报会列出影响用户数最多的崩溃,精准定位功能帮助开发同学定位到出问题的代码行,实时上报可以在发布后快速的了解应用的质量情况,适配最新的 iOS、Android 官方操作系统。


    下面是H5相关扫盲方面的知识:

    文章来源:https://www.nihaoshijie.com.cn/index.php/archives/615

    视频直播这么火,再不学就out了。

    为了紧跟潮流,本文将向大家介绍一下视频直播中的基本流程和主要的技术点,包括但不限于前端技术。

    1 H5到底能不能做视频直播?

    当然可以, H5火了这么久,涵盖了各个方面的技术。

    对于视频录制,可以使用强大的webRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音对话或视频对话的技术,缺点是只在PC的chrome上支持较好,移动端支持不太理想。

    对于视频播放,可以使用HLS(HTTP Live Streaming)协议播放直播流,ios和android都天然支持这种协议,配置简单,直接使用video标签即可。

    webRTC兼容性:

    video标签播放hls协议视频:

    <video controls autoplay>  
        <source src="http://10.66.69.77:8080/hls/mystream.m3u8" type="application/vnd.apple.mpegurl" />  
        <p class="warning">Your browser does not support HTML5 video.</p>  
    </video>

    2 到底什么是HLS协议?

    当简单讲就是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些,前面提到了用于H5播放直播视频时引入的一个.m3u8的文件,这个文件就是基于HLS协议,存放视频流元数据的文件。

    每一个.m3u8文件,分别对应若干个ts文件,这些ts文件才是真正存放视频的数据,m3u8文件只是存放了一些ts文件的配置信息和相关路径,当视频播放时,.m3u8是动态改变的,video标签会解析这个文件,并找到对应的ts文件来播放,所以一般为了加快速度,.m3u8放在web服务器上,ts文件放在cdn上。

    .m3u8文件,其实就是以UTF-8编码的m3u文件,这个文件本身不能播放,只是存放了播放信息的文本文件:

    ​#EXTM3U                     m3u文件头
    #EXT-X-MEDIA-SEQUENCE       第一个TS分片的序列号
    #EXT-X-TARGETDURATION       每个分片TS的最大的时长
    #EXT-X-ALLOW-CACHE          是否允许cache
    #EXT-X-ENDLIST              m3u8文件结束符
    #EXTINF                     指定每个媒体段(ts)的持续时间(秒),仅对其后面的URI有效
    mystream-12.ts

    ts文件:

    HLS的请求流程是:
    1 http请求m3u8的url
    2 服务端返回一个m3u8的播放列表,这个播放列表是实时跟新的,一般一次给出3段数据的url
    3 客户端解析m3u8的播放列表,再按序请求每一段的url,获取ts数据流

    简单流程:

    3 HLS直播延时

    当我们知道hls协议是将直播流分成一段一段的小段视频去下载播放的,所以假设列表里面的包含5个TS文件,每个TS文件包含5秒的视频内容,那么整体的延迟就是25秒。因为当你看到这些视频时,主播已经将视频录制好上传上去了,所以时这样产生的延迟。当然可以缩短列表的长度和单个TS文件的大小来降低延迟,极致来说可以缩减列表长度为1,并且TS的时长为1s,但是这样会造成请求次数增加,增大服务器压力,当网速慢时回造成更多的缓冲,所以苹果官方推荐的ts时长时10s,所以这样就会大改有30s的延迟。参考资料:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html

    4 视频直播的整个流程是什么?

    当视频直播可大致分为:

    1 视频录制端:一般是电脑上的音视频输入设备或者手机端的摄像头或者麦克风,目前已移动端的手机视频为主。

    2 视频播放端:可以是电脑上的播放器,手机端的native播放器,还有就是h5的video标签等,目前还是已手机端的native播放器为主。

    3 视频服务器端:一般是一台nginx服务器,用来接受视频录制端提供的视频源,同时提供给视频播放端流服务。

    简单流程:

     

     

    5 怎样进行音视频采集?

    当首先明确几个概念:

    视频编码:所谓视频编码就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式,我们使用的iphone录制的视频,必须要经过编码,上传,解码,才能真正的在用户端的播放器里播放。

    编解码标准:视频流传输中最为重要的编解码标准有国际电联的H.261、H.263、H.264,其中HLS协议支持H.264格式的编码。
    音频编码:同视频编码类似,将原始的音频流按照一定的标准进行编码,上传,解码,同时在播放器里播放,当然音频也有许多编码标准,例如PCM编码,WMA编码,AAC编码等等,这里我们HLS协议支持的音频编码方式是AAC编码

    下面将利用ios上的摄像头,进行音视频的数据采集,主要分为以下几个步骤:

     

    1 音视频的采集,ios中,利用AVCaptureSessionAVCaptureDevice可以采集到原始的音视频数据流。
    2 对视频进行H264编码,对音频进行AAC编码,在ios中分别有已经封装好的编码库来实现对音视频的编码。
    3 对编码后的音、视频数据进行组装封包;
    4 建立RTMP连接并上推到服务端。

     

    ps:由于编码库大多使用c语言编写,需要自己使用时编译,对于ios,可以使用已经编译好的编码库。

    x264编码:https://github.com/kewlbear/x264-ios

    faac编码:https://github.com/fflydev/faac-ios-build

    ffmpeg编码:https://github.com/kewlbear/FFmpeg-iOS-build-script

    关于如果想给视频增加一些特殊效果,例如增加滤镜等,一般在编码前给使用滤镜库,但是这样也会造成一些耗时,导致上传视频数据有一定延时。

    简单流程:

    6 前面提到的ffmpeg是什么?

    和之前的x264一样,ffmpeg其实也是一套编码库,类似的还有Xvid,Xvid是基于MPEG4协议的编解码器,x264是基于H.264协议的编码器,ffmpeg集合了各种音频,视频编解码协议,通过设置参数可以完成基于MPEG4,H.264等协议的编解码,demo这里使用的是x264编码库。

    7 什么是RTMP?

    Real Time Messaging Protocol(简称 RTMP)是 Macromedia 开发的一套视频直播协议,现在属于 Adobe。和HLS一样都可以应用于视频直播,区别是RTMP基于flash无法在ios的浏览器里播放,但是实时性比HLS要好。所以一般使用这种协议来上传视频流,也就是视频流推送到服务器。

    这里列举一下hls和rtmp对比:

    8 推流

    简所谓推流,就是将我们已经编码好的音视频数据发往视频流服务器中,一般常用的是使用rtmp推流,可以使用第三方库librtmp-iOS进行推流,librtmp封装了一些核心的api供使用者调用,如果觉得麻烦,可以使用现成的ios视频推流sdk,也是基于rtmp的,https://github.com/runner365/LiveVideoCoreSDK

    9 推流服务器搭建

    简简单的推流服务器搭建,由于我们上传的视频流都是基于rtmp协议的,所以服务器也必须要支持rtmp才行,大概需要以下几个步骤:

    1 安装一台nginx服务器。

    2 安装nginx的rtmp扩展,目前使用比较多的是https://github.com/arut/nginx-rtmp-module

    3 配置nginx的conf文件:

    rtmp {  
      
        server {  
      
            listen 1935;  #监听的端口
      
            chunk_size 4000;  
            
             
            application hls {  #rtmp推流请求路径
                live on;  
                hls on;  
                hls_path /usr/local/var/www/hls;  
                hls_fragment 5s;  
            }  
        }  
    }

    4 重启nginx,将rtmp的推流地址写为rtmp://ip:1935/hls/mystream,其中hls_path表示生成的.m3u8和ts文件所存放的地址,hls_fragment表示切片时长,mysteam表示一个实例,即将来要生成的文件名可以先自己随便设置一个。更多配置可以参考:https://github.com/arut/nginx-rtmp-module/wiki/

    根据以上步骤基本上已经实现了一个支持rtmp的视频服务器了。

    10 在html5页面进行播放直播视频?

    简单来说,直接使用video标签即可播放hls协议的直播视频:

    <video autoplay webkit-playsinline>  
        <source src="http://10.66.69.77:8080/hls/mystream.m3u8" type="application/vnd.apple.mpegurl" />  
        <p class="warning">Your browser does not support HTML5 video.</p>  
    </video>

    需要注意的是,给video标签增加webkit-playsinline属性,这个属性是为了让video视频在ios的uiwebview里面可以不全屏播放,默认ios会全屏播放视频,需要给uiwebview设置allowsInlineMediaPlayback=YES。业界比较成熟的videojs,可以根据不同平台选择不同的策略,例如ios使用video标签,pc使用flash等。

    11 坑点总结

    简根据以上步骤,笔者写了一个demo,从实现ios视频录制,采集,上传,nginx服务器下发直播流,h5页面播放直播视频者一整套流程,总结出以下几点比较坑的地方:

    1 在使用AVCaptureSession进行采集视频时,需要实现AVCaptureVideoDataOutputSampleBufferDelegate协议,同时在- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection捕获到视频流,要注意的是didOutputSampleBuffer这个方法不是didDropSampleBuffer方法,后者只会触发一次,当时开始写的是didDropSampleBuffer方法,差了半天才发现方法调用错了。

    2 在使用rtmp推流时,rmtp地址要以rtmp://开头,ip地址要写实际ip地址,不要写成localhost,同时要加上端口号,因为手机端上传时是无法识别localhost的。

    这里后续会补充上一些坑点,有的需要贴代码,这里先列这么多。

    12 业界支持

    目前,腾讯云,百度云,阿里云都已经有了基于视频直播的解决方案,从视频录制到视频播放,推流,都有一系列的sdk可以使用,缺点就是需要收费,如果可以的话,自己实现一套也并不是难事哈。

     

    demo地址:https://github.com/lvming6816077/LMVideoTest/




    更多直播相关知识:http://lib.csdn.net/base/liveplay

    展开全文
  • 请先学习往期内容:HTML 基础【1】 – 入门介绍 / 基本结构 / 块级标签 / 行内标签 作业分析 上一篇《HTML 基础【1】 – 入门介绍 / 基本结构 / 块级标签 / 行内标签》给大家留了一个作业: 实现代码: <!...
  • HTML input控件

    万次阅读 多人点赞 2018-04-12 21:41:48
    因此,要实现这个功能难,只需少量的 Javascript 代码即可。 首先,为文件选择框注册 onchange 事件,并定义一个显示区域: type = "file" onChange = " showFiles ( this . files ) " name = "picture...
  • html5之video标签支持的视频格式

    万次阅读 2019-08-07 09:03:19
    HTML5倍数功能视频播放器(加速2倍,1.5倍播放) HTML5之Video对象属性和方法(html5播放器设计必须研究的) 我的视频应用类原创文章: 微信公众号直播有哪些一样的玩法? 微信视频直播如何做收费直播...
  • HTML5 Plus移动App(5+App)开发入门指南

    万次阅读 2016-06-29 16:40:43
    HTML5 Plus移动App,简称5+App,是一种基于HTML、JS、CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实现与原生App同样强大的功能和性能。 HTML5 Plus规范 通过HTML5开发移动...
  • HTML5新特性浅谈

    万次阅读 多人点赞 2016-10-17 21:25:58
    2014年10月29日,W3C宣布,经过接近8年的艰苦努力,HTML5标准规范终于制定完成。HTML5将会取代1999年制定的HTML 4.01、XHTML 1.0标准,以期能在互联网应用迅速发展的时候,使网络标准达到符合当代的网络需求,为桌面...
  • 把你的前端拿捏得死死的,每天学习得爽爽的,关注这个一样的程序员,如果你所学的东西 处于喜欢 才会有强大的动力支撑。 感谢负每一份热爱前端的程序员,不论前端技能有多奇葩,欢迎关注加我入群vx:xiaoda0423 ...
  • 方法定义时,必须满足方法定义的语法结构 同一个类中,可以存在多个方法名相同的方法 第26题 【单选题】【1.00分】【概念理解】 下面的选项中,哪一项不属于“汽车类”的行为( ) 启动 刹车 减速 速度 第27题 ...
  • 当今信息社会,信息就是金钱,而但凡是信息便必然承载着时效性,过时的信息将具有任何价值。由此可见,信息实时性的重要性。 随着近几年物联网在各行各业的迅猛发展,越来越多的终端设备连入网络,实现远程交互...
  • HTML5常用知识点梳理

    千次阅读 多人点赞 2018-07-31 15:46:57
    HTML5属于上一代HTML的新迭代语言,设计HTML5最主要的目的是为了在移动设备上支持多媒体! 例如: video 标签和 audio 及 canvas 标记 ☞ 新特性: 1. 取消了过时的显示效果标记 &amp;amp;amp;amp;amp;...
  • HTML5+CSS3

    万次阅读 多人点赞 2020-02-09 18:20:26
    HTML 1. 浏览器内核 五大浏览器四大内核 浏览器:IE(edge), 火狐, ...注1: 提到Chrome浏览器,一般人会认为使用的Webkit内核(移动设备多),这种说法完全确。Chrome发布于2008年,使用的渲染内核是Chromium...
  • 什么是H5?有哪些特点?

    万次阅读 2016-10-24 11:33:47
    H5是指第5HTML(超文本标记语言),也指用H5语言制作的一切数字产品。 网上的网页,多数都是由HTML写成的。 “超文本”是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。 而“标记”指的是这些超...
  • 问卷调查Html5开发总结

    万次阅读 2017-08-03 14:44:03
    Html5能够离线操作、能否开发Html5离线网络应用程序】按常理Html5开发出来的是Web网页应用,则需网络连接才能下载并使用,作为Html5对离线应用开发的支持最大的特殊,支持离线需要满足如下条件:离线资源缓存:...
  • 速度挑战 - 2小时完成HTML5拼图小游戏

    万次阅读 多人点赞 2016-08-11 19:32:29
    初学lufylegend.js之日,我用lufylegend.js开发了第一个HTML5小游戏——拼图游戏,还写了篇博文来炫耀一下:HTML5小游戏《智力大拼图》发布,挑战你的思维风暴。不过当时初学游戏开发,经验浅薄,所以没有好好专研...
  • HTML5的特性与优缺点

    千次阅读 2017-09-01 20:47:12
    一:HTML5以下一些优点:01、提高可用性和改进用户的友好体验;02、有几个新标签,有助于开发人员定义重要内容;03、可给站点带来更多多媒体元素(视频和音频);04、可很好的替代FLASH和Silverlight;05、当涉及...
  • 1.以下权重最高的是哪个( ) A 内联样式表 B id选择器 C div{color:red !important;} D class选择器 ... important ,可以更改默认的CSS...2.以下哪个选项不属于web标准( ) A 结构 B 表现 C 内容 D 行为 正...
  • HTML5新增的标签和属性归纳

    万次阅读 多人点赞 2017-01-27 11:21:24
    收集总结的HTML5的新特性,基本除了IE9以下都可以使用。 HTML5语法 大部分延续了html的语法 不同之处:开头的 字符编码变得简洁, 区分大小写, 添加了布尔值,类似checked,selected ...
  • HTML元素方法

    千次阅读 2019-04-27 10:54:28
    首先让我们来讨论一下 HTML 与 DOM 之间的区别。 显然,普通的 <table> 元素就是一段 HTML 代码,它可以应用在任何一个以 .html 为扩展名的文件中。元素自带一系列特性(attribute),以控制它的显示方式与...
  • 【NISP一级】考前必刷九套卷(五)

    千次阅读 2022-03-07 22:39:37
    A.BODY ...请求头只出现在 HTTP 请求中,请求头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息,常用的 HTTP 请求报头包括_________ A.Line B.Cookie C.Accept D.Host ...
  • HTML5+、mui开发移动app

    万次阅读 2016-07-13 17:46:01
    跨平台移动APP开发进阶(二)HTML5+...通过HTML5开发移动App时,会发现HTML5很多能力具备。为弥补HTML5能力的不足,在W3C中国的指导下成立了www.HTML5Plus.org组织,推出HTML5+规范。 HTML5+扩展了JavaScript对象pl...
  • 对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统能正常运行,违反了国家的规定 43、 通信保密阶段所面临的主要安全威胁是搭线窃听和密码分析,其主要保护措施是数据加密。由于当时计算机速度...
  • Tomcat的功能

    千次阅读 2018-10-02 14:54:07
    功能如下: 1、 Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在...
  • HTML5中的新国际化标签及属性

    万次阅读 2017-04-14 17:20:39
    H5问世其实也有很长一段时间了,时至今日,大部分浏览器都号称对其进行了支持,但...闲言少叙,本文就来谈谈HTML5 + CSS3中的新国际化标签及其使用情况,以及可能带来的风险分析吧。 一定会有人惊呼,lang一直都有啊
  • HTML5游戏开发-扫雷及其算法研究

    万次阅读 2015-05-29 22:59:52
    以下是本次开发的游戏截图: 测试地址: http://yuehaowang.github.io/demo/minesweeper/ 算法研究 扫雷虽然属于游戏开发初级学者研究的范畴,但是由于我是那种好高骛远的家伙,所以,虽然接触游戏开发...
  • Html5+Css3实现类似网易云音乐的移动版播放器

    万次阅读 多人点赞 2016-02-21 21:56:57
    网易云音乐的网页版是没有移动页面的,我突发奇想,来做一个玩玩: http://followyourheart.sinaapp.com/Demos/musicPlayer/Index.html 主要用到了Html5的一些Api跟Css3动画,仅供参考。
  • 什么是 HTML5HTML5 是最新的 HTML 标准。HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件。HTML5 拥有新的语义、图形以及多媒体元素。HTML5 提供的新元素和新的 API 简化了 web 应用程序的搭建。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 211,324
精华内容 84,529
关键字:

以下不属于html5功能的是

友情链接: imafe.rar