HLS协议全解

一、HLS是什么

HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。
​是苹果公司QuickTime XiPhone软件系统的一部分。

 

它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。

当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8)playlist文件,用于寻找可用的媒体流。

HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。
​它也很容易使用内容分发网络来传输媒体流。

 

HLS也有一些无法跨越的坑,比如采用HLS协议直播的视频延迟时间无法下到10秒以下,而RTMP协议的延迟最低可以到1秒左右。
​所以说对直播延迟比较敏感的服务请慎用HLS

 

二、HLS的工作流程

HLS的工作流程的三个部分:
HLS协议全解_第1张图片

苹果官方文档的配图

2.1 三个大部分的解析

1.Server :
服务器组件负责获取的媒体输入流 , 然后Media编码后 MPEG-4H.264 video  AAC audio)格式
​然后用硬件打包到 MPEG-2 (MPEG-2 transport stream)的传输流中。
​图中显示,传输流会经过stream segmenter, 这里的工作是MPEG-2传输流会被分散为小片段然后保存为一个或多个系列的 .ts 格式的媒体文件。
​这个过程需要借助编码工具来完成,比如 Apple stream segmenter
(
视频类是.ts文件,纯音频会被编码为一些音频小片段,通常为 ADTS头的AACMP3、或者 AC-3格式。)
服务端可以采用硬件编码和软件编码两种形式,其功能都是按照上文描述的规则对现有的媒体文件进行切片并使用索引文件进行管理。
​而软件切片通常会使用 Apple 公司提供的工具或者第三方的集成工具。

 

2. Distribution :
同时上面提到的那个切片器(segmenter)也会创建一个索引文件,通常会包含这些媒体文件的一个列表,也能包含元数据。
​他一般都是一个.M3U8的列表。列表元素会关联一个 URL 用于客户端访问。然后按序去请求这些 URL

 

3. client :
分配组件由标准的网络服务器。他们负责接受Client客户端请求并提供相关联的资源给客户端。

 

2.2上面的图的每一块解释

1.Media encoder (媒体编码) :
媒体编码器获取到音视频设备的实时信号,将其编码后压缩用于传输。
​而编码格式必须配置为客户端所支持的格式,比如 H.264 视频和HE-AAC 音频。
​当前,支持 用于视频的 MPEG-2 传输流和 纯音频 MPEG 基本流。
​编码器通过本地网络将 MPEG-2 传输流分发出去,送到流切片器(Stream segmenter)那里。
​标准传输流和压缩传输流无法混合使用。传输流(这个流是指图中MPEG-2 transport stream)可以被打包成很多种不同的压缩格式,
​这里有两个表详细列举了支持的压缩格式类型。

音频框架技术: Audio Technologies 
视频框架 : Vedio Technologies

 

在编码中途,不要修改视频编码器的设置,比如视频大小或者编码解码器类型。

如果避免不了,那修改动作必须发生在一个片段边界。并且需要早之后相连的片段上用 EXT-X-DISCONTINUITY进行标记。

 

2.Stream segmenter (流切片器)
流切片器(通常是一个软件,一个SDK)会通过本地网络从上面的媒体编码器中读取数据,
​然后将着这些数据一组相等时间间隔的小媒体文件。虽然每一个片段都是一个单独的文件,
​但是他们的来源是一个连续的流,切完照样可以无缝重构回去。
切片器在切片同时会创建一个索引文件(Index file),索引文件会包含这些切片文件的引用。
​每当一个切片文件生成后,索引文件都会进行更新。索引用于追踪切片文件的有效性和定位切片文件的位置。
​切片器同时也可以对你的媒体片段进行加密并且创建一个密钥文件作为整个过程的一部分。

 

3.文件切片器(相对于上面的流切片器就是切文件的)

如果已经有编码后的文件(而不是编码流),你可以使用文件切片器,
​通过它对编码后的媒体文件进行 MPEG-2 流的封装并且将它们分割为等长度的小片段。
​切片器允许你使用已经存在的音视频库用于 HLS 服务。
​它和流切片器的功能相似,但是处理的源从流替换流为了文件。

 

4. 媒体片段文件,(上面切除来的小片段)

媒体片段是由切片器生成的,基于编码后的媒体源,并且是由一系列的 .ts(如果是纯音频则不是.ts格式)格式的文件组成,
​其中包含了你想通过 MPEG-2 传送流携带的 H.264 视频 和 AAC /MP3/AC-3 音频。
​对于纯音频的广播,切片器可以生产 MPEG 基础音频流,其中包含了 ADTS头的AACMP3、或者AC3等音频。

 

5. 索引文件(PlayLists

通常由切片器附带生成,保存为 .m3u8格式,.m3u一般用于 MP3 音频的索引文件。

Note如果你的扩展名是.m3u,并且系统支持.mp3文件,
​那客户的软件可能要与典型的 MP3 playList 保持一致来完成 流网络音频的播放。
HLS协议全解_第2张图片

4. .m3u8 PlayLists文件

为了更精确,你可以在 version 3 或者之后的协议版本中使用 float 数来标记媒体片段的时长,
​并且要明确写明版本号,如果没有版本号,则必须与 version 1 协议保持一致。
​你可以使用官方提供的切片器去生产各种各样的 playlist 索引文件,详见 媒体文件切片器

 

5. Distribution分布式部署
分布式系统是一个网络服务或者一个网络缓存系统,用于通过 HTTP 向客户端发送媒体文件和索引文件。
​不用自定义模块发送内容。通常仅仅需要很简单的网络配置即可使用。
​而且这种配置一般就是限制指定 .M38U 文件和 .ts 文件的 MIME 类型。详见 部署 HTTP Live Streaming

 

6. Client客户端部分
客户端开始时回去抓取 索引文件(.m3u8/.m3u),其中用URL来标记不同的流。
​索引文件可以指定可用媒体文件的位置,解密的密钥,以及任何可以切换的流。
​对于选中的流,客户端会有序的下载每一个可获得的文件。
​每一个文件都包含流中的连环碎片。一旦下载到足够量的数据,客户端会开始向用户展示重新装配好的媒体资源。
客户端负责抓取任何解密密钥,认证或者展示一个用于认证的界面,之后再解密需要的文件。
这个过程会一直持续知道出现 结束标记 #EXT-X-ENDLIST
。如果结束标记不出现,该索引就是用于持续广播的。客户端会定期的加载一些新的索引文件。
​客户端会从新更新的索引文件中去查找加密密钥并且将关联的URL加入到请求队列中去。

 

三、会话模式

通常包含 Live  VOD (点播)两种:

1.点播VOD

特点就是可以获取到一个静态的索引文件,其中那个包含一套完整的资源文件地址。

这种模式允许客户端访问全部节目。
VOD点播拥有先进的下载技术,包括加密认证技术和动态切换文件传输速率的功能(通常用于不同分辨率视频之间的切换)。

 

2.Live 会话:

就是实时事件的录制展示。它的索引文件一直处于动态变化的,你需要不断的更新索引文件 playlist 然后移除旧的索引文件。

 

3.LiveVOD

这种类型通过向索引文件添加媒体地址可以很容易的转化为VOD类型。

在转化时不要移除原来旧的源,而是通过添加一个 #ET-X-ENDLIST
标记来终止实时事件。

转化时如果你的索引文件中包含 EXT-X-PLAYLIST-TYPE标签,你需要将值从 EVENT改为 VOD

 

四、协议抓取分析

4.1HLS协议规定:

视频的封装格式是TS

视频的编码格式为H264,音频编码格式为MP3AAC或者AC-3

除了TS视频文件本身,还定义了用来控制播放的m3u8文件(文本文件)。

 

4.2主索引 :

直播源 : http://dlhls.cdn.zhanqi.tv/zqlive/30647_JIjP2.m3u8

 

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-STREAM-INF:PROGRAM-ID=1,PUBLISHEDTIME=1462118775,CURRENTTIME=1462155858,BANDWIDTH=400000,RESOLUTION=854x480

30647_JIjP2_400/index.m3u8?Dnion_vsnae=30647_JIjP2

#EXT-X-STREAM-INF:PROGRAM-ID=1,PUBLISHEDTIME=1462118776,CURRENTTIME=1462155858,BANDWIDTH=700000,RESOLUTION=1280x720

30647_JIjP2_700/index.m3u8?Dnion_vsnae=30647_JIjP2

#EXT-X-STREAM-INF:PROGRAM-ID=1,PUBLISHEDTIME=1462118775,CURRENTTIME=1462155858,BANDWIDTH=1024000,RESOLUTION=1280x720

30647_JIjP2_1024/index.m3u8?Dnion_vsnae=30647_JIjP2

 

每一个标签的格式属性作用,请参考这里(http://tools.ietf.org/html/draft-pantos-http-live-streaming)

 

1.

#EXTM3U
每个M3U文件第一行必须是这个tag,请标示作用

 

2.

#EXT-X-VERSION
用以标示协议版本。(到我写这篇文章为止,HLS协议已经经历了19个版本了,既然这里是3, 那么这里用的就是HLS协议第三个版本)此标签只能有01个,不写代表使用版本1

 

3.

#EXT-X-STREAM-INF
#EXT-X-STREAM-INF
的格式 :
#EXT-X-STREAM-INF : [attribute=value][,attribute=value]*
标签的属性列表中直接指明当前流是VIDEO还是AUDIO
属性 :

BANDWIDTH 指定码率

PROGRAM-ID 唯一ID (这个属性在后面的协议版本废除了)

CODECS 指定流的编码类型

 

#EXT-X-MEDIA-SEQUENCE:1462118775 每一个media URI  PlayList中只有唯一的序号,相邻之间序号+1, 
一个media URI并不是必须要包含的,如果没有,默认为0

 

如果你的视频具备流切换功能,处于不同的带宽、不同的网速播放不同清晰度的视频流,
​这样只能的流切换可以保证用户感觉到非常流畅的观影体验,同时不同的设备也可以作为选择的条件,
​比如视网膜屏可以再网速良好的情况下播放清晰度更高的视频流。

这种功能的实现在于,索引文件的特殊结构
HLS协议全解_第3张图片

图片来源于苹果官网

主索引文件和子索引文件都是.M3U8playlist

主索引文件只需下载一次,但对于直播节目子索引文件定期重新加载。

客户端可能会在任何时候改变到备用流,所有的切换都应该使用相同的音频文件

这一套不同速率的视频都是有工具生成的
使用variantplaylistcreator工具并且为 mediafilesegmenter
或者 mediastreamsegmenter
指定 -generate-variant-playlist 选项,详情参考 下载工具

 

4.3 子索引 :

根据上面的主索引文件,这里我选择了,1024, 码率为1024000的数据源URL拼接一下得到下面的URL
http://dlhls.cdn.zhanqi.tv/zqlive/30647_JIjP2_1024/index.m3u8?Dnion_vsnae=30647_JIjP2

结果 :

 

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-MEDIA-SEQUENCE:5647

#EXT-X-TARGETDURATION:10

#EXTINF:9.560,

1462167932532_1462167932532.ts?Dnion_vsnae=30647_JIjP2

#EXTINF:6.520,

1462167942133_1462167942133.ts?Dnion_vsnae=30647_JIjP2

#EXTINF:9.960,

1462167948685_1462167948685.ts?Dnion_vsnae=30647_JIjP2

 

传说已久的.ts文件已经看到这些就是视频数据源文件,解释一下标签的作用

 

1.

#EXT-X-MEDIA-SEQUENCE
每一个media URI  PlayList中只有唯一的序号,相邻之间序号+1
(
上面那个URL, 不断请求的过程中能不断获取子索引每一次获取下来的都能发现EXT-X-MEDIA-SEQUENCE会不断增大)

 

2.

#EXT-X-TARGETDURATION:10
每一份媒体文件的时间以秒为单位这里是10秒一份

 

3.

#EXTINF 
格式 #EXTINF ,<br></span>每一份媒体文件的详细信息<span>, duration : </span>媒体持续时间<span>, </span>应该四舍五入为整数<span>,</span>上面的例子<span>,9.560</span>就是这一份媒体文件的持续时间<span><br> title : 1462167932532_1462167932532.ts?Dnion_vsnae=30647_JIjP2</span>这个是这一份媒体文件的<span>URL</span>地址<span>,</span></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1275222701622968320"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(流媒体:HLS专项)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835493753557708800.htm" title="每日算法&面试题,大厂特训二十八天——第二十天(树)" target="_blank">每日算法&面试题,大厂特训二十八天——第二十天(树)</a> <span class="text-muted">肥学</span> <a class="tag" taget="_blank" href="/search/%E2%9A%A1%E7%AE%97%E6%B3%95%E9%A2%98%E2%9A%A1%E9%9D%A2%E8%AF%95%E9%A2%98%E6%AF%8F%E6%97%A5%E7%B2%BE%E8%BF%9B/1.htm">⚡算法题⚡面试题每日精进</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>目录标题导读算法特训二十八天面试题点击直接资料领取导读肥友们为了更好的去帮助新同学适应算法和面试题,最近我们开始进行专项突击一步一步来。上一期我们完成了动态规划二十一天现在我们进行下一项对各类算法进行二十八天的一个小总结。还在等什么快来一起肥学进行二十八天挑战吧!!特别介绍小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章</div> </li> <li><a href="/article/1835355667586707456.htm" title="安全演练有保障,专项督查促改进——记公道中学校园安全(化学实验)系列活动" target="_blank">安全演练有保障,专项督查促改进——记公道中学校园安全(化学实验)系列活动</a> <span class="text-muted">公中盛传云</span> <div>近期,公道中学为了全面贯彻落实“预防为主,安全第一,综合治理”的安全工作方针,学校按照安全工作方针的要求,通过多种途径开展了以“预防演练为主,人防物防技防相结合”的主题的安全教育系列活动。11月8日,在学校校务会议上,学校党总支书记李兆兵强调,学校必须采取有力措施,不断增强教师综治安全防范意识,落实学校安全工作责任制,切实保障教师和学生的安全坚决杜绝意外事故的发生,确保校园平安稳定、教育教学工作顺</div> </li> <li><a href="/article/1835354128142921728.htm" title="讲担当促作为抓落实,持之以恒纠“四风”树新风" target="_blank">讲担当促作为抓落实,持之以恒纠“四风”树新风</a> <span class="text-muted">asdfdy</span> <div>讲担当促作为抓落实,持之以恒纠“四风”树新风习近平总书记在十九届中央纪委五次全会上发表重要讲话时强调,要毫不松懈纠治“四风”,坚决防止形式主义、官僚主义滋生蔓延。结合深入治理形式主义官僚主义不担当不作为问题专项行动和党史学习教育,纪检监察干部要把纠“四风”和树新风紧密结合起来,既坚决纠治“四风”顽疾,又大力发扬对党忠诚、实事求是、艰苦奋斗、清正廉洁等党的光荣传统和优良作风。一是要深入学习贯彻习近平</div> </li> <li><a href="/article/1835232449030877184.htm" title="校车安全管理工作情况汇报" target="_blank">校车安全管理工作情况汇报</a> <span class="text-muted">mayooly</span> <div>近年来,在省、市校车办和县政府的正确领导下,在相关部门的大力支持下,我县认真落实《校车安全管理条例》、《湖北省校车管理办法》和《关于在全市推行校车公司化改革的意见》(黄政办发[2016]54号)要求,构建“政府主导、属地管理、市场运作、公司运营、部门监管、财政补贴”校车运营管理模式,规范校车安全管理,强化领导落实责任,扎实开展校车安全专项督查治理工作,全县校车安全管理工作无重大责任事故发生,确保了</div> </li> <li><a href="/article/1835210310995243008.htm" title="FPGA器件在线配置方法概述" target="_blank">FPGA器件在线配置方法概述</a> <span class="text-muted">fpga和matlab</span> <a class="tag" taget="_blank" href="/search/FPGA/1.htm">FPGA</a><a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a><a class="tag" taget="_blank" href="/search/fpga%E5%BC%80%E5%8F%91/1.htm">fpga开发</a><a class="tag" taget="_blank" href="/search/FPGA/1.htm">FPGA</a><a class="tag" taget="_blank" href="/search/%E5%9C%A8%E7%BA%BF%E9%85%8D%E7%BD%AE/1.htm">在线配置</a> <div>目录1.配置电路结构和原理2.ICR控制电路软件3.几种常见的FPGA在线配置方法3.1动态部分重配置(PartialReconfiguration,PR)3.2在系统编程(In-SystemProgramming,ISP)3.3多比特流配置(Multi-BitstreamConfiguration)3.4远程更新与配置3.5使用OpenCL或HLS工具FPGA(Field-Programmabl</div> </li> <li><a href="/article/1834944342960205824.htm" title="有点困" target="_blank">有点困</a> <span class="text-muted">有柳盈屋</span> <div>2021.6.24,周四早晨4:55就醒来了,索性早点起床,测量完血压,早点出去锻炼。直接完成万步有约。收拾停当,未参加机关学习,直接开车去县委五楼小会议室参加护航党的百年华诞维护政治安全专项会议,姚芳青主持,王伟刚传达中央省市委宣传部有关会议精神,许树峰讲话。会后开车去红旗超市购小花生米大黑豆绿豆35,门口设计太low,小小停车场就是个摆设,新开路中间还设了隔离带,完全的毫无人性,十分不方便。临</div> </li> <li><a href="/article/1834671335452798976.htm" title="第二督导组工作简报(2019年3月20日)" target="_blank">第二督导组工作简报(2019年3月20日)</a> <span class="text-muted">呼环整第二联系服务组</span> <div>今天,市环境综合整治第二督导组申平安副组长带领督导组一行赴西部责任区对辖区居民小区环境卫生情况进行专项督导。图片发自App督导组实地走访查看了蒙特维尔路易构城小区、金山花园小区,汇业路国际公寓小区,110国道北侧小瓦窑村,发现问题10余处,涉及小区内生活垃圾、装修垃圾清运不及时,小区居民堆放煤炭存有安全隐患,小区绿化带内存有白色垃圾,居民楼一层开设餐馆造成油渍污染,村落内生活垃圾未能及时清运等方面</div> </li> <li><a href="/article/1834610905078394880.htm" title="加倍挣扎" target="_blank">加倍挣扎</a> <span class="text-muted">Drluffyzpf</span> <div>我们可以发现以下常见的现象:优秀的有影响力的退役运动员,逐步过渡到教练员的身份,甚至创办自己的运动专项学校、体育场馆等进一步传播该项运动很多各专业的精英在积累部分个人财富(第一桶金)后,选择了进入投资界,扩张资产的同时孵化有潜力的公司、项目,推动世界各领域专业发展在互联网连接一切的时代,越来越多的人通过打磨个人品牌,获得强大的个人影响力无论你是否承认,这个世界以越来越快的速度迭代,目前仍以指数增长</div> </li> <li><a href="/article/1834330894899441664.htm" title="2018-10-20" target="_blank">2018-10-20</a> <span class="text-muted">染雨辰</span> <div>今天很忙一天从早上到晚上一直都有车排队一辆接一辆每一辆都认真检查抓住几个专项去检查一直忙到晚上五点多成果方面很丰富,时间很充实</div> </li> <li><a href="/article/1834282012509302784.htm" title="消防安全很重要" target="_blank">消防安全很重要</a> <span class="text-muted">悦纳生活</span> <div>今天市消防队教官到我校给大家进行了消防安全知识专项讲座。听完讲座让人受益匪浅。原来,生活中有很多我们经常做,并且已经习以为常的事情其实都存在着安全隐患。比如有的人使用液化气炒菜,感觉气快用完时,会摇晃液化气罐,让液化气从罐底升上来,以便把菜炒完。这样做就存在着巨大的安全隐患,很容易让液化气罐子发生爆炸,危险一旦发生,后果不堪设想。通过学习我知道了在所有的电器中,电冰箱是最容易起火的。因为家里的电冰</div> </li> <li><a href="/article/1833953864689217536.htm" title="OKR如何帮助我们创造奇迹" target="_blank">OKR如何帮助我们创造奇迹</a> <span class="text-muted">jerome_langogo</span> <div>使用OKR已经有一段时间了,基本读过所有关于OKR的书,也参加过一些OKR的专项分享沙龙,几乎每次都会感觉到自己茅塞顿开了,然后兴致冲冲的将OKR投入实际工作中使用,却被现实一次又一次的打脸,才发现自己的那个茅塞其实并没有被打开。但是OKR却不能脱离实践,换句话说,这一次次的失败,都是必须要去经历的,只有在团队一次次的磨合中,才能找到最适合团队的凝聚点。而在实践的过程中,我觉得有一些问题是需要持续</div> </li> <li><a href="/article/1833867766512316416.htm" title="[风险][基础资产][融资租赁]" target="_blank">[风险][基础资产][融资租赁]</a> <span class="text-muted">金角大王学ABS</span> <div>一、物权未转移1.1风险描述在本专项计划设立日,{原始权益人}向计划管理人出售其所拥有的部分特定租赁合同项下的债权请求权和其他权利及其相关的附属担保权益。由于基础资产涉及的租赁物件的所有权并未转移给专项计划,因而根据律师出具的法律意见,在专项计划存续期间,若发生{原始权益人}丧失清偿能力、破产等情形,则基础资产的回收将会受到不利影响。1.2控制|缓释措施1、根据本次交易安排,当发生任一权利完善事件</div> </li> <li><a href="/article/1833738291426455552.htm" title="调研App里的WebDAV功能@FE File Explorer 文件管理器(二)" target="_blank">调研App里的WebDAV功能@FE File Explorer 文件管理器(二)</a> <span class="text-muted">jaminezhong</span> <div>今天我又淘到一款特容易链接WebDAV的软件:FEFileExplorer我觉得它最大好处是在Mac版电脑、Android、iOS上,一个全功能的文件上管理app。而且还可以在您的iOS、安卓和Mac电脑上使用流媒体方式播放网络共享、NAS里面的视频和音乐。FEFileExplorerPro+穿越派=个人私有云需要穿越派的,在这里下:https://www.huluer.com/usercente</div> </li> <li><a href="/article/1833569302553391104.htm" title="推荐项目:Monibuca(m7s)—— 开源直播服务器框架的明日之星" target="_blank">推荐项目:Monibuca(m7s)—— 开源直播服务器框架的明日之星</a> <span class="text-muted">陶真蔷Scott</span> <div>推荐项目:Monibuca(m7s)——开源直播服务器框架的明日之星monibucaMonibucaisaModularized,ExtensibleframeworkforbuildingStreamingServer项目地址:https://gitcode.com/gh_mirrors/mo/monibuca随着在线视频和流媒体服务的日益普及,高质量且灵活的直播服务器框架成为了开发者眼中的瑰宝</div> </li> <li><a href="/article/1833390525701517312.htm" title="使用flv.js + websokect播放rtsp格式视频流" target="_blank">使用flv.js + websokect播放rtsp格式视频流</a> <span class="text-muted">音视频开发老马</span> <a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">流媒体服务器</a><a class="tag" taget="_blank" href="/search/Android%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91/1.htm">Android音视频开发</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91/1.htm">音视频开发</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/flv/1.htm">flv</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">流媒体服务器</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91/1.htm">音视频开发</a> <div>1.问题背景在最近的项目中,涉及到海康接入的视频播放的问题,海康这边获取到的视频流是rtsp格式,web端目前没有直接可以播放的组件,于是最开始是后端处理了视频流,返回hls格式的m3u8地址,这样用videojs插件就可以播放了,但是问题就是处理了的m3u8地址播放效果非常差,第一次加载时间较长,且播放过程中很卡,尤其是项目的界面做的是视频监控墙,不止一个视频,导致没办法看了。想着最好的方式还是</div> </li> <li><a href="/article/1833377741844606976.htm" title="从吉利星越车名的发布,看吉利新车宣传的套路" target="_blank">从吉利星越车名的发布,看吉利新车宣传的套路</a> <span class="text-muted">wakechy</span> <div>这两天,吉利代号为FY11的车型终于公布了正式的中文名称——星越,车型外观采用类似宝马X6式的溜背设计,很是吸睛,令人相信会是吉利又一辆走量的车型。今天就借星越中文名发布这个契机,聊聊吉利这几年的营销宣传方式,或者说营销宣传套路。首先,在新车上市前一年的某个时刻,你会发现微信公众号,今日头条等平台,无论是自媒体账号,还是主流媒体账号,忽然之间出现了吉利某款车型的概念图。比如现在这款星越,早在201</div> </li> <li><a href="/article/1833308825847951360.htm" title="2022-11-10" target="_blank">2022-11-10</a> <span class="text-muted">我的yzj</span> <div>领导在会上分析了一下成绩,我们班数学成绩优秀率最高,但是及格率最低。我们班有十个学生不及格,这个比重还是比较大的,自己心里也有压力,总觉得是自己没有教好他们,是自己的原因。为什么其他班级没有这么多?给这十位学生每天也布置任务,根据自己的薄弱的知识点,进行专项练习,每天练习五个小题。我觉得是这是有意义的事,但是今天课代表说,他们没有交全,十个人只有四个同学写了。我就不理解了,成绩不好就算了,还不做题</div> </li> <li><a href="/article/1833215304533110784.htm" title="which Linux" target="_blank">which Linux</a> <span class="text-muted">Caspian Wren</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>在Linux系统中,which命令用于定位并显示指定命令的完整路径。它会搜索系统的PATH变量中指定的目录,找到并输出第一个匹配的命令的完整路径。这对于确定在系统中执行哪个特定的命令很有用。例如,如果您想知道ls命令的完整路径,可以在终端中输入:whichls它将输出类似于/bin/ls的路径。which命令通常用于验证系统中是否安装了某个特定的命令,并且在脚本中查找命令的位置。</div> </li> <li><a href="/article/1833125384351215616.htm" title="视频的容器格式和编码格式详解" target="_blank">视频的容器格式和编码格式详解</a> <span class="text-muted">半桶水专家</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>视频的容器格式和编码格式是视频文件的两个核心概念,它们相互关联但具有不同的功能。以下是详细的解释:1.容器格式(ContainerFormat)容器格式,又称封装格式,指的是视频文件的外壳或容器,它用于封装视频、音频、字幕、元数据(如标题、章节信息等)等各种流媒体内容。容器格式本质上决定了文件的扩展名。常见的容器格式:MP4:支持多种编解码器,广泛用于互联网和移动设备。MKV:支持多轨音频、字幕,</div> </li> <li><a href="/article/1833011783334457344.htm" title="Android平台轻量级RTSP服务之GStreamer还是SmartRtspServer" target="_blank">Android平台轻量级RTSP服务之GStreamer还是SmartRtspServer</a> <span class="text-muted">音视频牛哥</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E7%89%9B%E7%9B%B4%E6%92%ADSDK/1.htm">大牛直播SDK</a><a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/RTSP%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">RTSP服务器</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%8D%93rtsp%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">安卓rtsp服务器</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/rtsp%E6%9C%8D%E5%8A%A1/1.htm">rtsp服务</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%8D%93%E5%90%AF%E5%8A%A8rtsp%E6%9C%8D%E5%8A%A1/1.htm">安卓启动rtsp服务</a><a class="tag" taget="_blank" href="/search/android%E7%BD%91%E7%BB%9C%E6%91%84%E5%83%8F%E5%A4%B4/1.htm">android网络摄像头</a><a class="tag" taget="_blank" href="/search/android%E5%86%85%E7%BD%91%E9%87%87%E9%9B%86%E6%91%84%E5%83%8F%E5%A4%B4/1.htm">android内网采集摄像头</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E7%89%9B%E7%9B%B4%E6%92%ADSDK/1.htm">大牛直播SDK</a> <div>技术背景Android上启动一个轻量级RTSP服务,让Android终端像网络摄像头一样提供个外部可供RTSP拉流的服务,在内网小并发又不希望部署单独流媒体服务的场景下非常适用,在Android终端实现这样的流媒体服务,决定了,只能是轻量级的服务。可以通过集成第三方库或编写自定义的RTSP服务器代码来实现这一功能。今天我们介绍两种方案,一种是GStreamer,另外一种,大牛直播SDK的Smart</div> </li> <li><a href="/article/1832875630803382272.htm" title="ios流媒体直播整个框架介绍(HLS、RTSP)" target="_blank">ios流媒体直播整个框架介绍(HLS、RTSP)</a> <span class="text-muted">少一些浮躁__</span> <a class="tag" taget="_blank" href="/search/IOS/1.htm">IOS</a> <div>一、HTTP(WebService)基于HTTP的渐进下载ProgressiveDownload流媒体播放仅是在完全下载后再播放模式基础上做了一些小的改进。与下载播放模式中必须等待整个文件下载完毕后才能开始播放不同,渐进下载客户端在开始播放之前仅需等待一段较短的时间用于下载和缓冲该媒体文件最前面的一部分数据,之后便可以一边下载一边播放。在正式开始播放之前的这一小段缓冲应使得后续即使在网络较为拥塞的</div> </li> <li><a href="/article/1832841469266849792.htm" title="MediaStream 的媒体流对象 (stream) 和流媒体轨道 (track) 详解" target="_blank">MediaStream 的媒体流对象 (stream) 和流媒体轨道 (track) 详解</a> <span class="text-muted">Wu Youlu</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>navigator.mediaDevices.getUserMedia和MediaStream是实时音视频处理的重要API。通过这些API,可以从摄像头、麦克风或其他设备捕获音视频流,应用于视频通话、录制等场景。本文将介绍navigator.mediaDevices.getUserMedia的参数配置、MediaStream的传参、属性和方法,配合详细的代码示例,特别是如何动态添加和移除音视频轨道</div> </li> <li><a href="/article/1832620615979331584.htm" title="微信优惠券群主怎么赚钱,如何分享商品到微信群赚钱?" target="_blank">微信优惠券群主怎么赚钱,如何分享商品到微信群赚钱?</a> <span class="text-muted">小小编007</span> <div>你是不是也或多或少被邀请到这样的微信群,群主每天都会不间断在群内分享淘宝商品优惠券。那么这种模式群主是怎么赚钱的呢,一天能赚多少?下面我们来详细解说一下。群主分享的商品优惠券都是商家专项设置的隐藏优惠券,旨在让群主等这些推广者帮助商家提高商品销量和商品排名。以便更多的消费者可以在淘宝app搜索到自己的商品来获取更多的利润。只要有群友复制了群主口令,到淘宝app下单,那么群主每单就可以获得商家的返佣</div> </li> <li><a href="/article/1832593615667425280.htm" title="第11周作业---HLS编程环境入门" target="_blank">第11周作业---HLS编程环境入门</a> <span class="text-muted">pss_runner</span> <div>目录HLS概念HLS是什么HLS与VHDL/Verilog有什么关系?HLS技术问题HLS开发步骤环境搭建编写test.cpp文件预编译cpp文件HLS概念HLS是什么高层次综合(High-levelSynthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++、SystemC等,通常有着较高的抽象度,并且往往不具有时</div> </li> <li><a href="/article/1832453645984165888.htm" title="2021-05-01瑜伽带来的变化" target="_blank">2021-05-01瑜伽带来的变化</a> <span class="text-muted">豆芽阅读成长</span> <div>3月9日开启了我的瑜伽之路,感恩推荐我深耕瑜伽的华伟兄弟,我毫不犹豫选了个最贵的瑜伽教练班,而没有选择大课,也没有选择专项,因为瑜伽教练班能让你知道这个动作背后的本质,为什么要这么做,这么做是什么,具体该如何操作,哪里有空间。既来之则安之,既然开启,那就好好去做,“因上努力,果上随缘”,一个半月时间以来,感受了自己的一些变化,可能这些变化并非仅仅是瑜伽,还有其他内外增援的缘故,但是不管如何自己在成</div> </li> <li><a href="/article/1832274655365394432.htm" title="Kafka,构建TB级异步消息系统" target="_blank">Kafka,构建TB级异步消息系统</a> <span class="text-muted">Fern977</span> <a class="tag" taget="_blank" href="/search/%E7%89%9B%E5%AE%A2%E8%AE%BA%E5%9D%9B%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">牛客论坛学习笔记</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>1.阻塞队列BlockingQueue解决线程通信的问题阻塞方法:put、take。生产者消费者模式生产者:产生数据的线程消费者:使用数据的线程实现类ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueue、SynchronousQueue、DelayQueue等2.Kafka入门Kafka简介Kafka是一个分布式的流媒体平台应用:消息</div> </li> <li><a href="/article/1832270625805266944.htm" title="仿论坛项目--Kafka,构建TB级异步消息系统" target="_blank">仿论坛项目--Kafka,构建TB级异步消息系统</a> <span class="text-muted">HUT_Tyne265</span> <a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>阻塞队列•BlockingQueue解决线程通信的问题。阻塞方法:put、take。•生产者消费者模式生产者:产生数据的线程。消费者:使用数据的线程。•实现类ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueue、SynchronousQueue、DelayQueue等。Kafka入门•Kafka简介Kafka是一个分布式的流媒体平台。</div> </li> <li><a href="/article/1832179346341720064.htm" title="25万人,30个亿,割韭菜,割到了体育界" target="_blank">25万人,30个亿,割韭菜,割到了体育界</a> <span class="text-muted">黑熊爱折腾</span> <div>黑熊/文0125万人被骗30个亿。其实在今年整个投资市场来说,并不是什么特别大的案子。30亿的涉案资金,在今年的网贷爆雷事件中,已经没有什么新闻价值了。恐怕只有上百亿的涉案资金量,主流媒体才会提起一点点的兴趣吧。不过,今天,我之所以想写一篇,关于25万人被骗30个亿的文章。原因就在于,这次,这25万被割韭菜的人,竟全都是体育界的人,而我自己,差点就变成了众多受害者之一。02之前一直关注我的朋友知道</div> </li> <li><a href="/article/1832070066338885632.htm" title="FFmpeg任意文件读取漏洞分析" target="_blank">FFmpeg任意文件读取漏洞分析</a> <span class="text-muted">音视频开发老马</span> <a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>背景介绍FFmpeg是一套目前非常流行的可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。目前有非常多的视音频软件或是视频网站、手机APP都采用了这个库,但是这个库历史上曝出的漏洞也非常之多。这次的漏洞是利用了ffmpeg可以处理HLS播放列表的功能,在AVI文件中的GAB2字幕块中嵌入了一个HLS文件,然后提供给ffmpeg进行转</div> </li> <li><a href="/article/1832032119229083648.htm" title="ARM 和 X86架构集合" target="_blank">ARM 和 X86架构集合</a> <span class="text-muted">m0_47097645</span> <a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>CPU是底层硬件基础设施中的核心,当前主流芯片架构为ARM和X86,均为国外主导,芯片国产化率较低。“十五”期间,国家启动发展国产CPU的泰山计划,863计划也提出自主研发CPU。2006年核高基专项启动,国产CPU领域迎来新一轮的国家支持,鲲鹏、飞腾、龙芯、兆芯、海光、申威等一批优质国产CPU厂商快速崛起。部分来自“</div> </li> <li><a href="/article/26.htm" title="设计模式介绍" target="_blank">设计模式介绍</a> <span class="text-muted">tntxia</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>设计模式来源于土木工程师 克里斯托弗 亚历山大(http://en.wikipedia.org/wiki/Christopher_Alexander)的早期作品。他经常发表一些作品,内容是总结他在解决设计问题方面的经验,以及这些知识与城市和建筑模式之间有何关联。有一天,亚历山大突然发现,重复使用这些模式可以让某些设计构造取得我们期望的最佳效果。 亚历山大与萨拉-石川佳纯和穆雷 西乐弗斯坦合作</div> </li> <li><a href="/article/153.htm" title="android高级组件使用(一)" target="_blank">android高级组件使用(一)</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/RatingBar/1.htm">RatingBar</a><a class="tag" taget="_blank" href="/search/Spinner/1.htm">Spinner</a> <div>1、自动完成文本框(AutoCompleteTextView) AutoCompleteTextView从EditText派生出来,实际上也是一个文本编辑框,但它比普通编辑框多一个功能:当用户输入一个字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView按用户选择自动填写该文本框。 使用AutoCompleteTex</div> </li> <li><a href="/article/280.htm" title="[网络与通讯]路由器市场大有潜力可挖掘" target="_blank">[网络与通讯]路由器市场大有潜力可挖掘</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>          如果国内的电子厂商和计算机设备厂商觉得手机市场已经有点饱和了,那么可以考虑一下交换机和路由器市场的进入问题.....        这方面的技术和知识,目前处在一个开放型的状态,有利于各类小型电子企业进入  &nbs</div> </li> <li><a href="/article/407.htm" title="自写简单Redis内存统计shell" target="_blank">自写简单Redis内存统计shell</a> <span class="text-muted">商人shang</span> <a class="tag" taget="_blank" href="/search/Linux+shell/1.htm">Linux shell</a><a class="tag" taget="_blank" href="/search/%E7%BB%9F%E8%AE%A1Redis%E5%86%85%E5%AD%98/1.htm">统计Redis内存</a> <div>#!/bin/bash address="192.168.150.128:6666,192.168.150.128:6666" hosts=(${address//,/ }) sfile="staticts.log" for hostitem in ${hosts[@]} do ipport=(${hostitem</div> </li> <li><a href="/article/534.htm" title="单例模式(饿汉 vs懒汉)" target="_blank">单例模式(饿汉 vs懒汉)</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a> <div>package 单例模式; /* * 应用场景:保证在整个应用之中某个对象的实例只有一个 * 单例模式种的《 懒汉模式》 * */ public class Singleton { //01 将构造方法私有化,外界就无法用new Singleton()的方式获得实例 private Singleton(){}; //02 申明类得唯一实例 priva</div> </li> <li><a href="/article/661.htm" title="springMvc json支持" target="_blank">springMvc json支持</a> <span class="text-muted">杨白白</span> <a class="tag" taget="_blank" href="/search/json+springmvc/1.htm">json springmvc</a> <div>1.Spring mvc处理json需要使用jackson的类库,因此需要先引入jackson包 2在spring mvc中解析输入为json格式的数据:使用@RequestBody来设置输入 @RequestMapping("helloJson") public @ResponseBody JsonTest helloJson() { </div> </li> <li><a href="/article/788.htm" title="android播放,掃描添加本地音頻文件" target="_blank">android播放,掃描添加本地音頻文件</a> <span class="text-muted">小桔子</span> <div>        最近幾乎沒有什麽事情,繼續鼓搗我的小東西。想在項目中加入一個簡易的音樂播放器功能,就像華為p6桌面上那麼大小的音樂播放器。用過天天動聽或者QQ音樂播放器的人都知道,可已通過本地掃描添加歌曲。不知道他們是怎麼實現的,我覺得應該掃描設備上的所有文件,過濾出音頻文件,每個文件實例化為一個實體,記錄文件名、路徑、歌手、類型、大小等信息。具體算法思想,</div> </li> <li><a href="/article/915.htm" title="oracle常用命令" target="_blank">oracle常用命令</a> <span class="text-muted">aichenglong</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/dba/1.htm">dba</a><a class="tag" taget="_blank" href="/search/%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">常用命令</a> <div>1 创建临时表空间 create temporary tablespace user_temp  tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m  autoextend on  next 50m maxsize 20480m  extent management local</div> </li> <li><a href="/article/1042.htm" title="25个Eclipse插件" target="_blank">25个Eclipse插件</a> <span class="text-muted">AILIKES</span> <a class="tag" taget="_blank" href="/search/eclipse%E6%8F%92%E4%BB%B6/1.htm">eclipse插件</a> <div>提高代码质量的插件1. FindBugsFindBugs可以帮你找到Java代码中的bug,它使用Lesser GNU Public License的自由软件许可。2. CheckstyleCheckstyle插件可以集成到Eclipse IDE中去,能确保Java代码遵循标准代码样式。3. ECLemmaECLemma是一款拥有Eclipse Public License许可的免费工具,它提供了</div> </li> <li><a href="/article/1169.htm" title="Spring MVC拦截器+注解方式实现防止表单重复提交" target="_blank">Spring MVC拦截器+注解方式实现防止表单重复提交</a> <span class="text-muted">baalwolf</span> <a class="tag" taget="_blank" href="/search/spring+mvc/1.htm">spring mvc</a> <div>原理:在新建页面中Session保存token随机码,当保存时验证,通过后删除,当再次点击保存时由于服务器端的Session中已经不存在了,所有无法验证通过。   1.新建注解:   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 </div> </li> <li><a href="/article/1296.htm" title="《Javascript高级程序设计(第3版)》闭包理解" target="_blank">《Javascript高级程序设计(第3版)》闭包理解</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>“闭包是指有权访问另一个函数作用域中的变量的函数。”--《Javascript高级程序设计(第3版)》         看以下代码: <script type="text/javascript"> function outer() { var i = 10; return f</div> </li> <li><a href="/article/1423.htm" title="AngularJS Module类的方法" target="_blank">AngularJS Module类的方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/Module/1.htm">Module</a> <div>        AngularJS中的Module类负责定义应用如何启动,它还可以通过声明的方式定义应用中的各个片段。我们来看看它是如何实现这些功能的。 一.Main方法在哪里         如果你是从Java或者Python编程语言转过来的,那么你可能很想知道AngularJS里面的main方法在哪里?这个把所</div> </li> <li><a href="/article/1550.htm" title="[Maven学习笔记七]Maven插件和目标" target="_blank">[Maven学习笔记七]Maven插件和目标</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/maven%E6%8F%92%E4%BB%B6/1.htm">maven插件</a> <div>插件(plugin)和目标(goal) Maven,就其本质而言,是一个插件执行框架,Maven的每个目标的执行逻辑都是由插件来完成的,一个插件可以有1个或者几个目标,比如maven-compiler-plugin插件包含compile和testCompile,即maven-compiler-plugin提供了源代码编译和测试源代码编译的两个目标   使用插件和目标使得我们可以干预</div> </li> <li><a href="/article/1677.htm" title="【Hadoop八】Yarn的资源调度策略" target="_blank">【Hadoop八】Yarn的资源调度策略</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>1. Hadoop的三种调度策略 Hadoop提供了3中作业调用的策略, FIFO Scheduler Fair Scheduler Capacity Scheduler 以上三种调度算法,在Hadoop MR1中就引入了,在Yarn中对它们进行了改进和完善.Fair和Capacity Scheduler用于多用户共享的资源调度   2. 多用户资源共享的调度 </div> </li> <li><a href="/article/1804.htm" title="Nginx使用Linux内存加速静态文件访问" target="_blank">Nginx使用Linux内存加速静态文件访问</a> <span class="text-muted">ronin47</span> <div>Nginx是一个非常出色的静态资源web服务器。如果你嫌它还不够快,可以把放在磁盘中的文件,映射到内存中,减少高并发下的磁盘IO。 先做几个假设。nginx.conf中所配置站点的路径是/home/wwwroot/res,站点所对应文件原始存储路径:/opt/web/res shell脚本非常简单,思路就是拷贝资源文件到内存中,然后在把网站的静态文件链接指向到内存中即可。具体如下: </div> </li> <li><a href="/article/1931.htm" title="关于Unity3D中的Shader的知识" target="_blank">关于Unity3D中的Shader的知识</a> <span class="text-muted">brotherlamp</span> <a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a><a class="tag" taget="_blank" href="/search/unity%E8%B5%84%E6%96%99/1.htm">unity资料</a><a class="tag" taget="_blank" href="/search/unity%E6%95%99%E7%A8%8B/1.htm">unity教程</a><a class="tag" taget="_blank" href="/search/unity%E8%A7%86%E9%A2%91/1.htm">unity视频</a><a class="tag" taget="_blank" href="/search/unity%E8%87%AA%E5%AD%A6/1.htm">unity自学</a> <div>首先先解释下Unity3D的Shader,Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader还是使用标准的Cg/HLSL 编程语言编写的。因此Unity文档里面的Shader,都是指用ShaderLab编写的代码,然后我们来看下Unity3D自带的60多个S</div> </li> <li><a href="/article/2058.htm" title="CopyOnWriteArrayList vs ArrayList" target="_blank">CopyOnWriteArrayList vs ArrayList</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>package com.ljn.base; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** * 总述: * 1.ArrayListi不是线程安全的,CopyO</div> </li> <li><a href="/article/2185.htm" title="内存中栈和堆的区别" target="_blank">内存中栈和堆的区别</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98/1.htm">内存</a> <div> 1、内存分配方面:     堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。     栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中</div> </li> <li><a href="/article/2312.htm" title="回答一位网友对Scala的提问" target="_blank">回答一位网友对Scala的提问</a> <span class="text-muted">chenchao051</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a><a class="tag" taget="_blank" href="/search/map/1.htm">map</a> <div>本来准备在私信里直接回复了,但是发现不太方便,就简要回答在这里。 问题 写道 对于scala的简洁十分佩服,但又觉得比较晦涩,例如一例,Map("a" -> List(11,111)).flatMap(_._2),可否说下最后那个函数做了什么,真正在开发的时候也会如此简洁?谢谢    先回答一点,在实际使用中,Scala毫无疑问就是这么简单。</div> </li> <li><a href="/article/2439.htm" title="mysql 取每组前几条记录" target="_blank">mysql 取每组前几条记录</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E7%BB%84/1.htm">分组</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E5%A4%A7%E5%80%BC/1.htm">最大值</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E5%B0%8F%E5%80%BC/1.htm">最小值</a><a class="tag" taget="_blank" href="/search/%E6%AF%8F%E7%BB%84%E4%B8%89%E6%9D%A1%E8%AE%B0%E5%BD%95/1.htm">每组三条记录</a> <div>一、对分组的记录取前N条记录:例如:取每组的前3条最大的记录 1.用子查询: SELECT * FROM tableName a  WHERE 3> (SELECT COUNT(*) FROM  tableName b WHERE b.id=a.id AND b.cnt>a. cnt) ORDER BY a.id,a.account DE</div> </li> <li><a href="/article/2566.htm" title="HTTP深入浅出 http请求" target="_blank">HTTP深入浅出 http请求</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/http/1.htm">http</a> <div>  HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后We</div> </li> <li><a href="/article/2693.htm" title="判断MySQL记录是否存在方法比较" target="_blank">判断MySQL记录是否存在方法比较</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入。   我这里总结了判断记录是否存在的常用方法:   sql语句: select   count ( * )  from  tablename;   然后读取count(*)的值判断记录是否存在。对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来。</div> </li> <li><a href="/article/2820.htm" title="对HTML XML的一点认识" target="_blank">对HTML XML的一点认识</a> <span class="text-muted">e200702084</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div>感谢http://www.w3school.com.cn提供的资料 HTML 文档中的每个成分都是一个节点。 节点 根据 DOM,HTML 文档中的每个成分都是一个节点。 DOM 是这样规定的: 整个文档是一个文档节点 每个 HTML 标签是一个元素节点 包含在 HTML 元素中的文本是文本节点 每一个 HTML 属性是一个属性节点 注释属于注释节点 Node 层次 </div> </li> <li><a href="/article/2947.htm" title="jquery分页插件" target="_blank">jquery分页插件</a> <span class="text-muted">genaiwei</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E9%A1%B5/1.htm">分页</a><a class="tag" taget="_blank" href="/search/%E6%8F%92%E4%BB%B6/1.htm">插件</a> <div>//jquery页码控件// 创建一个闭包    (function($) {      // 插件的定义      $.fn.pageTool = function(options) {        var totalPa</div> </li> <li><a href="/article/3201.htm" title="Mybatis与Ibatis对照入门于学习" target="_blank">Mybatis与Ibatis对照入门于学习</a> <span class="text-muted">Josh_Persistence</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%88%AB/1.htm">区别</a><a class="tag" taget="_blank" href="/search/%E8%81%94%E7%B3%BB/1.htm">联系</a> <div>一、为什么使用IBatis/Mybatis         对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate、JPA 这样的一站式对象 / 关系映射(O/R Mapping)解决方案盛行之前,iBaits 基本是持久层框架的不二选择。即使在持久层框架层出不穷的今天,iBatis 凭借着易学易用、</div> </li> <li><a href="/article/3328.htm" title="C中怎样合理决定使用那种整数类型?" target="_blank">C中怎样合理决定使用那种整数类型?</a> <span class="text-muted">秋风扫落叶</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/1.htm">数据类型</a> <div>如果需要大数值(大于32767或小于32767), 使用long 型。 否则, 如果空间很重要 (如有大数组或很多结构), 使用 short 型。 除此之外, 就使用 int 型。 如果严格定义的溢出特征很重要而负值无关紧要, 或者你希望在操作二进制位和字节时避免符号扩展的问题, 请使用对应的无符号类型。 但是, 要注意在表达式中混用有符号和无符号值的情况。    &nbs</div> </li> <li><a href="/article/3455.htm" title="maven问题" target="_blank">maven问题</a> <span class="text-muted">zhb8015</span> <a class="tag" taget="_blank" href="/search/maven%E9%97%AE%E9%A2%98/1.htm">maven问题</a> <div>  问题1: Eclipse 中 新建maven项目 无法添加src/main/java 问题    eclipse创建maevn web项目,在选择maven_archetype_web原型后,默认只有src/main/resources这个Source Floder。     按照maven目录结构,添加src/main/ja</div> </li> <li><a href="/article/3582.htm" title="(二)androidpn-server tomcat版源码解析之--push消息处理" target="_blank">(二)androidpn-server tomcat版源码解析之--push消息处理</a> <span class="text-muted">spjich</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/androdipn/1.htm">androdipn</a><a class="tag" taget="_blank" href="/search/%E6%8E%A8%E9%80%81/1.htm">推送</a> <div>在 (一)androidpn-server tomcat版源码解析之--项目启动这篇中,已经描述了整个推送服务器的启动过程,并且把握到了消息的入口即XmppIoHandler这个类,今天我将继续往下分析下面的核心代码,主要分为3大块,链接创建,消息的发送,链接关闭。 先贴一段XmppIoHandler的部分代码 /** * Invoked from an I/O proc</div> </li> <li><a href="/article/3709.htm" title="用js中的formData类型解决ajax提交表单时文件不能被serialize方法序列化的问题" target="_blank">用js中的formData类型解决ajax提交表单时文件不能被serialize方法序列化的问题</a> <span class="text-muted">中华好儿孙</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6/1.htm">上传文件</a><a class="tag" taget="_blank" href="/search/FormData/1.htm">FormData</a> <div> var formData = new FormData($("#inputFileForm")[0]); $.ajax({ type:'post', url:webRoot+"/electronicContractUrl/webapp/uploadfile", data:formData, async: false, ca</div> </li> <li><a href="/article/3836.htm" title="mybatis常用jdbcType数据类型" target="_blank">mybatis常用jdbcType数据类型</a> <span class="text-muted">ysj5125094</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/mapper/1.htm">mapper</a><a class="tag" taget="_blank" href="/search/jdbcType/1.htm">jdbcType</a> <div>  MyBatis 通过包含的jdbcType 类型 BIT         FLOAT      CHAR          </div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>