精华内容
下载资源
问答
  • 学习技术的一点感想

    千次阅读 2011-03-12 17:00:00
     无论对于初学者还是已经具备一定基础的人,要进一步提高自己的技术能力,就必须不断地学习。学习我比较推崇的,也一直在实践的是一种“目标驱动学习法”。换句话来说,不是为了学技术学技术,而是因为有...

       无论对于初学者还是已经具备一定基础的人,要想进一步提高自己的技术能力,就必须不断地学习。学习我比较推崇的,也一直在实践的是一种“目标驱动学习法”。换句话来说,不是为了学技术而学技术,而是因为有某件事情(某个项目)要去做,而目前我并不了解这种技术,所以需要去探寻这种技术。学技术的唯一目标,就是为了把这个项目做完!否则,技术学起来是枯燥和乏味的。

       学习软件开发技术所指的项目,就是各种软件项目了。只有在做项目的过程中,你才会明了自己的不足,也才会有兴趣和深入的理解各种技术。我原来在某个公司呆的时候,公司做了几次关于项目管理方面的讲座,我听得晕晕乎乎的,什么WBS,什么甘特图,各种文档之类的,纯粹把它视为一种需要记住的东西来学习,无论强调它多重要,但是我根本意识不到。后来真正需要我将一个项目拿起来,需要把这个项目给团队成员、上级说得清楚,需要去估计工作量、成本,需要去找人来做这个项目的时候,一大堆的问题产生了:项目规模应该怎么估算呢?按照哪种方式来把项目工作进行细分呢?时间安排应该怎么才算合理呢?我需要用一个什么文档才能把这件事情说清楚呢?直到这个时候,我才对研究项目管理中的各种理论视为一件趣事,因为我必须找到一种理论来为行动进行指导,我必须表现出专业的样子!

       无论学哪个技术,均是项目为先!无论怎么强调项目的重要性都不为过。因为只有项目,才是真正产生价值的东西。

       项目为先,就意味着学技术是被动的,被项目推着走的。

       为什么要研究内存数据库?因为项目需要!

       为什么要研究android?因为项目需要!

       为什么要研究缓存策略?因为项目需要!

       为什么要关注分布式、集群?因为项目需要!

       为什么要学习JBPM?因为项目需要!

       。。。。。。

       学完某种技术,马上应用到项目中,立马看到效果,你学习的兴趣就会越来越浓厚;相反,学完某种技术,长时间不用,很快就会忘光了!

       项目中需要用到的技术,就是需要掌握的技术,项目中没有用到的技术,我只需要简单了解,等真正要用到的时候,再去学习也不晚!

     

       哪里有这么多项目啊?你肯定会有这样一些问题。况且,某个项目,可能也只是涉及到其中某些方面的技术而已,为了项目的需要而学习,会不会有点片面而不完整呢?

       如果你现在所在的公司,你正在做的项目,本身并没有用到太多新的东西,那么你就类似于一个代码搬运工,机械的搬运代码。或者项目本身很复杂,但是你干的活却用到的技术不多,那该怎么办呢?我的建议就是:问问自己,你真的学不到东西吗?你正在做的这个项目,难道真的没有任何东西可以难倒你了吗?你对目前要用到的技术已经非常熟练了吗?如果答案是否定的,那你就知道你的目标在哪里了;如果答案是肯定的,那我只能建议你换工作了!

       很多人跟我说:“我现在想学点技术,整天看书,也看不出个什么东西来”,我的建议就是找个项目来做。而且在做项目的时候,应该侧重训练自己的分析和设计能力。

       如果你目前还没有工作,刚刚毕业,工作都找不到(缺乏项目经验),你甚至都不知道项目是个什么玩意,那你真的应该好好寻找你的目标在哪里了(找个项目来做呗)!都说学Java好找工作,这话不假,其实学别的,也不难找工作,关键在于:项目经验!学哪门技术也逃脱不了项目经验。你想见识真正的项目是什么样子的吗?你想知道什么是项目经验吗?只要你有心想学项目开发,只要你能提出问题来,那么肯定可以找到答案,各种大门对你都是敞开着的!

       如果你目前很无聊很清闲,那你可以自己给自己找点项目,找点自己感兴趣的、而且对以后找工作或换工作也有用的东西去做一做。这就每个人都不一样了,因为每个人的兴趣是不一样的。而且每个人目前掌握的技术水平也不一样。

       绝大部分情况下,你需要专注于自己目前所做的项目。

     

       为了项目而学习,确实有可能会导致有点片面。所以,才需要接触各种不同的项目。但是绝大部分情况下,一个综合性的项目,所涉及到的范围还是非常广的。项目越多,项目越难(有挑战性),你学习到的东西才会越多。抱着学习、迎接挑战的心态去做项目,你才会越挫越勇!你才会感谢你有这个机会接触到了能学很多东西的项目!你会感谢项目经理把一个很难的模块分配给你去完成!你会感谢项目经理把你一块叫去做需求(很多程序员觉得这做需求就是在扯皮,特别是跟政府部门的人打交道的时候)!。。。。。。

     

       学习项目,就是要学习其中的需求;学习如何从需求转换为软件的实现(过程);需求描述了一个什么样的目标;如何进行概念建模,如何进行分析和设计;实现过程中有哪些技巧。等等等等。。。。

     

       你看到有的人刚去公司就能拿7000、8000元/月,觉得羡慕吗?为什么你只能拿3000、4000元/月的工资?或甚至连工作都找不到呢?你觉得差距在哪里呢?你是不是要填补这个差距呢?你准备在什么时候要拿到一个什么样的工资水平呢?

     

       一句话,赶紧找项目来做吧!只有接触了项目,你才能明白自己的差距,你才能找到自己的目标,你才能找到自己学习的兴趣!

     

    展开全文
  • Java后端开发学习路线:一文串起所有主流技术点

    千次阅读 多人点赞 2020-05-11 10:45:27
    注:本文已经收录进开源项目:github.com/JavaCollection,有自学路线、面试题和面经、编程资料以及系列技术文章。 前言 这篇写很久了,原以为一两天搞定,...应该说,基本把Java后端开发主流技术点都串起来了。..

    注:本文已经收录进开源项目:github.com/JavaCollection,有自学路线、面试题和面经、编程资料以及系列技术文章。


    前言

    这篇想写很久了,原以为一两天搞定,结果整理串接画图搞了一周多。经过一番梳理、虽然东西不少,但感觉还是挺清晰的,不说了,肝。


    前方高能

    一图胜千言,但凡能用图,就不想用文字。直接看图吧,看完再聊几个问题。

    注:本图素材已收录进开源项目:github.com/JavaCollection,需要可自取。

    应该说,基本把Java后端开发主流技术点都串起来了。

    所以接下来,聊聊几个问题吧。


    编程基础

    到底我们口口声声所说的编程基础是什么?

    这次在上面的脑图中已经完全展现了!

    即使后面的东西都没学,基础部分是肯定需要完成的,这也是后面所有应用框架学习的基石;反之,在应用框架的学习时如果感觉吃力,可能非常有必要回过头来再巩固对应的基础知识。

    然而基础的确不是一蹴而就的,确实需要一定的反复和回炉,才能做到真正的融会贯通,这需要一个过程,所以珍惜每一次复习基础的机会。


    学了哪些才能找(到)工作?

    啊,这个问题有点难。

    只能这样说,优先把编程基础准备充分,不留纰漏;其次,应用框架部分内容能学则学,尽力准备,在熟练使用的同时能了解原理,就基本很稳了。


    后端开发需要学前端吗?

    完全不懂肯定是不行的,会太过于被动,但钻牛角尖也的确没必要。

    如果目标在后端开发相关岗位,还是优先掌握后端领域的东西为好,毕竟本领域的东西就太多了,而对于前端的知识,大致技术轮廓和概念了解一下还是有必要的。


    咋没有Java Web?

    有人问,为什么图中没有Java Web学习路线相关的东西呢?

    本来所谓的Java Web无非也就是:HTTP协议、Servlet、Web容器、JSP、Cookie和Session等等这些内容。

    所以这几点对照到上面的脑图会发现,其实已经包含在上图的诸如:「计算机网络」、「Spring框架」、「模板框架」等等这些部分里了,所以这些掌握了,所谓的Java Web就自然过关了。


    学完如何能保证留下东西?

    我坚信:学习不在入,而在出

    所以勤于做笔记、善于写博客,做好技术输出非常重要,这样后面复习回顾自查都有章可循了。


    共 勉

    在没有这样总结之前,总感觉东西很乱,但经过这一番梳理和串接之后,会发现虽然东西是不少,但好在路线也非常清晰,按照这个路线去扎实推进一般问题就不大了。


    平稳降落

    飞得多快,非得多高,不是目的,重点是如何平稳降落,小伙伴们也记得调整心态、注意健康,徐图长期发展。


    文章/资源持续更新,本文已经收录进GitHub开源项目:github.com/JavaCollection,有自学路线、面试题和面经、编程资料及系列技术文章。

    由于个人能力有限,不足之处还请见谅和指出,一起交流进步

    急不得,慢一点才能更快

    展开全文
  • [总结]视音频编解码技术零基础学习方法

    万次阅读 多人点赞 2014-06-16 00:12:43
    一直把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成。今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术。需要注意的是,本文...

    一直想把视音频编解码技术做一个简单的总结,可是苦于时间不充裕,一直没能完成。今天有着很大的空闲,终于可以总结一个有关视音频技术的入门教程,可以方便更多的人学习从零开始学习视音频技术。需要注意的是,本文所说的视音频技术,指的是理论层面的视音频技术,并不涉及到编程相关的东西。

     

    0.     生活中的视音频技术

    平时我们打开电脑中自己存电影的目录的话,一般都会如下图所示,一大堆五花八门的电影。(其实专业的影视爱好者一概会把影视文件分门别类的,但我比较懒,一股脑把电影放在了一起)


    因为下载的来源不同,这些电影文件有不同的格式,用不同的后缀表示:avi,rmvb,mp4,flv,mkv等等(当然也使用不同的图标)。在这里需要注意的是,这些格式代表的是封装格式。何为封装格式?就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难能看出具体使用了什么视音频编码标准。总的来说,不同的封装格式之间差距不大,各有优劣。

    注:有些封装格式支持的视音频编码标准十分广泛,应该算比较优秀的封装格式,比如MKV;而有些封装格式支持的视音频编码标准很少,应该属于落后的封装格式,比如RMVB。

     

    下面演示一下如何使用视频播放器查看一个视频文件采用的视音频技术:

    注:在这里使用Media Player Classic作为演示,实际上暴风影音,KMplayer这些操作都差不太多。

    1.打开一个视频文件

    2.在视频画面上右键单击,选择属性。


    3.在弹出的“属性”对话框的“MediaInfo”选项卡中,就可以查看该视频文件采用的视音频技术了。如下图所示,“变形金刚预告片_h1080p.mov”采用MPEG4的QuickTime封装格式(MOV),采用了H.264(AVC)的压缩编码标准。


    在这里用到了一个查看媒体信息的工具:MediaInfo。MediaInfo是一个专门查看视音频格式的工具,软件的详细使用可参考:

    MediaInfo使用简介(新版本支持HEVC

    源代码分析可参考:

    MediaInfo源代码分析 1:整体结构[系列文章]

    生活中的视音频技术到此为止,下面介绍一下具体的视音频技术。

     

    1.     视频播放器原理

    视音频技术主要包含以下几点:封装技术,视频压缩编码技术以及音频压缩编码技术。如果考虑到网络传输的话,还包括流媒体协议技术。

    视频播放器的源代码详细解析(Media Player Classic - HC,Mplayer,FFplay,XBMC)可以参考系列文章:

    Media Player ClassicMedia Player Classic - HC源代码分析 1:整体结构[系列文章]

    MplayerMPlayer源代码分析

    FFplay FFplay源代码分析:整体流程图

    XBMC XBMC源代码分析 1:整体结构以及编译方法[系列文章]

    在这里不细说了,仅简要说明一下视频播放器的原理。

    视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。

     

    解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

    解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

    解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

    视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

    接下来的几节我们将会列出主要的流媒体协议,封装格式,以及视音频编码标准。更详细的比较可以参考:

    视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比

    有关本文中涉及到的协议数据、封装格式数据、视频编码数据、音频编码数据、视频像素数据、音频采样数据的分析可以参考下面系列文章:

    视音频数据处理入门:RGB、YUV像素数据处理

    视音频数据处理入门:PCM音频采样数据处理

    视音频数据处理入门:H.264视频码流解析

    视音频数据处理入门:AAC音频码流解析

    视音频数据处理入门:FLV封装格式解析

    视音频数据处理入门:UDP-RTP协议解析


    2.     流媒体协议

    流媒体协议是服务器与客户端之间通信遵循的规定。当前网络上主要的流媒体协议如表所示。

    主要流媒体协议一览

    名称

    推出机构

    传输层协议

    客户端

    目前使用领域

    RTSP+RTP

    IETF

    TCP+UDP

    VLC, WMP

    IPTV

    RTMP

    Adobe Inc.

    TCP

    Flash

    互联网直播

    RTMFP

    Adobe Inc.

    UDP

    Flash

    互联网直播

    MMS

    Microsoft Inc.

    TCP/UDP

    WMP

    互联网直播+点播

    HTTP

    WWW+IETF

    TCP

    Flash

    互联网点播

    RTSP+RTP经常用于IPTV领域。因为其采用UDP传输视音频,支持组播,效率较高。但其缺点是网络不好的情况下可能会丢包,影响视频观看质量。因而围绕IPTV的视频质量的研究还是挺多的。

    RTSP规范可参考:RTSP协议学习笔记

    RTSP+RTP系统中衡量服务质量可参考:网络视频传输的服务质量(QoS

    上海IPTV码流分析结果可参考:IPTV视频码流分析

    因为互联网网络环境的不稳定性,RTSP+RTP较少用于互联网视音频传输。互联网视频服务通常采用TCP作为其流媒体的传输层协议,因而像RTMP,MMS,HTTP这类的协议广泛用于互联网视音频服务之中。这类协议不会发生丢包,因而保证了视频的质量,但是传输的效率会相对低一些。

    此外RTMFP是一种比较新的流媒体协议,特点是支持P2P。

    RTMP我做的研究相对多一些:比如RTMP规范简单分析,或者RTMP流媒体播放过程

    相关工具的源代码分析:RTMPdump源代码分析 1 main()函数[系列文章]

    RTMP协议学习:RTMP流媒体技术零基础学习方法

    3.     封装格式

    封装格式的主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。现如今流行的封装格式如下表所示:

    主要封装格式一览

    名称

    推出机构

    流媒体

    支持的视频编码

    支持的音频编码

    目前使用领域

    AVI

    Microsoft Inc.

    不支持

    几乎所有格式

    几乎所有格式

    BT下载影视

    MP4

    MPEG

    支持

    MPEG-2, MPEG-4, H.264, H.263等

    AAC, MPEG-1 Layers I, II, III, AC-3等

    互联网视频网站

    TS

    MPEG

    支持

    MPEG-1, MPEG-2, MPEG-4, H.264

    MPEG-1 Layers I, II, III, AAC,

    IPTV,数字电视

    FLV

    Adobe Inc.

    支持

    Sorenson, VP6, H.264

    MP3, ADPCM, Linear PCM, AAC等

    互联网视频网站

    MKV

    CoreCodec Inc.

    支持

    几乎所有格式

    几乎所有格式

    互联网视频网站

    RMVB

    Real Networks Inc.

    支持

    RealVideo 8, 9, 10

    AAC, Cook Codec, RealAudio Lossless

    BT下载影视

    由表可见,除了AVI之外,其他封装格式都支持流媒体,即可以“边下边播”。有些格式更“万能”一些,支持的视音频编码标准多一些,比如MKV。而有些格式则支持的相对比较少,比如说RMVB。

    这些封装格式都有相关的文档,在这里就不一一例举了。

    我自己也做过辅助学习的小项目:

    TS封装格式分析器

    FLV封装格式分析器

     

    4.     视频编码

    视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。

    视频编码的简单原理可以参考:视频压缩编码和音频压缩编码的基本原理

    注:视频编码技术在整个视音频技术中应该是最复杂的技术。如果没有基础的话,可以先买一些书看一下原理,比如说《现代电视原理》《数字电视广播原理与应用》(本科的课本)中的部分章节。

    主要视频编码一览

    名称

    推出机构

    推出时间

    目前使用领域

    HEVC(H.265)

    MPEG/ITU-T

    2013

    研发中

    H.264

    MPEG/ITU-T

    2003

    各个领域

    MPEG4

    MPEG

    2001

    不温不火

    MPEG2

    MPEG

    1994

    数字电视

    VP9

    Google

    2013

    研发中

    VP8

    Google

    2008

    不普及

    VC-1

    Microsoft Inc.

    2006

    微软平台

    由表可见,有两种视频编码方案是最新推出的:VP9和HEVC。目前这两种方案都处于研发阶段,还没有到达实用的程度。当前使用最多的视频编码方案就是H.264。

    4.1 主流编码标准

    H.264仅仅是一个编码标准,而不是一个具体的编码器,H.264只是给编码器的实现提供参照用的。

    基于H.264标准的编码器还是很多的,究竟孰优孰劣?可参考:MSU出品的 H.264编码器比较2011.5

    在学习视频编码的时候,可能会用到各种编码器(实际上就是一个exe文件),他们常用的编码命令可以参考:各种视频编码器的命令行格式

    学习H.264最标准的源代码,就是其官方标准JM了。但是要注意,JM速度非常的慢,是无法用于实际的:H.264参考软件JM12.2RC代码详细流程

    实际中使用最多的就是x264了,性能强悍(超过了很多商业编码器),而且开源。其基本教程网上极多,不再赘述。编码时候可参考:x264编码指南——码率控制。编码后统计值的含义:X264输出的统计值的含义(X264 Stats Output

    Google推出的VP8属于和H.264同一时代的标准。总体而言,VP8比H.264要稍微差一点。有一篇写的很好的VP8的介绍文章:深入了解 VP8。除了在技术领域,VP8和H.264在专利等方面也是打的不可开交,可参考文章:WebM(VP8) vs H.264

    此外,我国还推出了自己的国产标准AVS,性能也不错,但目前比H.264还是要稍微逊色一点。不过感觉我国在视频编解码领域还算比较先进的,可参考:视频编码国家标准AVSH.264的比较(节选)

    近期又推出了AVS新一代的版本AVS+,具体的性能测试还没看过。不过据说AVS+得到了国家政策上非常强力的支持。

    4.2 下一代编码标准

    下一代的编解码标准就要数HEVC和VP9了。VP9是Google继VP8之后推出的新一代标准。VP9和HEVC相比,要稍微逊色一些。它们的对比可参考:(1)HEVC与VP9编码效率对比 (2)HEVC,VP9,x264性能对比

    HEVC在未来拥有很多大的优势,可参考:HEVC将会取代H.264的原因

    学习HEVC最标准的源代码,就是其官方标准HM了。其速度比H.264的官方标准代码又慢了一大截,使用可参考:HEVC学习—— HM的使用

    未来实际使用的HEVC开源编码器很有可能是x265,目前该项目还处于发展阶段,可参考:x265(HEVC编码器,基于x264)介绍。x265的使用可以参考:HEVCH.265)标准的编码器(x265DivX265)试用

    主流以及下一代编码标准之间的比较可以参考文章:视频编码方案之间的比较(HEVCH.264MPEG2等)

    此外,在码率一定的情况下,几种编码标准的比较可参考:限制码率的视频编码标准比较(包括MPEG-2H.263 MPEG-4,以及 H.264

    结果大致是这样的:

    HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2。

    截了一些图,可以比较直观的了解各种编码标准:

    HEVC码流简析:HEVC码流简单分析

    H.264码流简析:H.264简单码流分析

    MPEG2码流简析:MPEG2简单码流分析

    以上简析使用的工具:视频码流分析工具

    我自己做的小工具:  H.264码流分析器


    5.     音频编码

    音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。音频编码也是互联网视音频技术中一个重要的技术。但是一般情况下音频的数据量要远小于视频的数据量,因而即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,可以获得更高的音质。

    音频编码的简单原理可以参考:视频压缩编码和音频压缩编码的基本原理

    主要音频编码一览

    名称

    推出机构

    推出时间

    目前使用领域

    AAC

    MPEG

    1997

    各个领域(新)

    AC-3

    Dolby Inc.

    1992

    电影

    MP3

    MPEG

    1993

    各个领域(旧)

    WMA

    Microsoft Inc.

    1999

    微软平台

    由表可见,近年来并未推出全新的音频编码方案,可见音频编码技术已经基本可以满足人们的需要。音频编码技术近期绝大部分的改动都是在MP3的继任者——AAC的基础上完成的。

    这些编码标准之间的比较可以参考文章:音频编码方案之间音质比较(AACMP3WMA等)

    结果大致是这样的:

    AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3

    AAC格式的介绍:AAC格式简介

    AAC几种不同版本之间的对比:AAC规格(LCHEHEv2)及性能对比

    AAC专利方面的介绍:AAC专利介绍

    此外杜比数字的编码标准也比较流行,但是貌似比最新的AAC稍为逊色:AC-3技术综述

    我自己做的小工具: AAC格式分析器


    6.     现有网络视音频平台对比

    现有的网络视音频服务主要包括两种方式:点播和直播。点播意即根据用户的需要播放相应的视频节目,这是互联网视音频服务最主要的方式。绝大部分视频网站都提供了点播服务。直播意即互联网视音频平台直接将视频内容实时发送给用户,目前还处于发展阶段。直播在网络电视台,社交视频网站较为常见。

    6.1 直播平台参数对比

    主流互联网视音频平台直播服务的参数对比如表所示:

    现有网络视音频平台参数对比

    名称

    协议

    封装

    视频编码

    音频编码

    播放器

    CNTV

    私有

    华数TV

    RTMP

    FLV

    H.264

    AAC

    Flash

    六间房

    RTMP

    FLV

    H.264

    AAC

    Flash

    中国教育电视台

    RTMP

    FLV

    H.264

    AAC

    Flash

    北广传媒移动电视

    RTMP

    FLV

    H.264

    AAC

    Flash

    上海IPTV

    RTSP+RTP

    TS

    H.264

    MP2

    机顶盒

    可以看出,直播服务普遍采用了RTMP作为流媒体协议,FLV作为封装格式,H.264作为视频编码格式,AAC作为音频编码格式。采用RTMP作为直播协议的好处在于其被Flash播放器支持。而Flash播放器如今已经安装在全球99%的电脑上,并且与浏览器结合的很好。因此这种流媒体直播平台可以实现“无插件直播”,极大的简化了客户端的操作。封装格式,视频编码,音频编码方面,无一例外的使用了FLV + H.264 + AAC的组合。FLV是RTMP使用的封装格式,H.264是当今实际应用中编码效率最高的视频编码标准,AAC则是当今实际应用中编码效率最高的音频编码标准。视频播放器方面,都使用了Flash播放器。

    6.2 点播平台参数对比

    主流网络视音频平台点播服务的参数对比如表所示:

    现有互联网视音频平台参数对比

    名称

    协议

    封装

    视频编码

    音频编码

    播放器

    CNTV

    HTTP

    MP4

    H.264

    AAC

    Flash

    CNTV(部分)

    RTMP

    FLV

    H.264

    AAC

    Flash

    华数TV

    HTTP

    MP4

    H.264

    AAC

    Flash

    优酷网

    HTTP

    FLV

    H.264

    AAC

    Flash

    土豆网

    HTTP

    F4V

    H.264

    AAC

    Flash

    56网

    HTTP

    FLV

    H.264

    AAC

    Flash

    音悦台

    HTTP

    MP4

    H.264

    AAC

    Flash

    乐视网

    HTTP

    FLV

    H.264

    AAC

    Flash

    新浪视频

    HTTP

    FLV

    H.264

    AAC

    Flash

    可以看出,点播服务普遍采用了HTTP作为流媒体协议,H.264作为视频编码格式,AAC作为音频编码格式。采用HTTP作为点播协议有以下两点优势:一方面,HTTP是基于TCP协议的应用层协议,媒体传输过程中不会出现丢包等现象,从而保证了视频的质量;另一方面,HTTP被绝大部分的Web服务器支持,因而流媒体服务机构不必投资购买额外的流媒体服务器,从而节约了开支。点播服务采用的封装格式有多种:MP4,FLV,F4V等,它们之间的区别不是很大。视频编码标准和音频编码标准是H.264和AAC。这两种标准分别是当今实际应用中编码效率最高的视频标准和音频标准。视频播放器方面,无一例外的都使用了Flash播放器。

     

    展开全文
  •  学习软件技术的2、3 热度 6已有 1063 次阅读 2012-2-25 20:09|个人分类:随笔|系统分类:IT技术|关键词:技术 软件技术 Linux 十多年前一块探索Linux技术的张波同学,如今虽不在技术一线,但

    http://home.lupaworld.com/home-space-uid-26540-do-blog-id-249050.html


     学习软件技术的2、3点

    热度 6已有 1063 次阅读 2012-2-25 20:09|个人分类:随笔|系统分类:IT技术|关键词:技术 软件技术 Linux

    十多年前一块探索Linux技术的张波同学,如今虽不在技术一线,但他曾经的技术经历以及表述这种经历的有趣方式,给后来者以启发:
    ————————————————————————————————————————————-

    学习软件技术的23

    张波

          很久很久没有接触开源社区了,也很久很久没有接触技术了,自从自废武功转作商务以后,就再也不好意思在开源论坛吱声了;木有办法,技术发展太快,现在随便哪个小师弟提出个技术问题就能秒杀我,所以在技术上与大家探讨,那必然是起于自我膨胀,而终于自取其辱了,显然非智者所为也!(郑重声明,这里没有任何对师妹技术的藐视,并非师妹技术赶不上师弟,而是大丈夫有所不为也!即便是使出顾左右而言他这种高端培训技巧,本人也不能让自己在师妹面前被秒杀,必须的!)

        只是长久以来,每每看到陈老师始终兢兢业业的教书育人、康华等师兄弟已然在开源云计算等技术领域挥斥方遒,自然为其坚持和激情所感,也总想接着做点什么!

        然而,世界上独独就怕“想”这个字;不对,应该是世界上就怕独独的一个“想”字,光想不练,时光荏苒,你们懂的,。。。说起来是笑谈,然而却是颠扑不破的真理:没有想法不见得是坏事,所谓脑残人安乐;光想不练、始终无丝毫实际进展才会让人悲叹蹉跎——我们的思想曾经那么深远,比乔布斯都早预感到智能移动终端的颠覆式发展,怎奈他生的早、动得快。。。

        可叹我早在大学阶段就明白了这个真理,然而却每每不能理论联系实际,在漫长的岁月里不停的用细腻的思考代替鲁莽的探索,反复犯错栽跟头,在摔进的同一条河里都已经学会游泳了。今天,我要郑重的告诫大家:光练不想傻把式,光想不练假把式!这篇文章就是行动的起点!

        这里我想和大家分享的是学习计算机软件技术、特别是偏重于操作系统这个领域的指导思想和学习路径。作为一个撂荒者技术没啥好说的了,我不如大家远矣;但是总结技术学习过程的经验教训,特别是教训,我还是有些心得的。况且,作为一个智力中等程度的人,我的经验可能比很多大牛的经验更有些参考价值。我姑且说之,您姑且听之,不要认为是说教的老生常谈即好。

    1、          没有实践,就没有发言权。

    我过去在面对操作系统方向的面试者时,常常问到一个问题:“你用的内核调试器是什么?”答案不一,总结起来往往有:

    “内核调试器是干什么用的?”

    ——恭喜您,您是一个没有想法的人,祝您安乐!

    Visual开发环境,gccg++

    ——你可以不诚实,但是你不能怀疑我也不诚实,既然问了内核调试器,我肯定跟度娘问过答案,胡说八道可不行。

    “我用得是KBD/Windbg

       ——你靠谱,我随意!是的,我会开始随意问些问题了,symbols,栈指针,prototype,断点设置的技巧,这些都是不错的方向,因为我相信你和我是同一类人,咱们有共同语言。

       很难想象一个学习操作系统或体系结构,开发驱动或模块的程序员不会使用内核调试器,就像写C语言的人不懂C编译器一样。不用调试器去挑战内核,难道你是在把3.2.7的代码当14行诗在读吗,韵律感怎么样?

       在学习软件技术的过程中,实践操作重过一切,代码量上不去,一切都是浮沙建塔。很难想象一个代码量低于10000行的程序员会对模块化编程的用处心有戚戚焉。如果连模块化编程都弄不明白是为什么,那又谈什么系统设计,面向对象设计,谈什么软件工程呢?

       无数的教科书里都讲了模块化编程的好处,然而,请相信我,纸上得来终觉浅,在没有达到一定的代码量之前,你只是知道它能带来这个好处而已。那么,什么时候你开始懂得模块化编程了呢?就是你在编程序的时候突然想把程序扔到一边,拼命的去找专门讲模块化编程原理和技巧的书籍时,你就将入门了。

       所有的理论都是用来指导实践的,模块化编程理论是个老技术,但是它却是面向对象技术、设计模式的基石。一样的道理,计算机软件技术大部分都得通过实践去驾驭,学过C++、读过四人帮不代表你掌握了这些技术,只有当你学以致用——想用、需要用、不得不用——的时候,你才能开始掌握一门技术。

       此外,你还要明白,编程的实践是会带来切切实实的好处的。参加工作之后码代码换钱天经地义,我说的是大学时候无偿写代码的事。那时我曾经用汇编帮两个朋友完成过大作业,一个数学系的,一个学通信的。直到现在,我需要研究一些算法的时候总会有个教高数的教授帮我抗雷,需要一个好的手机号码的时候总会有个电信公司经理帮我打折。我也知道,以上案例看起来不像很有说服力的样子,看我的杀手锏——我曾经帮我的一个学通信的师妹完成了她毕业设计中代码的那一部分。现在,我们家宝宝的衣食住行都是她帮我打理的。

      牢记,黄金屋和颜如玉,对学软件的人来说,都是码出来的!码代码需要的就是时间,你还在浪费时间吗?

    题外:

      还遇到过如下回答:

      “我用Windbg调试Vmware下面的虚拟机,发现过Windows2003bug,并帮助微软写了patch

       ——拜托不要这么强悍好不好,连代码都没有就能搞定bug,让我们这些整天做codereading的人情何以堪啊?“请问您解决的bug相关的KB文章号码是什么?”必须和你死磕了。

        夹点儿私货,面试技巧:面试时要信奉万言万当莫如一缄。除非你技术强悍到能够征服他,否则不要和面试官在他擅长的方向上展开技术争论,而是要引导面试官在他的领域里契阔谈宴。对,就是想方设法让他滔滔不绝讲自己的成功经历,而你在旁边呈钦佩状,不时击掌称善,弄得他引你为知己、恨不得请你吃饭那种。据科学统计,武侠和玄幻小说里被高人抢着收徒弟的大部分主人公都具备这样的素质和能力,不可不借鉴啊。

        当然,面试的过程你还要证明你至少会说汉语,能够和团队成员沟通,所以不能一直装聋作哑。但是,一定要主意,自己说的时候殚精竭虑的引导话题到你专长的领域里去发挥。知己知彼,扬长避短。

       以上为高端面试技巧,适用于具有一定面试经验的面试者针对较为高端的研发职位时使用,应届本科和硕士毕业生慎用,为什么?你知道什么时候该击掌称善吗?你有擅长的方向吗?英文引导这个单词能拼写出来吗?而且针对新人的面试,企业一般重点考察的是IQEQpotential,高端技巧往往用不上。不过,只有了解这一点才可以明白正确的方向,推动深层次面试能力的全面发展。

    2、          在一点上突破,境界高才是真得高。

        有些同学懂十几种语言,能用二十多种不同的方式打印“HelloWorld!”,让人肃然起敬,赞叹不已“发烧友发烧到这个程度,非常人所能及也!”然而,这个是发烧友才做的事情,专业人士即便能做,也不会拿这个当什么光彩的事。毕竟,打印“Hello World”这种事情层次太低了。

       实际上,虽然我们很少承认自己在学习打印“HelloWorld”这件事,但实际上很可能并没有免俗。不是吗?请看你的简历,看着上面罗列的语言类技能,精通的至少2种,熟练的不下5,6个吧?问问自己吧,用“精通”的语言,不看参考手册,你能实现一个平衡二叉树吗?用“熟练”的语言,除了按下按钮弹出“Hello World”窗口,你还能做其它的事情吗?你看,被揭穿了吧?必须的啊同胞们,我们这些人当初简历就是这么写的啊,这么多年过去了,看你们还在重复我们当年的低水平技巧,不由得让人感慨,我们国家培养创造性人才的工作确实仍旧任重而道远啊。

        我过去的简历上面曾经有说自己精通VisualC++,于是进微软面试的时候,考官说你精通VC++啊,那我们就看看C++本身是用哪几类方式实现虚函数的重载的,VC下面的实现是对什么重要因素妥协的结果?虽然当时(2004年)我已经研究过侯捷老师翻译的《Inside TheC++ Object Model》,但是,实践还远远不够啊,代码量太小,离回答这个问题所需的技术水平仍有差距。我只能把其中自己懂得的、大面而不会错的东西都说出来了,接起来就虚心和考官探讨起他在这个领域的最新研究进展,并不时的击掌称善。。。。。。接下来,你懂的,我过了微软面试后第一件事情就是删了简历里面精通C++这个项目。

        我之所以反复的提到一些面试方面的内容,是因为面试是在我们这个行业里对一个人技术水平评价最直观的一种过程。技术面试官的最主要职责就是评价你的技术水平。你技术到底行不行,好的公司第一轮技术面试一般就会有个结论了。对于应届毕业的大学生和研究生,好的公司往往会考虑你的IQ,EQ和潜力,考虑你未来能做什么多于你现在马上能干什么。换句话说,我如果发现你C的水平能傲视同侪的话,那么我相信只要需要并给你时间,你学习C++未来能达到的水平也会非常不错。

        所以,不要想当然的认为多会门语言多条路,想要毕业的时候有个更好的起点,我觉得还是应该集中精力,让自己的技术水平提高到一定的境界。其实,学软件技术就像挖井一样,必须持续在一个方向上努力深入,直到打出水来。今天换个语言,明天变个方向,你就是在反复在不同的位置给自己挖坑。不出水不是坑是什么,难道能称之为井?

        其它技术领域如何深入学习我也并不明了,有关我在操作系统这个方向上学习的过程,包括历程、所需的前置技术能力、需要重点突破的领域等,我会找时间另外形成一个文档,希望到时候能跟师弟师妹们一起交流。

       题外话,上面的故事告诉我们一个道理, 夜路走长了总是会碰到鬼的,像PS照片一样PS简历,面试官就会像BS苍蝇一样BS你。面试技巧能让你发挥自己120%的水平,可是如果你本来的水平是0,那么,技巧就让它还归于技巧吧,您还是您!

    3、          埋头赶路,也要抬头看方向

        我一直在强调学习软件技术必须要加强实践,掌握软件领域的技术,干什么都没有编代码来的实在。然而,就像世界上其它任何需要付出默默努力的事情一样,总有些人会事半功倍,有些人会事倍功半。正练九阴真经郭靖这样IQ清零的小伙子也能成为有为青年,逆练九阴真经欧阳锋这样的有为青年也能IQ清零。

        我在大学时代曾经淘到过一件文物,是我这辈子目前为止捡漏最大的一笔收获,回报率逆天了。那时西邮定期会有一些书店来贩卖打折书籍,大部分是Xenix操作系统培训教材之类的——拜托,这是1999年的中国,神圣的大学校园,这种货色是卖来当做草纸的吗?——可是,很奇怪的,我居然在中间淘到了一本书,《编程精粹》,1999年。

       不知道怎么形容这本书,刚才我问了一下度娘,现在此类的书籍好像有叫《编程匠艺》之类的古怪名字,不知所云啊,让我们这样的标题党大失所望。只好焚香沐浴,翻箱倒柜的请出这件神物,一看封面的副标题我就有了新的感悟——《编写优质无错 C 程序秘诀》,深刻感觉到此书作者确实是大匠,言简意赅,是靠思想挣钱,不是靠字数糊弄人的。当然,你要是不理解为何我对“优质无错”四个字如痴如醉,说明你的代码量太小,请回宿舍独占机时开始码程序,码到理解为止。

        不过这样下去就没法沟通了,还是举例子吧,看这本书我的第一眼收获就是明白了assert这个宏是干什么用的和什么时候用。如果你还不懂C里面的assert有多重要,说明你的代码量太小,请回宿舍。。。。。。算了,我还是接着讲自己的故事吧。

        2000年是我大学毕业季,那时找工作不像现在,我们的同学可以中兴华为随便选。而我作为一个中等智力程度,成绩一般,身体素质一般的普通同学,连招聘会投简历的华为柜台都没看到,挤不到跟前啊。在那个季节里,我距离最近的专业软件公司是珠海金山,我得到了面试机会,因为我在笔试那一轮写的链表代码里用了assert这个宏。

        虽然我在最终的面试过程中因为一句非常愚蠢的回答葬送了这次机会,但我仍清楚的记得assert宏的威力,面试官显然没有看过《编程精粹》,于是,这成了我的领域,我跟他们一起讨论了下函数接口的防错设计和如何防止数组溢出错误的出现,然后就开始听他们讲金山公司目前都在做些什么工作。在我职业生涯的初期,申请程序员一类的工作时,这本书基本让我无往不利,无论是sybase还是阿尔卡特,当我写下几行防御良好的代码后,负责编码水平评测的考官基本上就开始和我聊天气了。如果你说的和他们是同类语言,他们自然视你为同类,“优质无错”这四个字的威力如斯。

        这本书就是让我编码水平提升了无数个档次的法宝,它就是捷径的灯塔。当你努力编码提升自我的时候,一定要抬头看方向,去寻找这些终南捷径。比如学C++的话,侯捷先生的一些文章就有类似效果。如前文所讲,我试图整理自己研究操作系统的过程并形成一个文档和大家交流,当然,我的层次和大牛们不能比,但是,希望将来出来的时候,也能稍有增益。

       学习软件技术是个漫长的过程,每一个方向都需要持续的学习,需要恒心毅力。实践,无论是编码还是调试,是这条崎岖之路的基石;始终坚持脚下的路是你能达到远处风景的唯一保障;而埋头赶路的同时,一定要看清楚方向,也要想方设法去分享前人的经验,走终南捷径。在前进的时候感受快乐,享受你美好的技术生涯吧!


    展开全文
  • 如何高效学习一门新技术

    万次阅读 多人点赞 2017-06-26 17:50:12
    如何高效学习一门新技术 最近着手学习WCF。举步维艰,故阅读了大量关于学习新技术方法的网页,最终整理如下,一共大家参考。 对于这个较大的话题,我们分两个部分介绍:学习新技术的10个建议 和 学习新技术的具体...
  • JAVA后端应该什么技术

    万次阅读 多人点赞 2019-07-01 16:17:34
    目前要从事Java的后端开发应该学习以下内容: 第一,Servlet技术。Servlet技术是Java后端的重要技术之一,作为Java Web开发的核心组件,Servlet承担了Web MVC结构中的核心作用(功能导航)。传统的Model2结构...
  • 想玩转自媒体,又不想学编程,看看这篇文章有没有用吧。
  • 大家好,我是KookNut39,在CSDN写文,分享一些自己认为在学习过程中比较重要的东西,致力于帮助初学者...最近在更新C/C++方面的知识,感兴趣的欢迎关注博主,可以去专栏查看之前的文章,希望未来能和大家共同探讨技术
  • 如何高效学习编程技术

    千次阅读 2018-11-20 20:10:00
    通过这段时间的看书学习和对编程的思考,结合自己的亲身的学习经历,今天和大家聊一聊如何高效学习编程技术。 我们可以把学习编程技术的人分为下面四种情况。 第一种是既懂方法又努力的,的又快又好,但大家会...
  • 区块链-密码与安全技术

    万次阅读 多人点赞 2017-11-29 17:14:51
    现代密码安全技术在设计上大量应用了十分专业的现代数学知识,如果读者希望成为这方面的专家,则需要进一步学习并深入掌握近现代的数学科学,特别是数论、抽象代数等相关内容。可以说,密码安全学科是没有捷径可...
  • 作为过来人的我是如何学技术的?

    千次阅读 多人点赞 2021-02-07 12:57:06
    目录第一章 写这篇文章的初衷第二章 我要不要去培训班第三章 如何学习一门技术第四章 旧的技术要不要第五章 为啥一定要源码 第一章 写这篇文章的初衷 最近有粉丝私信我,要问问我是如何学习的,还有在学习中...
  • 为何这么多技术,却做不好Coder!

    万次阅读 多人点赞 2017-06-29 01:03:36
    然而,现在,所看的书已经已经从《高等数学》、《离散数学》变成了《团队应该这样带》、《谈判力》、《腾讯传》等,一切不能赚钱的知识都不想学。你是知识的奴隶吗?公司之中的一名实习生,最近向公司告辞,说准备...
  • 真正想学什么,也不知道自己究竟适合学习什么样的技术,有部分同学就会盲目的寻找资料去学,不要着急,小鸿这里带大家了解什么是前端。前端入门需要学习哪些技术。学习前端需要具备什么样的学习条件。 什么是...
  • 零基础如何爬虫技术

    千次阅读 多人点赞 2017-11-16 05:08:17
    这两年自学的过程,走过了无数的坑,多亏了各位大神无私地回答我的问题,我我是有资格帮你解决零基础爬虫技术的。 作为零基础的你,我想你可能是解决工作中的一个实际问题,或者仅仅是很学习一下爬虫的技术...
  • 很多小伙伴问我进大厂到底需要怎样的技术能力,经过几天的思考和总结,终于梳理出一份相对比较完整的技能清单,太顶了,建议收藏!!
  • 我是如何学习一门新技术

    万次阅读 多人点赞 2015-11-01 14:46:08
    作为一个自己技术一般的人,写这个难免会被人拍砖。不过写下来,记录一下自己的学习方式也好,他人可以作为参考和借鉴。经常有很多新入学的学弟学妹们问我该如何学习一门知识,比如如何学习一门语言、如何学习数学...
  • 理解分布式账本技术: 经济视角

    万次阅读 2019-05-18 08:22:58
    本文研究分布式账本作为一项技术创新在应用过程中的经济特征,以助力务实理解该技术的扩散进程与实施挑战,破除非理性迷思,为企业战略决策和公共政策制定提供有益参考。 在新的技术和业务特征之上,分布式账本...
  • 程序员如何学习一项新技术

    千次阅读 2018-05-13 14:01:57
    技术是一个很神奇的东西,有些人学技术是为了成就感,有些人是为了解决工作上的问题,不管你是为了什么,你的目的都是要学习这项技术,那么我们该如何学习一项自己未知的技术呢?下面就问你解答疑惑任何知识的探索都...
  • Android学习路线指南

    万次阅读 多人点赞 2015-11-01 23:34:56
    看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了,但是中高级的Android技术人才仍然稀缺“,这的确不假,从我在百度所进行的一些面试来看,找一个适合的高级Android工程师的确不容易,一般需要进行...
  • 互联网服务端技术——如何(上)

    万次阅读 多人点赞 2016-04-25 22:24:17
    老王带你一起学习不一样的互联网服务器技术~
  • 前言:不知道你是否和我一样,刚开始学习某个技术领域的时候缺乏坚持的动力,没有一个清晰的学习路线,学习的过程中没有人指导,遇到问题没人一起解答,深入学习某个领域而又无从下手,不知道该从何处起?...
  • Linux到底什么

    万次阅读 多人点赞 2019-09-27 21:07:57
    ​我们常常听到很多人说要学学Linux或者被人告知说应该学学Linux,那么Linux到底要什么? 为什么要Linux 在回答什么之前,我们先看看为什么要。首先我们需要认识到的是,很多服务器使用的是Linux系统,...
  • 学习,并从事IOS开发快两年了,由一个...现在到了开发的一个阶段了,基本的东西很熟了,着提高技术,学习难一点的东西,不知该遵循什么思路,从何开始。现在是看到哪里感兴趣就学学,感觉很乱。请各位前辈赐教了。
  • 如果你渴望学习AI技术要系统性学习,那么来吧, 4个月的携手实战,相信你收获不一样的自己,人工智能工程师。 以下为课程特色(官方脸): 课程内容分成三个阶段:机器学习、深度学习、...
  • 推荐10个堪称神器的学习网站

    万次阅读 多人点赞 2020-01-07 10:27:26
    最近很浮躁,手头的一些网站都看烦了,看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 多都起来了。...
  • 本文研究分布式账本作为一项技术创新在应用过程中的经济特征,以助力务实理解该技术的扩散进程与实施挑战,破除非理性迷思,为企业战略决策和公共政策制定提供有益参考。 在新的技术和业务特征之上,分布式账本...
  • 前端必核心技术知识

    千次阅读 多人点赞 2016-07-18 15:54:19
    各核心技术知识图谱大曝光,知识库精华资源强力推荐 HTML5知识库 HTML5知识图谱 知识图谱由前端技术专家、CSDN博客专家侯志强(@yisuowushinian)绘制,全栈工程师、架构师、Android和HTML5专家张西涛...
  • python学习方法总结(内附python全套学习资料)

    万次阅读 多人点赞 2019-10-29 16:50:38
    不要再问我python好不好学了 我之前做过半年少儿编程老师,一个小学四年级的小孩子都能在我的...所以python真的是想学就一定能学会的!!!! --------------------华丽的分割线-------------------------------- ...
  • 程序员们 不要一辈子靠技术混饭吃 金典

    万次阅读 多人点赞 2011-11-02 17:20:29
    我现在是自己做,但我此前有多年在从事软件开发工作,当回过头来想一想自己,觉得特别对那些初学JAVA/DOT .NET技术的朋友说心里话,希望你们能从我们的体会中,多少受启发(也许我说的不好,你不赞同但看在我...
  • 在分享之前,先说说初学者如何学习编程,这个话题想必非常的重要,要学好...尤其是上大一、大二甚至大三还没有确定自己到底是学习前端还是后天,每天这一点,那一块,掌握那么多,没有一门精通的,去面试的时候...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 733,621
精华内容 293,448
关键字:

想学点技术