HTTP Live Streaming (HLS) - 概念


http://www.jianshu.com/p/2ce402a485ca


先贴出一系列参考网站 :

  1. 苹果官方文档
  2. HLS-iOS视频播放服务架构深入探究
  3. HLS标准协议

流媒体协议RTMP,RTSP与HLS有什么不同?
  HLS (HTTP Live Streaming)
  Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。
  常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西,目前比较方便又好用的是用 HTTP 渐进下载方法。在这个中 apple 公司的 HTTP Live Streaming 是这个方面的代表。它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流.现在见到在桌面也有很多应用了,HTML5 是直接支持这个。
  但是HLS协议的小切片方式会生成大量的文件,存储或处理这些文件会造成大量资源浪费。如果要实现数天的时移,索引量将会是个巨额数字,并明显影响请求速度。因此,HLS协议对存储I/O要求相当苛刻。对此,也有公司提出了非常好的解决方案。
  新型点播服务器系统,独创了内存缓存数据实时切片技术,颠覆了这种传统实现方法,从根本上解决了大量切片的碎片问题,使得单台服务器的切片与打包能力不再是瓶颈。其基本原理如下:
  不将TS切片文件存到磁盘,而是存在内存当中,这种技术使得服务器的磁盘上面不再会有“数以吨计”的文件碎片,极大减少了磁盘的I/O次数,延长了服务器磁盘的使用寿命,极大提高了服务器运行的稳定性。同时,由于使用这种技术,使得终端请求数据时直接从服务器的内存中获取,极大提高了对终端数据请求的反应速度,优化了视频观看体验。
  RTSP协议,这应该是实时性最好的了,如果要想实时性要求很高,比如0.5s以内,这个是不错的选择。前阵子模仿spydroid写了个建议的rtsp 服务器,其实就是options,describe,setup,play,pause,teardown这几步了,这个协议用的最广泛,网上介绍也比较 多。要想真正深入了解rtsp协议,c++语言功底好的可以查看live555 。

概念解释 :

HLS是一套解决方案, 包含三个部分 :

HTTP Live Streaming (HLS) - 概念_第1张图片
苹果官方文档的配图

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

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

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


接下来将上面的图的每一块解释一下

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

在编码中涂,不要修改视频编码器的设置,比如视频大小或者编码解码器类型。如果避免不了,那修改动作必须发生在一个片段边界。并且需要早之后相连的片段上用 EXT-X-DISCONTINUITY进行标记。

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

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

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

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

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

索引文件(PlayLists)

通常由切片器附带生成,保存为 .m3u8格式,.m3u一般用于 MP3 音频的索引文件。 Note如果你的扩展名是.m3u,并且系统支持.mp3文件,那客户的软件可能要与典型的 MP3 playList 保持一致来完成 流网络音频的播放。

HTTP Live Streaming (HLS) - 概念_第2张图片
.m3u8 PlayLists文件

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

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

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


会话模式

通常包含 Live 和 VOD (点播)两种
点播VOD的特点就是可以获取到一个静态的索引文件,其中那个包含一套完整的资源文件地址。这种模式允许客户端访问全部节目。VOD点播拥有先进的下载技术,包括加密认证技术和动态切换文件传输速率的功能(通常用于不同分辨率视频之间的切换)。

Live 会话就是实时事件的录制展示。它的索引文件一直处于动态变化的,你需要不断的更新索引文件 playlist 然后移除旧的索引文件。这种类型通过向索引文件添加媒体地址可以很容易的转化为VOD类型。在转化时不要移除原来旧的源,而是通过添加一个 #ET-X-ENDLIST
标记来终止实时事件。转化时如果你的索引文件中包含 EXT-X-PLAYLIST-TYPE
标签,你需要将值从 EVENT
改为 VOD。


抓取分析

主索引 :

直播源 : 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

每一个标签的格式, 属性, 作用,请参考这里


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

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

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

  1. BANDWIDTH 指定码率
  2. PROGRAM-ID 唯一ID (这个属性在后面的协议版本废除了)
  3. CODECS 指定流的编码类型

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


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

这种功能的实现在于,索引文件的特殊结构

HTTP Live Streaming (HLS) - 概念_第3张图片
图片来源于苹果官网
  1. 主索引文件和子索引文件都是.M3U8的playlist
  2. 主索引文件只需下载一次,但对于直播节目子索引文件定期重新加载。
  3. 客户端可能会在任何时候改变到备用流,所有的切换都应该使用相同的音频文件
  4. 这一套不同速率的视频都是有工具生成的
    使用variantplaylistcreator工具并且为 mediafilesegmenter
    或者 mediastreamsegmenter
    指定 -generate-variant-playlist 选项,详情参考 下载工具

子索引 :

根据上面的主索引文件,这里我选择了,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文件已经看到, 这些就是视频数据源文件,解释一下标签的作用

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

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

#EXTINF 
格式 #EXTINF ,<br> 每一份媒体文件的详细信息, duration : 媒体持续时间, 应该四舍五入为整数,上面的例子,9.560就是这一份媒体文件的持续时间<br> title : 1462167932532_1462167932532.ts?Dnion_vsnae=30647_JIjP2这个是这一份媒体文件的URL地址,</p> <hr style="border-right:0px;border-bottom:0px;border-left:0px;border-top-style:solid;border-top-color:rgb(221,221,221);"> <h2 style="font-family:inherit;line-height:1.7;font-size:24px;"> 加密</h2> <p>加密部分以后再补充.</p> </div> <div class="show-foot"> <span class="iconfont ic-search-notebook"></span>  <span>Native proj</span> <div class="copyright" style="font-size:12px;line-height:1.7;color:rgb(155,155,155);"> © 著作权归作者所有 </div> <div class="modal-wrap" style="font-size:12px;line-height:1.7;"> 举报文章 </div> </div> </div> <div class="follow-detail" style="border:1px solid rgb(225,225,225);color:rgb(51,51,51);"> <div class="info" style="min-height:47px;"> <a href="http://img.e-com-net.com/image/info8/3aa1da16186d4f7ab9f79b698768f0da.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/3aa1da16186d4f7ab9f79b698768f0da.jpg" alt="HTTP Live Streaming (HLS) - 概念_第4张图片" style="border:1px solid rgb(221,221,221);vertical-align:middle;width:48px;;border:1px solid black;" width="144" height="144"></a> <span class="iconfont ic-follow"></span> <span style="margin-left:2px;">关注</span> travin <p style="color:rgb(150,150,150);">写了 33814 字,被 338 人关注,获得了 353 个喜欢</p> </div> <div class="signature" style="border-top:1px solid rgb(225,225,225);color:rgb(150,150,150);overflow:hidden;"> 作者 - 崔文龙 iOS / 前端攻城狮 http://www.travin.top/ 简单 · 谦卑 · 奋斗 </div> </div> <div class="support-author" style="border-bottom:1px solid rgb(240,240,240);text-align:center;clear:both;color:rgb(51,51,51);font-size:17px;"> <p style="min-height:24px;"> 如果你不愿意请我喝瓶水,那你可以关注一下我的文集,谢谢你拉 ^_^</p> </div> <br> <p></p> <p><br></p> <p><br></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1296114793626804224"></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/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/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/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/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/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/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/1830445099503415296.htm" title="HLS点播实现(H.264和AAC码流)" target="_blank">HLS点播实现(H.264和AAC码流)</a> <span class="text-muted">辉辉岁月</span> <div>前言VideoToolbox硬编码H.264使用AudioToolbox编码AAC使用AudioToolbox播放AAC在前面我们介绍了从麦克风采集声音并用AudioToolbox编码成AAC码流和从摄像头采集图像并用VideoToolbox编码成H.264码流,这次我们不使用VideoToolbox和AudioToolbox播放音视频,而是把这两个格式的文件打包成TS流,并用通过HLS协议在浏览</div> </li> <li><a href="/article/1828557754290237440.htm" title="【React】react实现前端播放m3u8格式视频" target="_blank">【React】react实现前端播放m3u8格式视频</a> <span class="text-muted">ah_biao</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E5%A4%84%E7%90%86/1.htm">视频处理</a><a class="tag" taget="_blank" href="/search/hls/1.htm">hls</a> <div>DPlayer文档:http://dplayer.js.org导入依赖yarnadddplayerhls.js在头部引入依赖importDPlayerfrom'dplayer'constHls=require('hls.js')新建一个div初始化播放器componentDidMount(){video=newDPlayer({container:document.getElementById('</div> </li> <li><a href="/article/1826690432671772672.htm" title="Vitis/Vivado HLS 流水线中的存储依赖——解决方法之二" target="_blank">Vitis/Vivado HLS 流水线中的存储依赖——解决方法之二</a> <span class="text-muted">优质蛋白 - 芯片打工人</span> <a class="tag" taget="_blank" href="/search/%E9%AB%98%E5%B1%82%E6%AC%A1%E7%BB%BC%E5%90%88HLS/1.htm">高层次综合HLS</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/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/fpga/1.htm">fpga</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a> <div>和上一篇内容Vitis/VivadoHLS流水线中的存储依赖——解决方法之一中一样,考虑以下函数模块,voidExampleModule(hls::streamstrm_in,hls::streamstrm_out){#pragmaHLSINTERFACEmode=ap_ctrl_noneport=returnt_datamem[2*N];#pragmaHLSBIND_STORAGEvariabl</div> </li> <li><a href="/article/1772492045785563136.htm" title="总结近一年折腾的那些事情-致敬Frp神器" target="_blank">总结近一年折腾的那些事情-致敬Frp神器</a> <span class="text-muted">WarmSword</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7/1.htm">工具</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/p2p/1.htm">p2p</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a> <div>蓦然回首,发现中年的自己,假期的日常主要就是休息遛娃游玩,好久没有写一写博客了。自己近1年有一些自己闲暇的时间的时候,其实也在折腾一些事情。gohls折腾的事情,主要是娱乐好玩工具性的一些东西,比如抄了一下gohls这个项目GitHub-shimberger/gohls:Aserverthatexposesadirectoryforvideostreamingviawebinterface,在家里</div> </li> <li><a href="/article/1761471008155459584.htm" title="又拍云传输协议对比及指标" target="_blank">又拍云传输协议对比及指标</a> <span class="text-muted">Allan_Zeng</span> <div>又拍云一站式直播解决方案基于又拍云CDN,支持RTMP、HTTP-FLV和HLS三大直播协议,并且通过智能调度、链路保障、追帧处理、丢帧处理以及业界首创的HLS+技术,将RTMP、HTTP-FLV直播延迟控制在1秒内,将HLS直播延时控制在4秒左右。</div> </li> <li><a href="/article/1759936693386964992.htm" title="除法器 c语言 模拟,用Vivado-HLS实现低latency除法器" target="_blank">除法器 c语言 模拟,用Vivado-HLS实现低latency除法器</a> <span class="text-muted">小小羊羊羊</span> <a class="tag" taget="_blank" href="/search/%E9%99%A4%E6%B3%95%E5%99%A8/1.htm">除法器</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E6%A8%A1%E6%8B%9F/1.htm">模拟</a> <div>GeorgeWang–XilinxDSPSpecialist1VivadoHLS简介XilinxVivadoHigh-LevelSynthesis(HLS)工具将C,C++,或者SystemC设计规范,算法转成RegisterTransferLevel(RTL)实现,可综合到XilinxFPGA。将DSP算法快速转到RTLFPGA实现将C至RTL时间缩短4倍基于C语言的验证时间缩短100倍RTL仿</div> </li> <li><a href="/article/1759932106663882752.htm" title="【从Python基础到深度学习】 8. VIM两种状态" target="_blank">【从Python基础到深度学习】 8. VIM两种状态</a> <span class="text-muted">风筝超冷</span> <a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E8%BE%91%E5%99%A8/1.htm">编辑器</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>一、安装sudoaptinstallvim二、VIM两种模式-命令状态/编辑状态1.1进入/退出VIM进入VIMvim退出vim:q2.2根目录下添加配置文件window下创建vimrc类型文件内容如下:setnusetcursorlinesethlsearchsettabstop=4使用Winscp将vimrc文件拖入根目录下(Winscp使用见【从Python基础到深度学习】3.Winscp与</div> </li> <li><a href="/article/1759895386857762816.htm" title="OpenCV 4基础篇| 色彩空间类型转换" target="_blank">OpenCV 4基础篇| 色彩空间类型转换</a> <span class="text-muted">游戏开发小Y</span> <a class="tag" taget="_blank" href="/search/OpenCV/1.htm">OpenCV</a><a class="tag" taget="_blank" href="/search/4%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E6%88%98/1.htm">4从入门到实战</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/OpenCV/1.htm">OpenCV</a><a class="tag" taget="_blank" href="/search/4%E5%9F%BA%E7%A1%80%E7%AF%87/1.htm">4基础篇</a><a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>目录1.色彩空间基础2.色彩空间类型2.1GRAY色彩空间2.2BGR色彩空间2.3CMY(K)色彩空间2.4XYZ色彩空间2.5HSV色彩空间2.6HLS色彩空间2.7CIEL*a*b*色彩空间2.8CIEL*u*v*色彩空间2.9YCrCb色彩空间3.类型转换函数3.1cv2.cvtColor3.2cv2.inRange1.色彩空间基础RGB图像是一种比较常见的色彩空间类型,除此之外,比较常见</div> </li> <li><a href="/article/1759856108723335168.htm" title="VSCode中Python报错已安装的模块不存在的解决" target="_blank">VSCode中Python报错已安装的模块不存在的解决</a> <span class="text-muted">MWHLS</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ide/1.htm">ide</a> <div>文章首发见博客:https://mwhls.top/4889.html。无图/格式错误/后续更新请见首发页。更多更新请到mwhls.top查看欢迎留言提问或批评建议,私信不回。难得遇见奇葩报错,值得发文庆祝。场景使用VSCode时,在启用的环境A中,报错ModuleNotFoundError:Nomodulenamed'ftfy'。使用pipinstallftfy安装该库后,依然提示该报错。关闭该</div> </li> <li><a href="/article/1759818390945492992.htm" title="硬件加速OpenCV的图像处理方法研究" target="_blank">硬件加速OpenCV的图像处理方法研究</a> <span class="text-muted">Jason_儿</span> <div>摘要:研究了一种基于VivadoHLS加速OpenCV程序的方法,其核心是利用Xilinx高层次综合工具VivadoHLS,将C++编写的OpenCV程序按照VivadoHLS处理规范进行修改,进而将代码转换为硬件描述语言,可快速生成IP核。结合XilinxZynqSoC架构和其视频图像处理方面的优势,通过软硬件协同的方法,实现OpenCV程序算法向高性能处理平台ZynqSoC系统的移植和加速。该</div> </li> <li><a href="/article/1759794804834791424.htm" title="iOS 关于直播" target="_blank">iOS 关于直播</a> <span class="text-muted">SuperMan_Wang</span> <div>Mac上搭建直播服务器Nginx+rtmpMac直播服务器Nginx配置对HLS的支持使用nginx和rtmp插件搭建视频直播和点播服务器其实本人想自己做整套的直播(包括移动端和服务端),但是之前一直做得比较迷茫。最近偶然间看到以上三篇博客,瞬间解除了我很多疑惑。分享出来,希望大家一起研究下。稍后,我完整做好了,会更新一篇完整的做的过程。</div> </li> <li><a href="/article/1759712616793600000.htm" title="1⃣0⃣【德语纪录片】【ZDFinfo Doku】2020-09-10、Stadt frisst Mensch - Chinas Kampf um Wohnraum" target="_blank">1⃣0⃣【德语纪录片】【ZDFinfo Doku】2020-09-10、Stadt frisst Mensch - Chinas Kampf um Wohnraum</a> <span class="text-muted">Zeraphine</span> <div>StadtfrisstMensch-ChinasKampfumWohnraumChina:einLandderMegacitys.ImmermehrLeutedrängenindieständigexpandierendenMetropolen,dieWohlstandundModerneversprechen.DochumwelchenPreis?ImmobilienpreiseinChinas</div> </li> <li><a href="/article/1759640842794004480.htm" title="视频直播系统架构的设计与实现" target="_blank">视频直播系统架构的设计与实现</a> <span class="text-muted">007php007</span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/API/1.htm">API</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/1.htm">系统架构</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E6%9C%8D%E5%8A%A1/1.htm">微服务</a><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/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a> <div>视频直播系统作为一种实时性强、用户互动性高的应用,其架构设计至关重要。本文将介绍如何设计和实现一个稳定、高性能的直播系统架构,以提供良好的用户体验和可靠的服务。1.系统架构概述-介绍视频直播系统的整体架构,包括客户端、服务器端、流媒体服务器等组成部分,并解释它们之间的交互关系。2.实时传输协议选择-探讨不同的实时传输协议,如RTMP、HLS、WebRTC等,以及它们在直播系统中的应用场景和优缺点。</div> </li> <li><a href="/article/1757410660058152960.htm" title="【Vitis】Vitis HLS2023不支持的功能特性" target="_blank">【Vitis】Vitis HLS2023不支持的功能特性</a> <span class="text-muted">神仙约架</span> <a class="tag" taget="_blank" href="/search/xilinx/1.htm">xilinx</a><a class="tag" taget="_blank" href="/search/vitis/1.htm">vitis</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/xilinx/1.htm">xilinx</a><a class="tag" taget="_blank" href="/search/vitis/1.htm">vitis</a><a class="tag" taget="_blank" href="/search/hls/1.htm">hls</a> <div>VitisHLS简介Vitis™HLS是一种高层次综合工具,支持将C、C++和OpenCL™函数硬连线到器件逻辑互连结构和RAM/DSP块上。VitisHLS可在Vitis应用加速开发流程中实现硬件内核,并使用C/C++语言代码在Vivado®DesignSuite中为赛灵思器件设计开发RTLIP。【Vitis】HLS高层次综合的优势【Vitis】基于C++函数开发组件的步骤【Vitis】Viti</div> </li> <li><a href="/article/1757410527480397824.htm" title="【Vitis】Vitis HLS简介" target="_blank">【Vitis】Vitis HLS简介</a> <span class="text-muted">神仙约架</span> <a class="tag" taget="_blank" href="/search/vitis/1.htm">vitis</a><a class="tag" taget="_blank" href="/search/xilinx/1.htm">xilinx</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/vitis/1.htm">vitis</a><a class="tag" taget="_blank" href="/search/HSL/1.htm">HSL</a><a class="tag" taget="_blank" href="/search/xilinx/1.htm">xilinx</a> <div>VitisHLS简介Vitis™HLS是一种高层次综合工具,支持将C、C++和OpenCL™函数硬连线到器件逻辑互连结构和RAM/DSP块上。VitisHLS可在Vitis应用加速开发流程中实现硬件内核,并使用C/C++语言代码在Vivado®DesignSuite中为赛灵思器件设计开发RTLIP。【Vitis】VitisHLS简介【Vitis】HLS高层次综合的优势【Vitis】基于C++函数开</div> </li> <li><a href="/article/1757287475602014208.htm" title="【生产实测有效】Linux磁盘清理常用命令" target="_blank">【生产实测有效】Linux磁盘清理常用命令</a> <span class="text-muted">白-胖-子</span> <a class="tag" taget="_blank" href="/search/Linux%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4/1.htm">Linux基础命令</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/1.htm">运维常见问题</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>经常遇到磁盘空间告警需要清理常用方法磁盘空间分析先查看整体磁盘空间使用情况df-Thlsblk再有针对性的查看使用率过高的磁盘du-hsx--exclude=/{proc,sys,dev,boot,home,tmp,usr,var,app,ncltybbpo}/*查找大文件find.-typed-exectar-cjvf{}.tar.bz2{}\;-execrm-rf{}\;find.-maxde</div> </li> <li><a href="/article/1757247850141466624.htm" title="学习笔记:去广告时代下的品牌故事学" target="_blank">学习笔记:去广告时代下的品牌故事学</a> <span class="text-muted">数据分析成长记</span> <div>笔记整理自:梁将军:https://mp.weixin.qq.com/s/2pMKJlYZafHlS9cUu5PHhg故事的力量,它要比数据更容易说服别人,可以实现“认知大于事实”的效果01故事为什么可以“颠倒黑白”?故事提供了「思考框架」,故事可以将你带入一个默认的思考框架里,你一旦进入这个思考框架,你就丧失了其他判断。故事不是由事实组成,而是由「选择性事实」组成。在品牌故事的撰写里,企业要学会</div> </li> <li><a href="/article/1756981902520107008.htm" title="2020-03-09" target="_blank">2020-03-09</a> <span class="text-muted">龍_98f6</span> <div>2020-3-9linux基础命令1.文件查找或命令查找whichwhereis[root@wangjc~]#whichlsaliasls='ls--color=auto'/usr/bin/ls[root@wangjc~]#whereislsls:/usr/bin/ls/usr/share/man/man1/ls.1.gz==which==ls#查找ls命令的绝对路径==whereis==#查找命</div> </li> <li><a href="/article/1755958296390418432.htm" title="charles抓取https请求" target="_blank">charles抓取https请求</a> <span class="text-muted">Frankeen</span> <div>charles初始操作1,点击Help,然后点击SSLProxying,然后点击InstallCharlesRootCertificateonaMobileDeviceorRemoteBrowser.image.png2,在配置了代理的手机,手机在浏览器上面输入chls.pro/ssl然后下载按操作安装证书(安卓,ios手机安装都可能会出现一些问题,常见问题可以根据我下面讲解解决)image.pn</div> </li> <li><a href="/article/1755876213982773248.htm" title="使用HLS FFT报错: undefined reference to‘xilinx_ip_xfft_v9_1_*‘问题解决方法" target="_blank">使用HLS FFT报错: undefined reference to‘xilinx_ip_xfft_v9_1_*‘问题解决方法</a> <span class="text-muted">凳子花❀</span> <a class="tag" taget="_blank" href="/search/Verilog/1.htm">Verilog</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E5%AD%97IC%E8%AE%BE%E8%AE%A1/1.htm">数字IC设计</a><a class="tag" taget="_blank" href="/search/HLS/1.htm">HLS</a><a class="tag" taget="_blank" href="/search/HLS/1.htm">HLS</a><a class="tag" taget="_blank" href="/search/fpga%E5%BC%80%E5%8F%91/1.htm">fpga开发</a> <div>最近需要用到HLS的FFT库,写了一个简单代码后编译报错:../Vitis_HLS/hls_fft.h:670:undefinedreferenceto'xilinx_ip_xfft_v9_1_create_state'../Vitis_HLS/hls_fft.h:771:undefinedreferenceto'xilinx_ip_xfft_v9_1_bitacc_simulate'../Vit</div> </li> <li><a href="/article/1755875578449248256.htm" title="HLS 三角函数报错:undefined reference to ‘cordic_apfixed::circ_table_arctan_128‘" target="_blank">HLS 三角函数报错:undefined reference to ‘cordic_apfixed::circ_table_arctan_128‘</a> <span class="text-muted">凳子花❀</span> <a class="tag" taget="_blank" href="/search/HLS/1.htm">HLS</a><a class="tag" taget="_blank" href="/search/Verilog/1.htm">Verilog</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E5%AD%97IC%E8%AE%BE%E8%AE%A1/1.htm">数字IC设计</a><a class="tag" taget="_blank" href="/search/uvm/1.htm">uvm</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/linux/1.htm">linux</a> <div>最近在通过HLS实现一些算法,其中用到了hls::cos函数,写完代码编译报错:../Vitis_HLS/hls_cordic_apfixed.h:229:undefinedreferenceto`cordic_apfixed::circ_table_arctan_128'build/xf_computePhaseMap_accel.o:Infunction`voidcordic_apfixed:</div> </li> <li><a href="/article/1755855057443635200.htm" title="vue使用Mars3d弹框嵌套video视频/实时视频(m3u8)使用hls.js" target="_blank">vue使用Mars3d弹框嵌套video视频/实时视频(m3u8)使用hls.js</a> <span class="text-muted">Uxiao7</span> <a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><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/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>下载hls.jshttp://mars3d.cn/lib/video/hls/hls.js下载1.首先绘制地图我使用的天地图asyncinfoMars3d(){constthat=this;varmapOptions={scene:{center:{lat:30.435192,lng:103.936535,alt:200000,heading:359,pitch:-79},highDynamicR</div> </li> <li><a href="/article/1755558771813269504.htm" title="python视频播放列表信息库之m3u8使用详解" target="_blank">python视频播放列表信息库之m3u8使用详解</a> <span class="text-muted">Rocky006</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>m3u8库是什么?m3u8是一个用于解析和操作M3U8文件的Python库。M3U8文件,是指使用UTF-8编码格式的M3U文件,它们通常用于播放列表文件,尤其是在HTTPLiveStreaming(HLS)中。简单来说,m3u8库能帮助你读取和编辑存储视频播放列表信息的文件。为什么要使用m3u8库?在视频流技术中,M3U8文件扮演着至关重要的角色。它允许视频内容提供者将一个大视频分割成多个小片段</div> </li> <li><a href="/article/1755533741180076032.htm" title="Docker nginx容器代理播放m3u8视频文件(HLS)" target="_blank">Docker nginx容器代理播放m3u8视频文件(HLS)</a> <span class="text-muted">Dontla</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/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a> <div>文章目录DockerNginx容器代理播放M3U8文件教程获取NginxDocker镜像设置Nginx配置文件用ffmpeg将MP4文件转换成m3u8文件运行Docker容器测试M3U8流其他问题我用vlc都能播放http://192.168.121.50/forest4kTest.m3u8和http://192.168.121.50/forest4kTest.mp4,那还要m3u8做什么,直接播</div> </li> <li><a href="/article/128.htm" title="scala的option和some" target="_blank">scala的option和some</a> <span class="text-muted">矮蛋蛋</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>原文地址: http://blog.sina.com.cn/s/blog_68af3f090100qkt8.html 对于学习 Scala 的 Java™ 开发人员来说,对象是一个比较自然、简单的入口点。在 本系列 前几期文章中,我介绍了 Scala 中一些面向对象的编程方法,这些方法实际上与 Java 编程的区别不是很大。我还向您展示了 Scala 如何重新应用传统的面向对象概念,找到其缺点</div> </li> <li><a href="/article/255.htm" title="NullPointerException" target="_blank">NullPointerException</a> <span class="text-muted">Cb123456</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/BaseAdapter/1.htm">BaseAdapter</a> <div>    java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference     出现以上异常.然后就在baidu上</div> </li> <li><a href="/article/382.htm" title="PHP使用文件和目录" target="_blank">PHP使用文件和目录</a> <span class="text-muted">天子之骄</span> <a class="tag" taget="_blank" href="/search/php%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95/1.htm">php文件和目录</a><a class="tag" taget="_blank" href="/search/%E8%AF%BB%E5%8F%96%E5%92%8C%E5%86%99%E5%85%A5/1.htm">读取和写入</a><a class="tag" taget="_blank" href="/search/php%E9%AA%8C%E8%AF%81%E6%96%87%E4%BB%B6/1.htm">php验证文件</a><a class="tag" taget="_blank" href="/search/php%E9%94%81%E5%AE%9A%E6%96%87%E4%BB%B6/1.htm">php锁定文件</a> <div>PHP使用文件和目录 1.使用include()包含文件 (1):使用include()从一个被包含文档返回一个值 (2):在控制结构中使用include()   include_once()函数需要一个包含文件的路径,此外,第一次调用它的情况和include()一样,如果在脚本执行中再次对同一个文件调用,那么这个文件不会再次包含。   在php.ini文件中设置</div> </li> <li><a href="/article/509.htm" title="SQL SELECT DISTINCT 语句" target="_blank">SQL SELECT DISTINCT 语句</a> <span class="text-muted">何必如此</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>SELECT DISTINCT 语句用于返回唯一不同的值。 SQL SELECT DISTINCT 语句 在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。 DISTINCT 关键词用于返回唯一不同的值。 SQL SELECT DISTINCT 语法 SELECT DISTINCT column_name,column_name F</div> </li> <li><a href="/article/636.htm" title="java冒泡排序" target="_blank">java冒泡排序</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/1.htm">冒泡排序</a> <div>package com.algorithm; /** * @Description 冒泡 * @author FuJianyong * 2015-1-22上午09:58:39 */ public class MaoPao { public static void main(String[] args) { int[] mao = {17,50,26,18,9,10</div> </li> <li><a href="/article/763.htm" title="struts2.18 +json,struts2-json-plugin-2.1.8.1.jar配置及问题!" target="_blank">struts2.18 +json,struts2-json-plugin-2.1.8.1.jar配置及问题!</a> <span class="text-muted">7454103</span> <a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/qq/1.htm">qq</a> <div>struts2.18  出来有段时间了! (貌似是 稳定版)   闲时研究下下!  貌似 sruts2 搭配 json 做 ajax 很吃香!   实践了下下! 不当之处请绕过! 呵呵   网上一大堆 struts2+json  不过大多的json 插件 都是 jsonplugin.34.jar   strut</div> </li> <li><a href="/article/890.htm" title="struts2 数据标签说明" target="_blank">struts2 数据标签说明</a> <span class="text-muted">darkranger</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><a class="tag" taget="_blank" href="/search/Scheme/1.htm">Scheme</a> <div>数据标签主要用于提供各种数据访问相关的功能,包括显示一个Action里的属性,以及生成国际化输出等功能 数据标签主要包括: action :该标签用于在JSP页面中直接调用一个Action,通过指定executeResult参数,还可将该Action的处理结果包含到本页面来。 bean :该标签用于创建一个javabean实例。如果指定了id属性,则可以将创建的javabean实例放入Sta</div> </li> <li><a href="/article/1017.htm" title="链表.简单的链表节点构建" target="_blank">链表.简单的链表节点构建</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E6%8A%80%E5%B7%A7/1.htm">编程技巧</a> <div>/*编程环境WIN-TC*/ #include "stdio.h" #include "conio.h" #define NODE(name, key_word, help) \  Node name[1]={{NULL, NULL, NULL, key_word, help}} typedef struct node {  &nbs</div> </li> <li><a href="/article/1144.htm" title="tomcat下jndi的三种配置方式" target="_blank">tomcat下jndi的三种配置方式</a> <span class="text-muted">avords</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a> <div>jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称 访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。          tomcat配置</div> </li> <li><a href="/article/1271.htm" title="关于敏捷的一些想法" target="_blank">关于敏捷的一些想法</a> <span class="text-muted">houxinyou</span> <a class="tag" taget="_blank" href="/search/%E6%95%8F%E6%8D%B7/1.htm">敏捷</a> <div>从网上看到这样一句话:“敏捷开发的最重要目标就是:满足用户多变的需求,说白了就是最大程度的让客户满意。” 感觉表达的不太清楚。 感觉容易被人误解的地方主要在“用户多变的需求”上。 第一种多变,实际上就是没有从根本上了解了用户的需求。用户的需求实际是稳定的,只是比较多,也比较混乱,用户一般只能了解自己的那一小部分,所以没有用户能清楚的表达出整体需求。而由于各种条件的,用户表达自己那一部分时也有</div> </li> <li><a href="/article/1398.htm" title="富养还是穷养,决定孩子的一生" target="_blank">富养还是穷养,决定孩子的一生</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E6%95%99%E8%82%B2/1.htm">教育</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E7%94%9F/1.htm">人生</a> <div> 是什么决定孩子未来物质能否丰盛?为什么说寒门很难出贵子,三代才能出贵族?真的是父母必须有钱,才能大概率保证孩子未来富有吗?-----作者:@李雪爱与自由 事实并非由物质决定,而是由心灵决定。一朋友富有而且修养气质很好,兄弟姐妹也都如此。她的童年时代,物质上大家都很贫乏,但妈妈总是保持生活中的美感,时不时给孩子们带回一些美好小玩意,从来不对孩子传递生活艰辛、金钱来之不易、要懂得珍惜</div> </li> <li><a href="/article/1525.htm" title="oracle 日期时间格式转化" target="_blank">oracle 日期时间格式转化</a> <span class="text-muted">征客丶</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>oracle 系统时间有 SYSDATE 与 SYSTIMESTAMP; SYSDATE:不支持毫秒,取的是系统时间; SYSTIMESTAMP:支持毫秒,日期,时间是给时区转换的,秒和毫秒是取的系统的。 日期转字符窜: 一、不取毫秒: TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') 简要说明, YYYY 年 MM   月</div> </li> <li><a href="/article/1652.htm" title="【Scala六】分析Spark源代码总结的Scala语法四" target="_blank">【Scala六】分析Spark源代码总结的Scala语法四</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a> <div>1. apply语法   FileShuffleBlockManager中定义的类ShuffleFileGroup,定义:   private class ShuffleFileGroup(val shuffleId: Int, val fileId: Int, val files: Array[File]) { ... def apply(bucketId</div> </li> <li><a href="/article/1779.htm" title="Erlang中有意思的bug" target="_blank">Erlang中有意思的bug</a> <span class="text-muted">bookjovi</span> <a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a> <div>  代码中常有一些很搞笑的bug,如下面的一行代码被调用两次(Erlang beam) commit f667e4a47b07b07ed035073b94d699ff5fe0ba9b Author: Jovi Zhang <bookjovi@gmail.com> Date: Fri Dec 2 16:19:22 2011 +0100 erts:</div> </li> <li><a href="/article/1906.htm" title="移位打印10进制数转16进制-2008-08-18" target="_blank">移位打印10进制数转16进制-2008-08-18</a> <span class="text-muted">ljy325</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%9F%BA%E7%A1%80/1.htm">基础</a> <div> /** * Description 移位打印10进制的16进制形式 * Creation Date 15-08-2008 9:00 * @author 卢俊宇 * @version 1.0 * */ public class PrintHex { // 备选字符 static final char di</div> </li> <li><a href="/article/2033.htm" title="读《研磨设计模式》-代码笔记-组合模式" target="_blank">读《研磨设计模式》-代码笔记-组合模式</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ import java.util.ArrayList; import java.util.List; abstract class Component { public abstract void printStruct(Str</div> </li> <li><a href="/article/2160.htm" title="利用cmd命令将.class文件打包成jar" target="_blank">利用cmd命令将.class文件打包成jar</a> <span class="text-muted">chenyu19891124</span> <a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a><a class="tag" taget="_blank" href="/search/jar/1.htm">jar</a> <div>cmd命令打jar是如下实现: 在运行里输入cmd,利用cmd命令进入到本地的工作盘符。(如我的是D盘下的文件有此路径 D:\workspace\prpall\WEB-INF\classes) 现在是想把D:\workspace\prpall\WEB-INF\classes路径下所有的文件打包成prpall.jar。然后继续如下操作: cd D: 回车 cd workspace/prpal</div> </li> <li><a href="/article/2287.htm" title="[原创]JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明" target="_blank">[原创]JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/swing/1.htm">swing</a> <div>                       JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明     &nb</div> </li> <li><a href="/article/2414.htm" title="SecureCRT右键粘贴的设置" target="_blank">SecureCRT右键粘贴的设置</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/secureCRT/1.htm">secureCRT</a><a class="tag" taget="_blank" href="/search/%E5%8F%B3%E9%94%AE/1.htm">右键</a><a class="tag" taget="_blank" href="/search/%E7%B2%98%E8%B4%B4/1.htm">粘贴</a> <div>一般都习惯鼠标右键自动粘贴的功能,对于SecureCRT6.7.5 ,这个功能也已经是默认配置了。 老版本的SecureCRT其实也有这个功能,只是不是默认设置,很多人不知道罢了。 菜单: Options->Global Options ...->Terminal 右边有个Mouse的选项块。 Copy on Select Paste on Right/Middle</div> </li> <li><a href="/article/2541.htm" title="Linux 软链接和硬链接" target="_blank">Linux 软链接和硬链接</a> <span class="text-muted">dongwei_6688</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连</div> </li> <li><a href="/article/2668.htm" title="DIV底部自适应" target="_blank">DIV底部自适应</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&q</div> </li> <li><a href="/article/2795.htm" title="Centos6.5使用yum安装mysql——快速上手必备" target="_blank">Centos6.5使用yum安装mysql——快速上手必备</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>第1步、yum安装mysql [root@stonex ~]#  yum -y install mysql-server 安装结果: Installed:     mysql-server.x86_64 0:5.1.73-3.el6_5                   &nb</div> </li> <li><a href="/article/2922.htm" title="如何调试JDK源码" target="_blank">如何调试JDK源码</a> <span class="text-muted">frank1234</span> <a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a> <div>相信各位小伙伴们跟我一样,想通过JDK源码来学习Java,比如collections包,java.util.concurrent包。 可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。 下面是编译jdk的具体步骤:         1.把C:\java\jdk1.6.0_26\sr</div> </li> <li><a href="/article/3049.htm" title="Maximal Rectangle" target="_blank">Maximal Rectangle</a> <span class="text-muted">hcx2013</span> <a class="tag" taget="_blank" href="/search/max/1.htm">max</a> <div>Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.   public class Solution { public int maximalRectangle(char[][] matrix)</div> </li> <li><a href="/article/3176.htm" title="Spring MVC测试框架详解——服务端测试" target="_blank">Spring MVC测试框架详解——服务端测试</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring+mvc+test/1.htm">spring mvc test</a> <div>随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的。从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用spring-test-mvc项目(合并到spring3.2中了)。   Spring MVC测试框架提供了对服务器端和客户端(基于RestTemplate的客户端)提供了支持。 &nbs</div> </li> <li><a href="/article/3303.htm" title="Linux64位操作系统(CentOS6.6)上如何编译hadoop2.4.0" target="_blank">Linux64位操作系统(CentOS6.6)上如何编译hadoop2.4.0</a> <span class="text-muted">liyong0802</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>一、准备编译软件   1.在官网下载jdk1.7、maven3.2.1、ant1.9.4,解压设置好环境变量就可以用。     环境变量设置如下:   (1)执行vim /etc/profile (2)在文件尾部加入: export JAVA_HOME=/home/spark/jdk1.7 export MAVEN_HOME=/ho</div> </li> <li><a href="/article/3430.htm" title="StatusBar 字体白色" target="_blank">StatusBar 字体白色</a> <span class="text-muted">pangyulei</span> <a class="tag" taget="_blank" href="/search/status/1.htm">status</a> <div> [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; /*you'll also need to set UIViewControllerBasedStatusBarAppearance to NO in the plist file if you use this method</div> </li> <li><a href="/article/3557.htm" title="如何分析Java虚拟机死锁" target="_blank">如何分析Java虚拟机死锁</a> <span class="text-muted">sesame</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a><a class="tag" taget="_blank" href="/search/jdbc/1.htm">jdbc</a> <div>英文资料: Thread Dump and Concurrency Locks   Thread dumps are very useful for diagnosing synchronization related problems such as deadlocks on object monitors. Ctrl-\ on Solaris/Linux or Ctrl-B</div> </li> <li><a href="/article/3684.htm" title="位运算简介及实用技巧(一):基础篇" target="_blank">位运算简介及实用技巧(一):基础篇</a> <span class="text-muted">tw_wangzhengquan</span> <a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a> <div>http://www.matrix67.com/blog/archives/263    去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章。后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法。从今天起我就开始写这一系列位运算讲解文章,与其说是原来那篇文章的follow-up,不如说是一个r</div> </li> <li><a href="/article/3811.htm" title="jsearch的索引文件结构" target="_blank">jsearch的索引文件结构</a> <span class="text-muted">yangshangchuan</span> <a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a><a class="tag" taget="_blank" href="/search/jsearch/1.htm">jsearch</a><a class="tag" taget="_blank" href="/search/%E5%85%A8%E6%96%87%E6%A3%80%E7%B4%A2/1.htm">全文检索</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E6%A3%80%E7%B4%A2/1.htm">信息检索</a><a class="tag" taget="_blank" href="/search/word%E5%88%86%E8%AF%8D/1.htm">word分词</a> <div>jsearch是一个高性能的全文检索工具包,基于倒排索引,基于java8,类似于lucene,但更轻量级。   jsearch的索引文件结构定义如下:     1、一个词的索引由=分割的三部分组成:        第一部分是词        第二部分是这个词在多少</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>