精华内容
下载资源
问答
  • 从零开始深度学习(仅视频课)

    千人学习 2019-05-21 17:56:26
    本页面购买不发书!!!仅为视频课购买!!!...下单,方可购买课程+图书。... 本课程由浅入深的讲授人工智能、机器学习、深度学习的原理和实现,尤其会重点介绍搜索引擎和自然语言处理等热门技术,不但会用生动的例子帮助...
  • stm32+4G从零开始连接阿里云IOT

    千人学习 2021-03-06 18:33:46
    本课程着重介绍如何使用stm32+4G通信模组连接阿里云物联网平台,实现数据属性上报以及远程升级功能。在本课程中,大家可以学习到如何使用操作阿里云物联网平台;4G模块和AT指令的编程技巧;以及MQTT协议的内容和源码...
  • 从零开始学习机器学习视频教程

    万人学习 2017-12-04 22:38:30
    人工智能作为现在最为火热的领域,使得机器学习被越来越多的人所了解。机器学习难学,主要的难度在于算法模型多不好理解,各种各样的工具不知道如何使用,实际项目不知道如何开发。本门课程将系统入门机器学习,课程...
  • 从零开始学Spring Boot

    千人学习 2018-02-28 21:25:52
  • Arduino开发从零开始学:学电子的都玩这个

    千次下载 热门讨论 2014-09-29 13:32:52
    第一篇介绍了Arduino的起源、发展和应用,并从安装开发环境(IDE)开始,对Arduino语法和电子基础知识(AVR)有一个初步的学习。第二篇通过使用Arduino制作一些电子玩具进一步讲解Arduino与传感器、电机、网络的相关...
  • 从入门开始学JAVA第二章JAVA语言基础

    万人学习 2017-05-10 16:20:57
    学习JAVA之路的第二章,主要讲解java开发工具eclipse以及Java的一个语言基础以及二进制的一个讲解
  • 本课程是从零学JAVA的第一章,是JAVA的一个入门课程
  • 本课程从零开始系统性的演示了CCNA的实验操作,并且在实验操作的同时讲解CCNA对应的理论知识点,同时又不局限于大纲的要求,有些工作中比较重要的运用,比如三层交换机、HSRP、IPV6、MSTP等,即使超出大纲范围,也...
  • 14天学会安卓开发_(完整版) 从零开始学android开发

    千次下载 热门讨论 2013-07-24 15:09:52
    如何把一本书读薄,是一件值得思考的问题.相信看过那本书的都知道有500页,哪里才是重点...本书针对有JAVA基础的孩纸们,基本JAVA基础都没的,赶紧去找21天学会JAVA回去从头开始学,或者找一本从零开始学android开发看也行.
  • 数组的下标为什么从0开始而不是从1开始

    万次阅读 多人点赞 2020-02-25 18:45:56
    如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度; 如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。 是不是前一种更好计算呢。 再举个例子: 1、数组在内存中申请是,所申请的内存是一段...

    数组是一段连续的空间,要求a[i]就是求它的地址,然后找到它。
    在这里插入图片描述

    如果从0开始,则a[i]的地址= 首地址 + i*每个数据所占的长度;
    如果从1开始,则a[i]的地址= 首地址 + (i-1)*每个数据所占的长度。
    是不是前一种更好计算呢。

    再举个例子:
    1、数组在内存中申请是,所申请的内存是一段连续的内存地址;
    2、例:int[] a=new int[3];申请一段:int 数据类型的数组,a 为变量,数组长度为:[3];
    3、这个数组所申请的内存地址是连续的
    (假设所申请的:第一个内存地址为:1008,第二个为:1009,第三个为:1010);
    但我们只知道:一、变量:a,它只拿到第一个内存地址1008;二、它的数组空间为3个;
    4、a[0]——把a拿到的内存地址:1008 + 0 = 1008 (指向第一个内存地址);
    a[1]——把a拿到的内存地址:1008 + 1 = 1009 (指向第二个内存地址);
    a[2]——把a拿到的内存地址:1008 + 2 = 1010 (指向第三个内存地址);
    所以:数据下标从 [0] 开始的意义也在于此!(当然,这是理解版的)。
    (备注):如果你写a[3],它就报错了,越界错误,因为你只申请了3个内存空间。

    展开全文
  • 从零开始写一个RTSP服务器(一)RTSP协议讲解

    万次阅读 多人点赞 2019-08-09 20:17:55
    从零开始写一个RTSP服务器系列 从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解 从零开始写一个RTSP服务器(二)RTP传输H.264(待写) 从零开始写一个RTSP服务器(三)一个传输H.264的RTSP服务器(待写) 从零开始...

    从零开始写一个RTSP服务器系列

    ★我的开源项目-RtspServer

    从零开始写一个RTSP服务器(一)RTSP协议讲解

    从零开始写一个RTSP服务器(二)RTSP协议的实现

    从零开始写一个RTSP服务器(三)RTP传输H.264

    从零开始写一个RTSP服务器(四)一个传输H.264的RTSP服务器

    从零开始写一个RTSP服务器(五)RTP传输AAC

    从零开始写一个RTSP服务器(六)一个传输AAC的RTSP服务器

    从零开始写一个RTSP服务器(七)多播传输RTP包

    从零开始写一个RTSP服务器(八)一个多播的RTSP服务器

    从零开始写一个RTSP服务器(九)一个RTP OVER RTSP/TCP的RTSP服务器

    从零开始写一个RTSP服务器(一)不一样的RTSP协议讲解

    前言

    • 为什么要写这个系列?

      因为我自己在学习rtsp协议想自己从零写一个rtsp服务器的时候,由于rtsp比较复杂,所以觉得这个过程非常的困难,网上许多相关文章或模棱两可,或是复制粘贴。所以想写这样一个系列,来帮助想要学习rtsp协议或者想要从零写一个rtsp服务器的初学者

    • 本系列的文章特点

      并系列文章实现追求精简,能够让人明白rtsp协议的实现过程,不追求复杂和完美

      如果想要实现一个比较完善的rtsp服务器,可以参考我的开源项目-RtspServer

    言归正传,下面开始本系列的文章

    一、什么是RTSP协议?

    RTSP是一个实时传输流协议,是一个应用层的协议

    通常说的RTSP包括RTSP协议RTP协议RTCP协议

    对于这些协议的作用简单的理解如下

    RTSP协议:负责服务器与客户端之间的请求与响应

    RTP协议:负责传输媒体数据

    RTCP协议:在RTP传输过程中提供传输信息

    rtsp承载与rtp和rtcp之上,rtsp并不会发送媒体数据,而是使用rtp协议传输

    rtp并没有规定发送方式,可以选择udp发送或者tcp发送

    二、RTSP协议详解

    rtsp的交互过程就是客户端请求,服务器响应,下面看一看请求和响应的数据格式

    2.1 RTSP数据格式

    RTSP协议格式与HTTP协议格式类似

    • RTSP客户端的请求格式

      method url vesion\r\n
      CSeq: x\r\n
      xxx\r\n
      ...
      \r\n
      

      method:方法,表明这次请求的方法,rtsp定义了很多方法,稍后介绍

      url:格式一般为rtsp://ip:port/session,ip表主机ip,port表端口好,如果不写那么就是默认端口,rtsp的默认端口为554,session表明请求哪一个会话

      version:表示rtsp的版本,现在为RTSP/1.0

      CSeq:序列号,每个RTSP请求和响应都对应一个序列号,序列号是递增的

    • RTSP服务端的响应格式

      vesion 200 OK\r\n
      CSeq: x\r\n
      xxx\r\n
      ...
      \r\n
      

      version:表示rtsp的版本,现在为RTSP/1.0

      CSeq:序列号,这个必须与对应请求的序列号相同

    2.2 RTSP请求的常用方法

    方法描述
    OPTIONS获取服务端提供的可用方法
    DESCRIBE向服务端获取对应会话的媒体描述信息
    SETUP向服务端发起建立请求,建立连接会话
    PLAY向服务端发起播放请求
    TEARDOWN向服务端发起关闭连接会话请求

    2.3 RTSP交互过程

    有了上述的知识,我们下面来讲解一个RTSP的交互过程

    OPTIONS

    • C–>S

      OPTIONS rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
      CSeq: 2\r\n
      \r\n
      

      客户端向服务器请求可用方法

    • S–>C

      RTSP/1.0 200 OK\r\n
      CSeq: 2\r\n
      Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY\r\n
      \r\n
      

      服务端回复客户端,当前可用方法OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY

    DESCRIBE

    • C–>S

      DESCRIBE rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
      CSeq: 3\r\n
      Accept: application/sdp\r\n
      \r\n
      

      客户端向服务器请求媒体描述文件,格式为sdp

    • S–>C

      RTSP/1.0 200 OK\r\n
      CSeq: 3\r\n
      Content-length: 146\r\n
      Content-type: application/sdp\r\n
      \r\n
      
      v=0\r\n
      o=- 91565340853 1 in IP4 192.168.31.115\r\n
      t=0 0\r\n
      a=contol:*\r\n
      m=video 0 RTP/AVP 96\r\n
      a=rtpmap:96 H264/90000\r\n
      a=framerate:25\r\n
      a=control:track0\r\n
      

      服务器回复了sdp文件,这个文件告诉客户端当前服务器有哪些音视频流,有什么属性,具体稍后再讲解

      这里只需要直到客户端可以根据这些信息得知有哪些音视频流可以发送

    SETUP

    • C–>S

      SETUP rtsp://192.168.31.115:8554/live/track0 RTSP/1.0\r\n
      CSeq: 4\r\n
      Transport: RTP/AVP;unicast;client_port=54492-54493\r\n
      \r\n
      

      客户端发送建立请求,请求建立连接会话,准备接收音视频数据

      解析一下Transport: RTP/AVP;unicast;client_port=54492-54493\r\n

      RTP/AVP:表示RTP通过UDP发送,如果是RTP/AVP/TCP则表示RTP通过TCP发送

      unicast:表示单播,如果是multicast则表示多播

      client_port=54492-54493:由于这里希望采用的是RTP OVER UDP,所以客户端发送了两个用于传输数据的端口,客户端已经将这两个端口绑定到两个udp套接字上,54492表示是RTP端口,54493表示RTCP端口(RTP端口为某个偶数,RTCP端口为RTP端口+1)

    • S–>C

      RTSP/1.0 200 OK\r\n
      CSeq: 4\r\n
      Transport: RTP/AVP;unicast;client_port=54492-54493;server_port=56400-56401\r\n
      Session: 66334873\r\n
      \r\n
      

      服务端接收到请求之后,得知客户端要求采用RTP OVER UDP发送数据,单播客户端用于传输RTP数据的端口为54492,RTCP的端口为54493

      服务器也有两个udp套接字,绑定好两个端口,一个用于传输RTP,一个用于传输RTCP,这里的端口号为56400-56401

      之后客户端会使用54492-54493这两端口和服务器通过udp传输数据,服务器会使用56400-56401这两端口和这个客户端传输数据

    PLAY

    • C–>S

      PLAY rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
      CSeq: 5\r\n
      Session: 66334873\r\n
      Range: npt=0.000-\r\n
      \r\n
      

      客户端请求播放媒体

    • S–>C

      RTSP/1.0 200 OK\r\n
      CSeq: 5\r\n
      Range: npt=0.000-\r\n
      Session: 66334873; timeout=60\r\n
      \r\n
      

      服务器回复之后,会开始使用RTP通过udp向客户端的54492端口发送数据

    TEARDOWN

    • C–>S

      TEARDOWN rtsp://192.168.31.115:8554/live RTSP/1.0\r\n
      CSeq: 6\r\n
      Session: 66334873\r\n
      \r\n
      
    • S–>C

      RTSP/1.0 200 OK\r\n
      CSeq: 6\r\n
      \r\n
      

    2.4 sdp格式

    我们上面避开没有讲sdp文件,这里来好好补一补

    sdp格式由多行的type=value组成

    sdp会话描述由一个会话级描述和多个媒体级描述组成。会话级描述的作用域是整个会话,媒体级描述描述的是一个视频流或者音频流

    会话级描述v=开始到第一个媒体级描述结束

    媒体级描述m=开始到下一个媒体级描述结束

    下面是上面示例的sdp文件,我们就来好好分析一下这个sdp文件

    v=0\r\n
    o=- 91565340853 1 in IP4 192.168.31.115\r\n
    t=0 0\r\n
    a=contol:*\r\n
    m=video 0 RTP/AVP 96\r\n
    a=rtpmap:96 H264/90000\r\n
    a=framerate:25\r\n
    a=control:track0\r\n
    

    这个示例的sdp文件包含一个会话级描述一个媒体级描述,分别如下

    • 会话级描述

      v=0\r\n
      o=- 91565340853 1 IN IP4 192.168.31.115\r\n
      t=0 0\r\n
      a=contol:*\r\n
      

      v=0

      表示sdp的版本
      o=- 91565340853 1 IN IP4 192.168.31.115
      格式为 o=<用户名> <会话id> <会话版本> <网络类型><地址类型> <地址>
      用户名:-
      会话id:91565340853,表示rtsp://192.168.31.115:8554/live请求中的live这个会话
      会话版本:1
      网络类型:IN,表示internet
      地址类型:IP4,表示ipv4
      地址:192.168.31.115,表示服务器的地址

    • 媒体级描述

      m=video 0 RTP/AVP 96\r\n
      a=rtpmap:96 H264/90000\r\n
      a=framerate:25\r\n
      a=control:track0\r\n
      

      m=video 0 RTP/AVP 96\r\n

      格式为 m=<媒体类型> <端口号> <传输协议> <媒体格式 >
      媒体类型:video

      端口号:0,为什么是0?因为上面在SETUP过程会告知端口号,所以这里就不需要了

      传输协议:RTP/AVP,表示RTP OVER UDP,如果是RTP/AVP/TCP,表示RTP OVER TCP

      媒体格式:表示负载类型(payload type),一般使用96表示H.264

      a=rtpmap:96 H264/90000

      格式为a=rtpmap:<媒体格式><编码格式>/<时钟频率>

      a=framerate:25

      表示帧率

      a=control:track0

      表示这路视频流在这个会话中的编号

    三、RTP协议

    3.1 RTP包格式

    rtp包由rtp头部和rtp荷载构成

    • RTP头部

    在这里插入图片描述

    版本号(V):2Bit,用来标志使用RTP版本

    填充位§:1Bit,如果该位置位,则该RTP包的尾部就包含填充的附加字节

    扩展位(X):1Bit,如果该位置位,则该RTP包的固定头部后面就跟着一个扩展头部

    CSRC技术器(CC):4Bit,含有固定头部后面跟着的CSRC的数据

    标记位(M):1Bit,该位的解释由配置文档来承担

    载荷类型(PT):7Bit,标识了RTP载荷的类型

    序列号(SN):16Bit,发送方在每发送完一个RTP包后就将该域的值增加1,可以由该域检测包的丢失及恢复

    ​ 包的序列。序列号的初始值是随机的

    时间戳:32比特,记录了该包中数据的第一个字节的采样时刻

    同步源标识符(SSRC):32比特,同步源就是RTP包源的来源。在同一个RTP会话中不能有两个相同的SSRC值

    贡献源列表(CSRC List):0-15项,每项32比特,这个不常用

    • rtp荷载

      rtp载荷为音频或者视频数据

    3.2 RTP OVER TCP

    RTP默认是采用UDP发送的,格式为RTP头+RTP载荷,如果是使用TCP,那么需要在RTP头之前再加上四个字节

    第一个字节:$,辨识符

    第二个字节:通道,在SETUP的过程中获取

    第三第四个字节: RTP包的大小,最多只能12位,第三个字节保存高4位,第四个字节保存低8位

    四、RTCP

    RTCP用于在RTP传输过程中提供传输信息,可以报道RTP传输情况,还可以用来音视频同步,这里就不详细讲解了

    展开全文
  • python的for循环从某个变量开始

    千次阅读 2021-09-23 18:57:21
    从变量5开始,一直遍历到9,总共5个变量 current = 5 for i in range(current,10): print(i) 在python中是无法给i赋值的,所以只能通过这种方式,控制循环的次数和开始结束位置

    从变量5开始,一直遍历到9,总共5个变量

    current = 5
    for i in range(current,10):
        print(i)

     在python中是无法给i赋值的,所以只能通过这种方式,控制循环的次数和开始结束位置

    展开全文
  • 软件设计师--最早开始时间和最晚开始时间

    万次阅读 多人点赞 2018-04-20 18:03:53
    先求最早开始时间:A是开始节点,所以A的最早开始时间是0,并且最早开始时间等于最晚开始时间。等得到图中红色的部分。 其他节点的最早开始时间为以该节点作为弧头的所有有向弧的值+弧尾的值 的最大值,看例子就...

    题目如图所示,解法如下:

     

    方法:

    先求最早开始时间:A是开始节点,所以A的最早开始时间是0,并且最早开始时间等于最晚开始时间。等得到图中红色的部分。

    其他节点的最早开始时间为以该节点作为弧头的所有有向弧的值+弧尾的值 的最大值,看例子就明白了:

    然后求其B的最早开始时间,由B作为弧头的有向弧只有<A,B>且值为2,A的最早开始时间为0,所以B的最早开始时间为0+2=2,得到绿色的结果。

    求C的最早开始时间,以C为弧头的弧只有<B,C>且值为3,B的最早开始时间为2,所以C的最早开始时间为2+3=5,得到黄色结果。

    同理D、G、E的最早开始时间如图所示。

    求F的最早开始时间:以F为弧头的弧有<E,F> <B,F> <G,F> 所对应的值分别为 13 6 13,取MAX{13,6,13}得F的最早开始时间为13,得到紫色结果.

    后面的都一样...

    然后由于J是结束节点,所以最早开始时间与最晚开始时间一样,得到图中的 这个色结果。

     

    接着求最晚开始时间从后往前推。

    先求I的最晚开始时间。应为以I为弧尾的只有弧<I,J>所以,I的最晚开始时间为J的最晚开始时间减去<I,J>的值 18-2=16

    同理F H的最晚开始时间也可以得到。

    求E的最晚开始时间: 以E为弧尾的弧有 <E,H> <E,F> H的最晚开始时间减去<E,H>的值为12   F的最晚开始时间减去<E,F>的值为13-3=10 ,取MIN{12,10}得到E的最晚开始时间为10

    ....

    后面都一样了....

     

    完成项目的最少时间就是结束节点的最早或最晚开始时间 18

    两条关键路径都画在图中了

    BC在关键路径上,所以一天也不能晚;

    BF可以耽搁的时间为 F的最晚-B的最早-<B,F>的值,也就是 13-4-2=7

     

    口诀:最早开始从前往后用加法看弧头最大,最晚开始从后往前用减法看弧尾最小

     

    展开全文
  • 利用uni-app官网里面picker插件代码,点击开始时间后结束时间要大于选择后的开始时间,点击结束时间后开始时间要小于开始时间。 ... <view class="leave_cont">...开始时间</text> <vie...
  • 从零开始自然语言处理

    千人学习 2019-08-07 14:38:22
    本课程隶属于自然语言处理(NLP)实战系列。自然语言处理(NLP)是数据科学里的一个分支,它的主要覆盖的内容是:以一种智能与高效的方式,对文本数据进行系统化分析、理解与信息提取的过程。通过使用NLP以及它的组件,...
  • 3.开始时间不为空,结束时间为空,则当前时间在开始时间之后,为进行中的数据 4.开始时间不为空,结束时间不为空,则当前时间在开始与结束时间段之内的数据为进行中数据 下面sql则查询的是满足以上四种需求的结果集,达...
  • EasyExcel从指定位置开始读数据

    万次阅读 2020-06-10 17:30:15
    之前小小的接触过easyExcel,代替了传统的poi,上次使用的时候,表头比较传统,也不复杂,但是这次呢表头稍微有点复杂,读取数据要从指定的位置开始,要从指定位置开始读取easyExcel,所以呢在不断的摸索之后,找到了...
  • js 动态校验开始结束时间

    万次阅读 2020-05-23 16:35:35
    很多时候要动态校验开始结束时间,每次都要写一次,太麻烦,以备后面拷贝使用, 代码作用简介: 开始结束时间,联动,开始时间前后移动,对应结束时间相应变化,时间差30天 html: <input type="date" ...
  • Python 用pygame 做一个游戏的开始界面(小白第一篇博客) 主要功能实现 本篇文章主要是实现了一个游戏开始界面的两个功能: 1,将鼠标放到”开始游戏“或”结束游戏“字样是 字样由黑色变为红色 1,可以实现点击...
  • python for循环从第二个元素开始遍历

    万次阅读 2020-01-15 20:08:52
    刚下午大学同学问我怎么做,一时间没想起来。后来他写出来了我问了问。如下图 这就是截取的语法。。。啊。尴尬,字符串、列表都支持截取。...切片语法:[起始:结束:步长],步长默认为1,可为负数,切片区间左闭右...
  • vue开始计时组件

    千次阅读 2019-04-22 13:08:21
    如果你需要制作一个开始计时的组件,需要怎么做呢?比如你要从 00:00 开始计时,然后秒数开始叠加,这里我写了一个开始计时的组件,下面是这个组件,你可以直接引入到项目中使用。 <template> <div class=...
  • 当cwnd = ssthresh时,既可以使用慢开始算法,又可使用拥塞避免算法(通常为拥塞避免算法) 慢开始和拥塞避免算法以及拥塞处理示意图: 快重传和快恢复 快重重和快恢复算法时对慢开始和拥塞避免算法的改进 快重传 ...
  • 并没有特别设置过,但迅雷的下载地址确实发生了改变,改为了我之前连接至电脑的移动硬盘上...这样一来,下载目录都不存在当然下载就无法开始。 插入硬盘后我彻底删除了所有任务,重新下载后功能恢复了正常 ...
  • if (a1[0]>b1[0]) { alert("开始时间大于结束时间,error!"); } else if (a1[0]=b1[0]) { if (a1[1]>b1[1]) { alert("开始时间大于结束时间"); } else if (a1[1]=b1[1]) { alert("开始时间等于结束时间"); } else{ ...
  • Unity3D_最简单的开始界面_结束界面

    万次阅读 多人点赞 2019-05-17 21:38:30
    Unity3D_最简单的开始界面_结束界面开始界面结束界面 开始界面 1、创建一个新的场景 添加button 2、C#脚本 LoadingGame.cs using System.Collections; using System.Collections.Generic; using UnityEngine; ...
  • Date date = new Date(0); System.out.println(date); 打印出来的结果: Thu Jan 01 08:00:00 CST 1970 也是1970 年 1 月 1 日,实际上时分秒是 0 点 0 分 0 秒 ( 这里打印出来是 8 点,...于是开始了Google ,中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,416,567
精华内容 3,766,626
关键字:

开始