m3u8文件信息总结

近期在做视频下载。本地播放功能的时候。发现的问题,先笔记记录一下

开发思路

(1) 在线解析m3u8文件内容,把里面的ts相应连接的资源下载本地的Document文件下。

    (2) 把下载下来的资源使用本地路径又一次拼接成一个新的本地m3u8文件。

(3) 然后在开启一个http服务端。把m3u8共享成连接地址,让播放器播放。



一、概念
1. Playlist file
    一个M3U的 Playlist 就是一个由多个独立行组成的文本文件,每行由回车/换行区分。每一行能够是一个URI  空白行或
是以”#“号开头的字符串,而且空格仅仅能存在于一行中不同元素间的分隔。


   一个URI 表示一个媒体段或是”variant Playlist file“(最多支持一层嵌套,即一个mm3u8文件里嵌套还有一个m3u8),
以”#EXT“开头的表示一个”tag“,否则表示凝视,直接忽略
2. Tags
    #EXTM3U:  每一个M3U文件第一行必须是这个tag。
    #EXTINF:指定每一个媒体段(ts)的持续时间,这个仅对其后面的URI有效,每两个媒体段URI间被这个tag分隔开,其格式例如以下:
                     #EXTINF:,  :<br>   duration表示持续的时间(秒)”Durations MUST be integers if the protocol version of the Playlist file is less</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> than 3“,否则能够是浮点数。</p> <p><br>     #EXT-X-BYTERANGE:表示媒体段是一个媒体URI资源中的一段,仅仅对其后的media URI有效,格式例如以下:<br>                      #EXT-X-BYTERANGE:<n>[@o]:<br>   当中n表示这个区间的大小,o表在URI中的offset。”The EXT-X-BYTERANGE tag appeared in version 4 of the protocol“。<br>     #EXT-X-TARGETDURATION:指定最大的媒体段时间长(秒)。所以#EXTINF中指定的时间长度必须小于或是等于这个最大<br> 值。这个tag在整个PlayList文件里仅仅能出现一 次(在嵌套的情况下。一般有真正ts url的m3u8才会出现该tag)。格式例如以下:<br>                      #EXT-X-TARGETDURATION:<s>:s表示最大的秒数。</p> <p style="font-family:Arial;font-size:14px;line-height:26px;">     #EXT-X-MEDIA-SEQUENCE:每个media URI 在 PlayList中仅仅有唯一的序号,相邻之间序号+1。<br>                      #EXT-X-MEDIA-SEQUENCE:<number>:<br>                     一个media URI并非必需要包括的,假设没有,默觉得0。<br>     #EXT-X-KEY:表示怎么对media segments进行解码。其作用范围是下次该tag出现前的全部media URI,格式例如以下:<br>                      #EXT-X-KEY:<attribute-list>:<br>                     NONE 或者 AES-128。假设是NONE,则URI以及IV属性必须不存在,假设是AES-128(Advanced Encryption</p> <p style="font-family:Arial;font-size:14px;line-height:26px;">                     Standard)。则URI必须存在。IV能够不存在。<br>                     对于AES-128的情况。keytag和URI属性共同表示了一个key文件。通过URI能够获得这个key,假设没有<br>                     IV(Initialization Vector),则使用序列号作为IV进行编解码,将序列号的高位赋到16个字节的buffer中,左边补0。假设<br>                     有IV,则将改值当成16个字节的16进制数。</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> <br>     #EXT-X-PROGRAM-DATE-TIME:将一个绝对时间或是日期和一个媒体段中的第一个sample相关联,仅仅对下一个meida URI有效,格式例如以下:<br>                      #EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ><br>                      For example:<br>                      #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00<br>    #EXT-X-ALLOW-CACHE:是否同意做cache,这个能够在PlayList文件里随意地方出现,而且最多出现一次。作用效果是全部的媒体段。格式例如以下:<br>                      #EXT-X-ALLOW-CACHE:<YES|NO><br>    #EXT-X-PLAYLIST-TYPE: 提供关于PlayList的可变性的信息, 这个对整个PlayList文件有效,是可选的。格式例如以下:<br>                      #EXT-X-PLAYLIST-TYPE:<EVENT|VOD> :假设是VOD。则server不能改变PlayList 文件;假设是EVENT,则<br> server不能改变或是删除PlayList文件里的不论什么部分。可是能够向该文件里添加新的一行内容。<br>    #EXT-X-ENDLIST:表示PlayList的末尾了,它能够在PlayList中任何位置出现。可是仅仅能出现一个。格式例如以下:<br>                      #EXT-X-ENDLIST<br>    #EXT-X-MEDIA:被用来在PlayList中表示同样内容的不用语种/译文的版本号,比方能够通过使用3个这样的tag表示3中不用语音的音<br> 频,或者用2个这个tag表示不同角度的video在PlayLists中。</p> <p>这个标签是独立存在的,其格式例如以下:<br>                     #EXT-X-MEDIA:<attribute-list>:该属性列表中包括:URI、TYPE、GROUP-ID、LANGUAGE、NAME、DEFAULT、AUTOSELECT。<br>                     URI:假设没有,则表示这个tag描写叙述的可选择版本号在主PlayList的EXT-X-STREAM-INF中存在;<br>                     TYPE:AUDIO and VIDEO;<br>                     GROUP-ID:具有同样ID的MEDIAtag,组成一组样式;<br>                     LANGUAGE:identifies the primary language used in the rendition。<br>                     NAME:The value is a quoted-string containing a human-readable description of the rendition. If the LANGUAGE attribute is present then this description SHOULD be in that language。<br>                     DEFAULT: YES或是NO,默认是No,假设是YES,则client会以这样的选项来播放,除非用户自己进行选择。<br>                     AUTOSELECT:YES或是NO,默认是No,假设是YES,则client会依据当前播放环境来进行选择(用户没有依据自己偏好进行选择的前提下)。<br>         The EXT-X-MEDIA tag appeared in version 4 of the protocol。</p> <p><br> o All EXT-X-MEDIA tags in the same group MUST have the same TYPE<br> attribute.<br> o All EXT-X-MEDIA tags in the same group MUST have different NAME<br> attributes.<br> o A group MUST NOT have more than one member with a DEFAULT<br> attribute of YES.<br> o All members of a group whose AUTOSELECT attribute has a value of<br> YES MUST have LANGUAGE [RFC5646] attributes with unique values.<br> o All members of a group with TYPE=AUDIO MUST use the same audio<br> sample format.<br> o All members of a group with TYPE=VIDEO MUST use the same video<br> sample format。</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> <br>   #EXT-X-STREAM-INF:指定一个包括多媒体信息的 media URI 作为PlayList,一般做M3U8的嵌套使用。它仅仅对紧跟后面的URI有<br> 效,格式例如以下:<br> #EXT-X-STREAM-INF:<attribute-list><br> <URI><br> 有下面属性:<br> BANDWIDTH:带宽,必须有。<br> PROGRAM-ID:该值是一个十进制整数,惟一地标识一个在PlayList文件范围内的特定的描写叙述。一个PlayList 文件里可<br> 能包括多个有同样ID的此tag。</p> <p><br> CODECS:不是必须的。<br> RESOLUTION:分辨率。<br> AUDIO:这个值必须和AUDIO类别的“EXT-X-MEDIA”标签中“GROUP-ID”属性值相匹配。</p> <p><br> VIDEO:同上</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> <br> m3u8的组成格式有多种。以下给出一个实例。http://ipadlive.cntv.soooner.com/cctv_p2p_hdcctv2.m3u8这个是CCTV-2財经的一个源。内容例如以下<br> #EXTM3U<br> #EXT-X-ALLOW-CACHE:NO<br> #EXT-X-TARGETDURATION:10<br> #EXT-X-MEDIA-SEQUENCE:8453235<br> #EXTINF:19,<br>http://124.232.164.44:80/ipad/160_15601_4572/20130804075250.ts?userid=VSNDNP-183061027101_160_15601_4572<br> #EXTINF:2,<br>http://124.232.164.44:80/ipad/160_15601_4572/20130804075300.ts?</p> <p>userid=VSNDNP-183061027101_160_15601_4572<br> #EXTINF:10,<br>http://124.232.164.44:80/ipad/160_15601_4572/20130804075310.ts?</p> <p>userid=VSNDNP-183061027101_160_15601_4572</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 假设是这样的的话。就非常方便当中http一行就是完整的一个链接,否则还要进行拼接。</p> <br> <p><br></p> <p></p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 文件夹<br> 1 简单介绍 2<br> 2 概述 2<br> 3 播放列表文件 3<br> 3.1 介绍 3<br> 3.2新标签 4<br> 3.2.1 EXT-X-TARGETDURATION 4<br> 3.2.2 EXT-X-MEDIA-SEQUENCE 4<br> 3.2.3 EXT-X-KEY 4<br> 3.2.4 EXT-X-PROGRAM-DATE-TIME 5<br> 3.2.5 EXT-X-ALLOW-CATCH 5<br> 3.2.6 EXT-X-ENDLIST 5<br> 3.2.7 EXT-X-STREAM-INF 5<br> 3.2.8 EXT-X-DISCONTINUITY 6<br> 3.2.9 EXT-X-VERSION 6<br> 4 多媒体文件 7<br> 5 密钥文件 7<br> 5.1 介绍 7<br> 5.2  IV FOR AES-128 7<br> 6 client/server行为 8<br> 6.1 介绍 8<br> 6.2 server进程 8<br> 6.2.1介绍 8<br> 6.2.2 滑动窗体播放列表 9<br> 6.2.3 加密媒体文件 9<br> 6.2.4 提供变种数据流 10<br> 6.3 client进程 10<br> 6.2.1 介绍 10<br> 6.2.2 载入播放列表文件 11<br> 6.2.3播放播放列表文件 11<br> 6.2.4又一次加载播放列表文件 11<br> 6.2.5 确定下一个要载入的文件 12<br> 6.2.6 解密经加密的媒体文件 12<br> 7 协议版本号的兼容性 12<br> 8 样例 12<br> 8.1 简单的播放列表文件 12<br> 8.2 滑动窗体播放列表,使用https 13<br> 8.3 加密的媒体文件与播放列表文件 13<br> 8.4 变种的播放列表文件 13</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <h1 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">1 </span>简单介绍</h1> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 本文档介绍了通过HTTP传输极大的多媒体数据流的协议[RFC2616]。该协议支持媒体数据的加密,并提供流的备用版本号(如比特率)。媒体数据能够在创建后被非常快地传输,同意它在近实时被接收。</p> <p></p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 在第11章中列出了。如HTTP的。描写叙述相关标准的外部引用。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <h1 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">2 </span>概述</h1> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">多媒体演示文稿是由播放列表文件里的URI指定的,播放列表是一个由uri和信息标签组成的有序列表。每个URI都关联了一个媒体文件,该媒体文件是一个连续数据流的一个分片。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">为了播放数据流,client首先获取播放列表文件。然后获取并播放列表中的每个媒体文件。</span></pre> <p>正如本文档所描写叙述的那样,它通过重载播放列表文件来发现其它新增的分片。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">文档中的关键词“必须”“不准”,“须要”“应该”“不应该”“推荐”“能够”“可选”等见</span>RFC2119<span style="font-family:'宋体';">。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <h1 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">3 </span>播放列表文件</h1> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">3.1</span>介绍</h2> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 播放列表必须是扩展的<span style="font-family:Calibri;">M3U</span>文件,该文档通过定义新的标签扩展了<span style="font-family:Calibri;">m3u</span>文件的格式。<span style="font-family:Calibri;">M3U</span>播放列表是一个文本文件。它包括了各自独立的行,行以一个<span style="font-family:Calibri;">LF</span>字符或者<span style="font-family:Calibri;">LF</span>字符紧跟一个<span style="font-family:Calibri;">CR</span>字符来结束。</p> <p>行能够是一个<span style="font-family:Calibri;">URI</span>,空行,或者以字符<span style="font-family:Calibri;">#</span>开头。空行将会被忽略。空格仅仅能作为一行中不同元素间的分隔。</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 一个<span style="font-family:Calibri;">URI </span>表示一个媒体文件或是变种播放列表文件(见<span style="font-family:Calibri;">3.2.7</span>)</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> <span style="font-family:Calibri;">    URI</span>能够是相对的,一个相对的<span style="font-family:Calibri;">URI</span>必须被包括该<span style="font-family:Calibri;">URI</span>的播放列表文件里的<span style="font-family:Calibri;">URI</span>所解析。</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 以凝视字符<span style="font-family:Calibri;">#</span>开头的行可能是凝视或者标签。标签以<span style="font-family:Calibri;">#EXT</span>开头。其它全部行都应该被忽略。</p> <p>播放列表文件的持续时间是他所指向的媒体文件的时长的总和。</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 以<span style="font-family:Calibri;">.M3U8</span>作为文件名称后缀或者<span style="font-family:Calibri;">HTTPContent-Type</span>(<span style="font-family:Calibri;">RFC2616</span>)为“<span style="font-family:Calibri;">Application/vnd.apple.mpegurl</span>”的<span style="font-family:Calibri;">M3U</span>播放列表文件使用<span style="font-family:Calibri;">UTF-8</span>(<span style="font-family:Calibri;">RFC3629</span>)编码。以<span style="font-family:Calibri;">.M3U</span>作为文件名称后缀或者<span style="font-family:Calibri;">HTTPContent-Type</span>为“<span style="font-family:Calibri;">audio/mpegurl</span>”的<span style="font-family:Calibri;">M3U</span>播放列表文件使用<span style="font-family:Calibri;">US-ASCII</span>编码。</p> <p></p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 播放列表文件名称必须以<span style="font-family:Calibri;">.M3U8</span>为后缀、<span style="font-family:Calibri;">HTTPContent-Type</span>为“<span style="font-family:Calibri;">Application/vnd.apple.mpegurl</span>”(假设使用<span style="font-family:Calibri;">http</span>传输)或者以<span style="font-family:Calibri;">.M3U</span>为后缀、<span style="font-family:Calibri;">HTTPContent-Type</span>为“<span style="font-family:Calibri;">audio/mpegurl</span>”。</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 扩展的<span style="font-family:Calibri;">M3U</span>文件格式定义了两种标签:<span style="font-family:Calibri;">EXTM3U</span>和<span style="font-family:Calibri;">EXTINF</span>。区分扩展的<span style="font-family:Calibri;">M3U</span>文件与普通<span style="font-family:Calibri;">M3U</span>文件的关键在于前者的首行为<span style="font-family:Calibri;">#EXTM3U</span>。</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> <span style="font-family:Calibri;">EXTINF</span>是一个记录标记,该标记描写叙述了后边<span style="font-family:Calibri;">URI</span>所指定的媒体文件。</p> <p>每一个媒体文件<span style="font-family:Calibri;">URI</span>前边必须有<span style="font-family:Calibri;">EXTINF</span>标签。格式例如以下:</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> <span style="font-family:Calibri;">#EXTINF: <DURATION>,<TITLE></span></p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> <span style="font-family:Calibri;">DURATION</span>是一个整数,它指定了媒体文件以秒为单位的持续时间,时间应四舍五入到最接近的整数。行内逗号后边的剩余部分是媒体文件的名字。该名字是媒体分片的人眼可读的信息标题。</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> 该文档定义了例如以下的新标签:<span style="font-family:Calibri;">EXT-X-TARGETDURATION</span>。<span style="font-family:Calibri;">EXT-X-MEDIA-SEQUENCE</span>,<span style="font-family:Calibri;">EXT-X-KEY</span>,<span style="font-family:Calibri;">EXT-X-PROGRAM-DATE-TIME</span>,<span style="font-family:Calibri;">EXT-X-ALLOW-CATCH</span>,<span style="font-family:Calibri;">EXT-X-ENDLIST</span>,<span style="font-family:Calibri;">EXT-X-STREAM-INF</span>,<span style="font-family:Calibri;">EXT-X-DISCONTINUITY</span>。<span style="font-family:Calibri;">EXT-X-VERSION</span></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">3.2</span>新标签</h2> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">3.2.1      EXT-X-TARGETDURATION</span></h2> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">该标签指定了媒体文件持续时间的最大值,播放文件列表中的媒体文件在EXTINF标签中定义的持续时间必须小于或者等于该标签指定的持续时间。该标签在播放列表文件里必须出现一次,其格式为:</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"># EXT-X-TARGETDURATION:<s></span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">S是一个以秒为单位的整数。</span></pre> <p></p> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">3.2.2      EXT-X-MEDIA-SEQUENCE</span></h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">播放列表文件里每一个媒体文件的URI都有一个唯一的序列号。</span></pre> <p>URI的序列号等于它之前那个RUI的序列号加一。</p> <p>EXT-X-MEDIA-SEQUENCE指明了出如今播放列表文件里的第一个URI的序列号。</p> <p>其格式例如以下:</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">#EXT-X-MEDIA-SEQUENCE:<Number></span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">播放列表文件里的EXT-X-MEDIA-SEQUENCE标签不能多于一个。假设播放列表文件里没有EXT-X-MEDIA-SEQUENCE标签。那么将会把播放列表中第一个URI的序列号当成0。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">媒体文件的序列号码不是必须出如今它的URI中的。见6.3.2和6.3.5。</span></pre> <p></p> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">3.2.3      EXT-X-KEY</span></h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">媒体文件可能是被加密的。EXT-X-KEY提供了解密媒体文件的必要信息,它的格式例如以下:</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">#EXT-X-KEY:METHOD=<method> [,URI = “<uri>”] [,IV = <iv>]</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">Method属性指定了加密方法,定义了两种加密方法:NONE和AES-128。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">加密方法NONE表示媒体文件不被加密,假设加密方法是NONE,那么URI和IV属性不同意存在。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">加密方法AES-128表示媒体文件使用高级加密标准128位密钥和PKCS7 padding加密。</span></pre> <p>假设加密方法是AES-128。那么对于URI属性,假设存在,则指定获取密钥的方法。对于IV属性,假设存在,则指定使用密钥的初始化向量。</p> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">IV属性出如今协议版本号2中,新的EXT-X-KEY将会代替不论什么一个先前的EXT-X-KEY。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设播放列表文件没有包括EXT-X-KEY标签,那么媒体文件将不会被加密。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">密钥文件的格式见第五章。媒体文件加密信息见5.2、6.2.3、6.3.6。</span></pre> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">3.2.4      EXT-X-PROGRAM-DATE-TIME</span></h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">EXT-X-PROGRAM-DATE-TIME标签将下一个媒体文件的开头和绝对日期关联起来。日期/时间的表示基于ISO/IEC,而且要指明时区。比如:</span></pre> <pre style="font-size:14px;line-height:26px;">#EXT-X-PROGRAM-DATE-TIME:<YYYY–MM–DDThh:mm:ssZ></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">详见</span>6.2.1<span style="font-family:'宋体';">和</span>6.3.3</pre> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">3.2.5      EXT-X-ALLOW-CATCH</span></h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">EXT-X-ALLOW-CATCH标签指定client能够或者不准缓存下载的媒体文件用来重播。</span></pre> <p>它可能会出如今播放列表文件的不论什么地方。可是不能出现两次或以上。该标签适用于播放列表中的全部分片。其格式例如以下:</p> <pre style="font-size:14px;line-height:26px;">#EXT-X-ALLOW-CACHE:<YES|NO></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">详见6.3.3</span></pre> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">3.2.6      EXT-X-ENDLIST</span></h3> <p style="font-family:Arial;font-size:14px;line-height:26px;"> <span style="font-family:Calibri;">    EXT-X-ENDLIST</span>标签标示没有很多其它媒体文件将会增加到播放列表中,它可能会出如今播放列表文件的不论什么地方,可是不能出现两次或以上。其格式例如以下:</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-ENDLIST</p> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">3.2.7      EXT-X-STREAM-INF</span></h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">     EXT-X-STREAM-INF标签表示在播放列表中的下一个URI标识还有一个播放列表文件。</span></pre> <p>格式例如以下:</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-STREAM-INF:[attribute=value][,attribute=value]* <URI></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">在一个EXT-X-STREAM-INF标签中attribute不能出现两次或以上。</span></pre> <p>其他属性定义:</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">BANDWIDTH = <n></span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">n为每秒比特数,它必须是每一个媒体文件比特速率的上限,必须经过计算包括那些在播放列表中出现的或者将要出现的容器开销。</span></pre> <pre style="font-size:14px;line-height:26px;">PROGRAM-ID=<i></pre> <pre style="font-size:14px;line-height:26px;">i<span style="font-family:'宋体';">是一个数字。在播放列表文件的范围内唯一的标识了一个特定的演示文稿。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">    一个播放列表文件可能包括多个具有同样</span>PROGRAM-ID <span style="font-family:'宋体';">的</span>EXT-X-STREAM-INF<span style="font-family:'宋体';">标签来标识某个演示文稿的不同编码。</span></pre> <p>这些变种的的播放列表可能包括额外的</p>EXT-X-STREAM-INF <span style="font-family:'宋体';">标签。</span> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <pre style="font-size:14px;line-height:26px;">CODECS="[format][,format]*"</pre> <pre style="font-size:14px;line-height:26px;"> </pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">每一种格式都指定了存在于媒体文件里的媒体类型。合法的格式标示符都是那些在ISO文件格式名称空间被RFC4281定义的格式。</span></pre> <pre style="font-size:14px;line-height:26px;">RESOLUTION=<N>x<M></pre> <pre style="font-size:14px;line-height:26px;"> </pre> <pre style="font-size:14px;line-height:26px;">N<span style="font-family:'宋体';">是流中视频水平编码分辨率的近似,以像素数表示,</span>M<span style="font-family:'宋体';">是编码垂直分辨率的近似。</span></pre> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">3.2.8      EXT-X-DISCONTINUITY</span></h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">     EXT-X-DISCONTINUITY标签表示该标签后边的媒体文件和之前的媒体文件之间的编码间断。</span></pre> <p>特性可能改变的一组是:</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">file format</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">number and type of tracks</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">encoding parameters</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">encoding sequence</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">详见第四章。6.2.1、6.3.3。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">3.2.9      EXT-X-VERSION</span></h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">EXT-X-VERSION标签指出了播放列表版本号的适应性。</span></pre> <p>播放列表文件、其关联的媒体和server必须遵守最新版本号的全部规定。</p> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <h1 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">4 </span>多媒体文件</h1> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">每个媒体文件资源定位符都必须标识一个媒体文件,该文件是总体数据的一个分片。每个媒体文件必须依照MPEG-2的传输流和MPEG-2音频流的格式。</span></pre> <p>[ISO13818]</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">传输流文件必须包括一个MPEG-2节目。在每一个文件的開始应该有一个节目关联表和一个节目映射表。包括视频的文件应该有至少一个密钥帧和足够的信息来全然初始化一个视频解码器。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">播放列表中的媒体文件必须是编码流中媒体文件的末尾与先前的序列号的延续,除非它是播放列表中出现的第一个媒体文件,或者它前边有EXT-X-DISCONTINUITY标签。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">client应该准备优点理一个特定类型(音频或视频等)的多个轨道。一个没有优先级的client应该选择它能播放的具有最小数字编号的音轨。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">client应该忽略那些传输流的内部不能识别的流。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">媒体文件内样本流和对应的多媒体流的编码參数应保持一致。然而client应该解决编码的变化问题,比如缩放视频内容以适应分辨率改变。</span></pre> <h1 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">5 </span>密钥文件</h1> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">5.1</span>介绍</h2> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">    URI属性中EXT-X-KEY标签标识一个密钥文件。密钥文件包括解密播放列表中媒体文件的密钥。AES-128加密算法使用16字节的密钥。密钥文件的格式为16字节的二进制数数组。</span></pre> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">5.2  IV FOR AES-128</span></h2> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">128位AES在加密和解密的时候须要提供一个同样的16字节的初始化向量(IV)。变换IV能够提高密钥的健壮性。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设EXT-X-KEY标签有IV属性。在使用密钥加密或者解密的时候必须使用此属性值作为IV。这个值必须被解释为128位的16进制数,并且必须有前缀0x。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">    假设EXT-X-KEY标签没有IV属性。在加密或者解密媒体文件的时候必须使用序列号作为IV值。</span></pre> <p>大端二进制表示的序列号应该放置在16字节的缓冲区中且左边补0。</p> <h1 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6 </span>client<span style="font-family:Calibri;">/</span>server行为</h1> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">6.1</span>介绍</h2> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">本章介绍server如何产生播放列表和媒体文件以及client如何下载并播放。</span></pre> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">6.2</span>server进程</h2> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.2.1</span>介绍</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">MPEG-2数据流的产生超过了本文档的范围。本文档只如果有一个数据流连续的源。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">server必须将数据流切割成持续时间大致相等的媒体文件,server应该尝试点切割流来支持对个别媒体文件的有效解码,比如包和关键帧的边界。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">server必须为媒体文件创建URI,同意它的client可以获取到文件。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">server必须创建播放列表。播放列表必须符合第三章描写叙述的格式。</span></pre> <p>server要提供的媒体文件的URI必须按顺序出如今播放列表中。</p> <p>假设URI出如今了播放列表中,那么这个媒体文件对于client必须是可用的。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">播放列表文件必须包括一个EXT-X-TARGRTDURATION标签。它必须指明加入到播放列表中媒体文件的最大EXTINF值。</span></pre> <p>整个演示文稿期间,这个值必须保持不变。典型持续时间为10s。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">播放列表文件应该包括EXT-X-VERSION标签来说明流对于版本号的兼容性。</span></pre> <p>它的值应该是server、播放列表文件和其所关联的媒体文件都能运行的最低协议版本号。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设播放列表文件通过HTTP传输。那么server应该支持client请求使用gzip内容编码。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">从client的角度来看,播放列表文件的变更必须是自己主动的。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">server不能够改变EXT-X-ALLOW-CATCH的值。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">播放列表中每一个媒体文件的URI必须以EXTINF作为前缀来说明媒体文件的持续时间。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">server能够将媒体文件和绝对的日期和时间关联起来,仅仅要在它的URI前缀上一个</span>EXT-X-PROGRAM-DATE-TIME<span style="font-family:'宋体';">标签。</span></pre> <p>日期和时间的值提供了一个媒体时间表到挂钟时间的信息映射,该<span style="color:rgb(192,0,0);">挂钟时间</span>能够作为搜索、显示或其它目的的基准。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设server提供了这个映射,那么它应该在每一个</span>EXT-X-DISCONTINUITY<span style="font-family:'宋体';">标签的后边加一个</span>EXT-X-PROGRAM-DATE-TIME<span style="font-family:'宋体';">标签。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设播放列表文件包括演示文稿的最后一个分片。那么应该加一个</span>EXT-X-ENDLIST<span style="font-family:'宋体';">标签。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设播放列表文件没有包括EXT-X-ENDLIST标签,那么server应该使一个新版本号的播放列表文件可用。并至少包括一个媒体文件的URI。</span></pre> <p>新的播放列表文件必须与前一个播放列表文件在相对的时间内有效:从上一个播放列表文件開始有效的时间算起,不早于0.5倍持续时间,不晚于1.5倍持续时间。</p> <p><span style="color:#FF0000;">//</span><span style="color:#FF0000;">不太清楚可用是什么意思?</span></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设server期望移除演示文稿,它必须使播放列表文件对于client不可用。在播放列表被清除时,它应该确保播放列表文件里的全部媒体文件对于client来说至少在一个播放列表文件持续时间内是可用的。</span></pre> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.2.2</span>滑动窗体播放列表</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">server能够限制近期一段时间加入到播放列表文件里的媒体文件的可用性,为了达到这个目的,播放列表文件必须包括准确的</span>EXT-X-MEDIA-SEQUENCE<span style="font-family:'宋体';">标签。标签的值是依照从播放列表中移除的媒体文件的</span>URI<span style="font-family:'宋体';">递增的。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">媒体文件的</span>URI<span style="font-family:'宋体';">必须依照其增加的顺序移除。当server从播放列表移除</span>URI<span style="font-family:'宋体';">时,媒体文件在一段时间内必须保持可用。该时间等于媒体文件的时间加上包括该媒体文件的最长播放列表文件的时间。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">当媒体文件通过</span>http<span style="font-family:'宋体';">传输给client后,假设server打算移除该文件,那么它应该确保</span>http<span style="font-family:'宋体';">响应头包括反应生存时间的过期头。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">那些不包括EXT-X-ENDLIST标签的播放列表文件的持续时间必须至少三倍于targrtdutration。<span style="color:#FF0000;">//</span><span style="color:#FF0000;">为什么是三倍?</span></span></pre> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.2.3</span>加密媒体文件</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设媒体文件须要被加密。那么server必须定义一个URI来同意被授权的client获取包括解密密钥的密钥文件。</span></pre> <p>密钥文件必须符合第五章描写叙述的格式。</p> <p>server能够在密钥响应中设置超时头来表名密钥能够被缓存。</p> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设採用AES-128加密算法,那么AES-128 CBC加密模式应该适应于每个媒体文件。</span></pre> <p>整个文件必须是加密的。</p> <p>password块的连接不能用于跨媒体文件。用于解密的初始化向量必须是媒体文件的序列号或者EXT-X-KEY标签的IV属性的值。server必须使用这样的加密算法和其它由紧随在播放列表文件里URI后边的EXT-X-KEY标签所指定的属性来加密播放列表文件里的每个媒体文件。</p> <p>EXT-X-KEY标签中方法为none或者没有EXT-X-KEY标签的媒体文件不能被加密。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">    假设播放列表文件包括了一个经过加密的媒体文件的URI。那么server不能够将EXT-X-KEY标签从播放列表文件里移除。</span></pre> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.2.4</span>提供变种数据流</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">server能够提供多个播放列表文件来支持对同一个演示文稿的不同编码。提<span style="color:#FF0000;">供变种播放列表文件列出每个变种流,从而使得client能够在不同编码之间动</span>态切换。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">变种播放列表文件必须为每一个变种流包括一个EXT-X-STREAM-INF标签。</span></pre> <p>同一演示文稿的每一个EXT-X-STREAM-INF都必须有同样的programid。每一个演示文稿的programid在变种播放列表内必须是唯一的。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设EXT-X-STREAM-INF标签包括CODECS属性。则属性值必须包括RFC4281定义的全部格式,</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="color:#FF0000;"><span style="font-family:'宋体';"> </span></span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">server在生成变种流的时候必须遵守下面规则:</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">1)每个变种流必须呈现同样的内容,包含流的间断性。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">2)每一个变种播放列表文件必须有同样的target duration。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">3)仅仅在个别变种播放列表文件里出现的内容必须放在列表文件的头或者尾,且不能超过target duration。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">4)变种流内匹配内容。必须有匹配时间戳。这能够使client同步流。</span></pre> <pre style="font-size:14px;line-height:26px;">5)<span style="font-family:'宋体';">基本音频流文件必须在文件里第一个样本的採样信号的时间戳前预先准备一个</span>ID3 PRIV<span style="font-family:'宋体';">标签,标签的全部者标示符为</span>“com.apple.streaming.transportStreamTimestamp”<span style="font-family:'宋体';">。二进制数据必须是</span>33<span style="font-family:'宋体';">位的基本时间戳,用</span>8<span style="font-family:'宋体';">字节的数字表示。</span></pre> <pre style="font-size:14px;line-height:26px;"> </pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">另外,全部的变种流都应该包括同样编码的音频二进制流。这使得client在不同的流之间切换时没有毛刺声音。</span><span style="color:#FF0000;">//</span><span style="font-family:'宋体';"><span style="color:#FF0000;">什么事毛刺声音?</span></span></pre> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">6.3</span>client进程</h2> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.3.1</span>介绍</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">client如何获取播放列表中的URI不在本文档的范围之内,我们如果已经获取到了URI。</span></pre> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.3.2</span>载入播放列表文件</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">每一次载入或者重载播放列表文件时:</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">client必须保证播放列表文件以EXTM3U标签开头。而且假设协议版本号号存在,client必须支持该版本号。否则。client不能够试图使用该列表文件。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">client能够忽略它不能识别的标签和属性。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">如果播放列表文件包括了EXT-X-MEDIA-SEQUENCE标签,那么client会如果在播放列表被载入的时间内以及播放列表的持续时间内媒体文件将变得不可用。播放列表的持续时间等于当中包括的媒体文件时长的总和。</span></pre> <p><span style="color:#FF0000;">//</span><span style="color:#FF0000;">为啥如果不可用?</span></p> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.3.3</span>播放播放列表文件</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">当開始播放的时候。client首先从播放列表中选择要播放的媒体文件。假设不存在EXT-X-ENDLIST标签,而且client想正常播放媒体(按顺序以标准速率播放)。那么client就不应该从播放列表文件尾部选择少于三个target duration的媒体文件。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">为了达到正常播放的目的,媒体文件必须依照他们在播放列表中的顺序播放。</span></pre> <p>client还能够用其它不论什么方式播放,比方顺序播放,随机播放,特效播放等。</p> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">对于存在EXT-X-DISCONTINUITY标签的媒体文件,在播放之前client必须准备好重置分析和解码器。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">为了不间断播放。应该提前加载媒体文件,以补偿延时和吞吐量的变化。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设播放列表文件包括了EXT-X-ALLOW-CATCH标签,而且它的值为NO。那么client在播放以后不能够缓存媒体文件。</span></pre> <p>否则同意缓存用来以后重播。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">client能够使用EXT-X-PROGRAM-DATE-TIME标签来为用户显示节目的起始时间。</span></pre> <p>假设这个值包括了时区信息,那么client应该考虑到这点。假设不包括。那么client不能够猜測时区。</p> <pre style="font-size:14px;line-height:26px;"><span style="color:#FF0000;"><span style="font-family:'宋体';">client不能依靠EXT-X-ALLOW-CATCH</span></span>标签值的正确性和一致性。</pre> <p></p> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.3.4</span>又一次加载播放列表文件</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">client必须阶段性的又一次加载播放列表文件,除非文件包括了EXT-X-ENDLIST标签。然而也不能过于频繁的加载。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">当client第一次加载播放列表文件或者已经加载可是发现文件与上次加载的时候有了变化,client都必须等待一段时间在能够再次加载。</span></pre> <p>这段时间被称为原始最小重载延迟,它是从client開始加载一个播放列表文件開始计算的。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">原始最小重载延迟是播放列表文件里最后一个媒体文件的持续时间。</span></pre> <p>媒体文件的持续时间由EXTINF标签来指定。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设client重载了一个播放列表文件,可是发现文件并没有变化,那么它在重试之前必须等一段时间。最小延迟是target duration的倍数。</span></pre> <p>第一次是0.5倍。第二次1.5倍,3倍。</p> <p>。。</p> <p></p> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.3.5</span>确定下一个要载入的文件</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">当播放列表文件被加载或者重载以后,client必须检查播放列表来确定要加载的媒体文件。要加载的第一个文件必须是client要播放的第一个文件。见6.3.3。</span></pre> <p></p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">    假设要播放的文件已经被加载,而且播放列表文件不包括EXT-X-MEDIA-SEQUENCE标签。那么client必须确认播放列表文件包括了最后一个被加载的媒体文件的URI,假设不包括。则暂停播放。</span></pre> <p>要加载的下一个媒体文件必须是上一次加载的媒体文件URI之后的第一个媒体文件的URI。</p> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">    假设要播放的文件已经被加载,而且播放列表文件包括EXT-X-MEDIA-SEQUENCE标签,那么要加载的下一个媒体文件就是比上一次加载的文件的序列号大的媒体文件里的序列号最小者。</span></pre> <p></p> <h3 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">6.3.6</span>解密经加密的媒体文件</h3> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">假设播放列表文件包括了一个指定密钥文件URI的EXT-X-KEY标签,client必须获取密钥文件。并使用当中的密钥来解密KEY标签之后的全部媒体文件。直到遇到还有一个EXT-X-KEY标签为止。</span></pre> <p></p> <h1 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">7 </span>协议版本号的兼容性</h1> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';">client和server必须使用版本号2以及更高版本号。</span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <h1 style="font-family:Arial;line-height:26px;"><span style="font-family:Calibri;">8 </span>样例</h1> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">8.1</span>简单的播放列表文件</h2> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTM3U</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-TARGETDURATION:5220</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTINF:5220,</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> http://media.example.com/entire.ts</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-ENDLIST</p> <p style="font-family:Arial;font-size:14px;line-height:26px;">  </p> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">8.2</span>滑动窗体播放列表,使用<span style="font-family:Cambria;">https</span></h2> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTM3U</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-TARGETDURATION:8</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-MEDIA-SEQUENCE:2680</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTINF:8,</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> https://priv.example.com/fileSequence2680.ts</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTINF:8,</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> https://priv.example.com/fileSequence2681.ts</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTINF:8,</p> <pre style="font-size:14px;line-height:26px;">https://priv.example.com/fileSequence2682.ts</pre> <pre style="font-size:14px;line-height:26px;"><span style="font-family:'宋体';"> </span></pre> <h2 style="font-family:Arial;line-height:26px;"><span style="font-family:Cambria;">8.3</span>加密的媒体文件与播放列表文件</h2> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTM3U</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-MEDIA-SEQUENCE:7794</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-TARGETDURATION:15</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?</p> <p>r=52"</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTINF:15,</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> http://media.example.com/fileSequence52-1.ts</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTINF:15,</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> http://media.example.com/fileSequence52-2.ts</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTINF:15,</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> http://media.example.com/fileSequence52-3.ts</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53"</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTINF:15,</p> <pre style="font-size:14px;line-height:26px;">http://media.example.com/fileSequence53-1.ts</pre> <h2 style="font-family:Arial;line-height:26px;">变种的播放列表文件</h2> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXTM3U</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> http://example.com/low.m3u8</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> http://example.com/mid.m3u8</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> http://example.com/hi.m3u8</p> <p style="font-family:Arial;font-size:14px;line-height:26px;"> #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"</p> <pre style="font-size:14px;line-height:26px;">http://example.com/audio-only.m3u8</pre> <br> </div> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1296147159745372160"></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">你可能感兴趣的:(m3u8文件信息总结)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835513551142350848.htm" title="OC语言多界面传值五大方式" target="_blank">OC语言多界面传值五大方式</a> <span class="text-muted">Magnetic_h</span> <a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/objective-c/1.htm">objective-c</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>前言在完成暑假仿写项目时,遇到了许多需要用到多界面传值的地方,这篇博客来总结一下比较常用的五种多界面传值的方式。属性传值属性传值一般用前一个界面向后一个界面传值,简单地说就是通过访问后一个视图控制器的属性来为它赋值,通过这个属性来做到从前一个界面向后一个界面传值。首先在后一个界面中定义属性@interfaceBViewController:UIViewController@propertyNSSt</div> </li> <li><a href="/article/1835512305320816640.htm" title="地推话术,如何应对地推过程中家长的拒绝" target="_blank">地推话术,如何应对地推过程中家长的拒绝</a> <span class="text-muted">校师学</span> <div>相信校长们在做地推的时候经常遇到这种情况:市场专员反馈家长不接单,咨询师反馈难以邀约这些家长上门,校区地推疲软,招生难。为什么?仅从地推层面分析,一方面因为家长受到的信息轰炸越来越多,对信息越来越“免疫”;而另一方面地推人员的专业能力和营销话术没有提高,无法应对家长的拒绝,对有意向的家长也不知如何跟进,眼睁睁看着家长走远;对于家长的疑问,更不知道如何有技巧地回答,机会白白流失。由于回答没技巧和专业</div> </li> <li><a href="/article/1835508131489214464.htm" title="高级编程--XML+socket练习题" target="_blank">高级编程--XML+socket练习题</a> <span class="text-muted">masa010</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>1.北京华北2114.8万人上海华东2,500万人广州华南1292.68万人成都华西1417万人(1)使用dom4j将信息存入xml中(2)读取信息,并打印控制台(3)添加一个city节点与子节点(4)使用socketTCP协议编写服务端与客户端,客户端输入城市ID,服务器响应相应城市信息(5)使用socketTCP协议编写服务端与客户端,客户端要求用户输入city对象,服务端接收并使用dom4j</div> </li> <li><a href="/article/1835507626276909056.htm" title="水平垂直居中的几种方法(总结)" target="_blank">水平垂直居中的几种方法(总结)</a> <span class="text-muted">LJ小番茄</span> <a class="tag" taget="_blank" href="/search/CSS_%E7%8E%84%E5%AD%A6%E8%AF%AD%E8%A8%80/1.htm">CSS_玄学语言</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/css3/1.htm">css3</a> <div>1.使用flexbox的justify-content和align-items.parent{display:flex;justify-content:center;/*水平居中*/align-items:center;/*垂直居中*/height:100vh;/*需要指定高度*/}2.使用grid的place-items:center.parent{display:grid;place-item</div> </li> <li><a href="/article/1835507248395284480.htm" title="【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数" target="_blank">【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数</a> <span class="text-muted">广龙宇</span> <a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%B5%B7%E5%AD%A6Rust/1.htm">一起学Rust</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Rust%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">Rust设计模式</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分</div> </li> <li><a href="/article/1835506237316362240.htm" title="WPF中的ComboBox控件几种数据绑定的方式" target="_blank">WPF中的ComboBox控件几种数据绑定的方式</a> <span class="text-muted">互联网打工人no1</span> <a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a> <div>一、用字典给ItemsSource赋值(此绑定用的地方很多,建议熟练掌握)在XMAL中:在CS文件中privatevoidBindData(){DictionarydicItem=newDictionary();dicItem.add(1,"北京");dicItem.add(2,"上海");dicItem.add(3,"广州");cmb_list.ItemsSource=dicItem;cmb_l</div> </li> <li><a href="/article/1835505858444881920.htm" title="git常用命令笔记" target="_blank">git常用命令笔记</a> <span class="text-muted">咩酱-小羊</span> <a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>###用习惯了idea总是不记得git的一些常见命令,需要用到的时候总是担心旁边站了人~~~记个笔记@_@,告诉自己看笔记不丢人初始化初始化一个新的Git仓库gitinit配置配置用户信息gitconfig--globaluser.name"YourName"gitconfig--globaluser.email"youremail@example.com"基本操作克隆远程仓库gitclone查看</div> </li> <li><a href="/article/1835505858939809792.htm" title="python os.environ" target="_blank">python os.environ</a> <span class="text-muted">江湖偌大</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a> <div>os.environ['TF_CPP_MIN_LOG_LEVEL']='0'#默认值,输出所有信息os.environ['TF_CPP_MIN_LOG_LEVEL']='1'#屏蔽通知信息(INFO)os.environ['TF_CPP_MIN_LOG_LEVEL']='2'#屏蔽通知信息和警告信息(INFO\WARNING)os.environ['TF_CPP_MIN_LOG_LEVEL']='</div> </li> <li><a href="/article/1835502704827396096.htm" title="将cmd中命令输出保存为txt文本文件" target="_blank">将cmd中命令输出保存为txt文本文件</a> <span class="text-muted">落难Coder</span> <a class="tag" taget="_blank" href="/search/Windows/1.htm">Windows</a><a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a><a class="tag" taget="_blank" href="/search/window/1.htm">window</a> <div>最近深度学习本地的训练中我们常常要在命令行中运行自己的代码,无可厚非,我们有必要保存我们的炼丹结果,但是复制命令行输出到txt是非常麻烦的,其实Windows下的命令行为我们提供了相应的操作。其基本的调用格式就是:运行指令>输出到的文件名称或者具体保存路径测试下,我打开cmd并且ping一下百度:pingwww.baidu.com>./data.txt看下相同目录下data.txt的输出:如果你再</div> </li> <li><a href="/article/1835502578511736832.htm" title="下载github patch到本地" target="_blank">下载github patch到本地</a> <span class="text-muted">小米人er</span> <a class="tag" taget="_blank" href="/search/%E6%88%91%E7%9A%84%E5%8D%9A%E5%AE%A2/1.htm">我的博客</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/patch/1.htm">patch</a> <div>以下是几种从GitHub上下载以.patch结尾的补丁文件的方法:通过浏览器直接下载打开包含该.patch文件的GitHub仓库。在仓库的文件列表中找到对应的.patch文件。点击该文件,浏览器会显示文件的内容,在页面的右上角通常会有一个“Raw”按钮,点击它可以获取原始文件内容。然后在浏览器中使用快捷键(如Ctrl+S或者Command+S)将原始文件保存到本地,选择保存的文件名并确保后缀为.p</div> </li> <li><a href="/article/1835502451877310464.htm" title="基于社交网络算法优化的二维最大熵图像分割" target="_blank">基于社交网络算法优化的二维最大熵图像分割</a> <span class="text-muted">智能算法研学社(Jack旭)</span> <a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95%E5%BA%94%E7%94%A8/1.htm">智能优化算法应用</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%88%86%E5%89%B2/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/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码文章目录智能优化算法应用:基于社交网络优化的二维最大熵图像阈值分割-附代码1.前言2.二维最大熵阈值分割原理3.基于社交网络优化的多阈值分割4.算法结果:5.参考文献:6.Matlab代码摘要:本文介绍基于最大熵的图像分割,并且应用社交网络算法进行阈值寻优。1.前言阅读此文章前,请阅读《图像分割:直方图区域划分及信息统计介绍》htt</div> </li> <li><a href="/article/1835501948011376640.htm" title="使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)" target="_blank">使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)</a> <span class="text-muted">编程经验分享</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/1.htm">开发工具</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/ssh/1.htm">ssh</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>目录前言基本使用教程新建远程连接连接主机自定义命令路由追踪前言后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器,总而言之,程序员不可能直接和服务器直接操作,一般都是通过ssh连接来登录服务器。刚接触远程连接时,使用的是XSHELL来远程连接服务器,连接上就能够操作远程服务器了,但是仅用XSHELL并没有上传下载文件的功能</div> </li> <li><a href="/article/1835501821569888256.htm" title="关于提高复杂业务逻辑代码可读性的思考" target="_blank">关于提高复杂业务逻辑代码可读性的思考</a> <span class="text-muted">编程经验分享</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C/1.htm">开发经验</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录前言需求场景常规写法拆分方法领域对象总结前言实际工作中大部分时间都是在写业务逻辑,一般都是三层架构,表示层(Controller)接收客户端请求,并对入参做检验,业务逻辑层(Service)负责处理业务逻辑,一般开发都是在这一层中写具体的业务逻辑。数据访问层(Dao)是直接和数据库交互的,用于查数据给业务逻辑层,或者是将业务逻辑层处理后的数据写入数据库。简单的增删改查接口不用多说,基本上写好一</div> </li> <li><a href="/article/1835500750684385280.htm" title="拥有断舍离的心态,过精简生活--《断舍离》读书笔记" target="_blank">拥有断舍离的心态,过精简生活--《断舍离》读书笔记</a> <span class="text-muted">爱吃丸子的小樱桃</span> <div>不知不觉间房间里的东西越来越多,虽然摆放整齐,但也时常会觉得空间逼仄,令人心生烦闷。抱着断舍离的态度,我开始阅读《断舍离》这本书,希望从书中能找到一些有效的方法,帮助我实现空间、物品上的断舍离。《断舍离》是日本作家山下英子通过自己的经历、思考和实践总结而成的,整体内涵也从刚开始的私人生活哲学的“断舍离”升华成了“人生实践哲学”,接着又成为每个人都能实行的“改变人生的断舍离”,从“哲学”逐渐升华成“</div> </li> <li><a href="/article/1835498602294767616.htm" title="特殊的拜年" target="_blank">特殊的拜年</a> <span class="text-muted">飘雪的天堂</span> <div>文/雪儿大年初一,家家户户没有了轰响的鞭炮声,大街上没有了人流涌动的喧闹,几乎看不到人影,变得冷冷清清。天刚亮不大会儿,村里的大喇叭响了起来:由于当前正值疾病高发期,流感流行的高峰期。同时,新型冠状病毒感染的肺炎进入第二波流行的上升期。为了自己和他人的健康安全着想,请大家尽量不要串门拜年,不要在街里走动。可以通过手机微信,视频,电话,信息拜年……今年的春节真是特别。禁止燃放鞭炮,烟花爆竹,禁止出村</div> </li> <li><a href="/article/1835497538023682048.htm" title="使用Apify加载Twitter消息以进行微调的完整指南" target="_blank">使用Apify加载Twitter消息以进行微调的完整指南</a> <span class="text-muted">nseejrukjhad</span> <a class="tag" taget="_blank" href="/search/twitter/1.htm">twitter</a><a class="tag" taget="_blank" href="/search/easyui/1.htm">easyui</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>#使用Apify加载Twitter消息以进行微调的完整指南##引言在自然语言处理领域,微调模型以适应特定任务是提升模型性能的常见方法。本文将介绍如何使用Apify从Twitter导出聊天信息,以便进一步进行微调。##主要内容###使用Apify导出推文首先,我们需要从Twitter导出推文。Apify可以帮助我们做到这一点。通过Apify的强大功能,我们可以批量抓取和导出数据,适用于各类应用场景。</div> </li> <li><a href="/article/1835497411179540480.htm" title="深入理解 MultiQueryRetriever:提升向量数据库检索效果的强大工具" target="_blank">深入理解 MultiQueryRetriever:提升向量数据库检索效果的强大工具</a> <span class="text-muted">nseejrukjhad</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>深入理解MultiQueryRetriever:提升向量数据库检索效果的强大工具引言在人工智能和自然语言处理领域,高效准确的信息检索一直是一个关键挑战。传统的基于距离的向量数据库检索方法虽然广泛应用,但仍存在一些局限性。本文将介绍一种创新的解决方案:MultiQueryRetriever,它通过自动生成多个查询视角来增强检索效果,提高结果的相关性和多样性。MultiQueryRetriever的工</div> </li> <li><a href="/article/1835495298219208704.htm" title="log4j配置" target="_blank">log4j配置</a> <span class="text-muted">yy爱yy</span> <div>#log4j.rootLogger配置的是大于等于当前级别的日志信息的输出#log4j.rootLogger用法:(注意appenderName可以是一个或多个)#log4j.rootLogger=日志级别,appenderName1,appenderName2,....#log4j.appender.appenderName2定义的是日志的输出方式,有两种:一种是命令行输出或者叫控制台输出,另一</div> </li> <li><a href="/article/1835494762388484096.htm" title="【目标检测数据集】卡车数据集1073张VOC+YOLO格式" target="_blank">【目标检测数据集】卡车数据集1073张VOC+YOLO格式</a> <span class="text-muted">熬夜写代码的平头哥∰</span> <a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/1.htm">目标检测</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1073标注数量(xml文件个数):1073标注数量(txt文件个数):1073标注类别数:1标注类别名称:["truck"]每个类别标注的框数:truck框数=1120总框数:1120使用标注工具:labelImg标注</div> </li> <li><a href="/article/1835494257746604032.htm" title="MYSQL面试系列-04" target="_blank">MYSQL面试系列-04</a> <span class="text-muted">king01299</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>MYSQL面试系列-0417.关于redolog和binlog的刷盘机制、redolog、undolog作用、GTID是做什么的?innodb_flush_log_at_trx_commit及sync_binlog参数意义双117.1innodb_flush_log_at_trx_commit该变量定义了InnoDB在每次事务提交时,如何处理未刷入(flush)的重做日志信息(redolog)。它</div> </li> <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/1835493397553573888.htm" title="2022现在哪个打车软件比较好用又便宜 实惠的打车软件合集" target="_blank">2022现在哪个打车软件比较好用又便宜 实惠的打车软件合集</a> <span class="text-muted">高省APP珊珊</span> <div>这是一个信息高速传播的社会。信息可以通过手机,微信,自媒体,抖音等方式进行传播。但同时这也是一个交通四通发达的社会。高省APP,是2022年推出的平台,0投资,0风险、高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几百万篇报道,也期待你的加入。珊珊导师,高省邀请码777777,注册送2皇冠会员,送万元推广大礼包,教你如何1年做到百万团队。高</div> </li> <li><a href="/article/1835493267907637248.htm" title="webpack图片等资源的处理" target="_blank">webpack图片等资源的处理</a> <span class="text-muted">dmengmeng</span> <div>需要的loaderfile-loader(让我们可以引入这些资源文件)url-loader(其实是file-loader的二次封装)img-loader(处理图片所需要的)在没有使用任何处理图片的loader之前,比如说css中用到了背景图片,那么最后打包会报错的,因为他没办法处理图片。其实你只想能够使用图片的话。只加一个file-loader就可以,打开网页能准确看到图片。{test:/\.(p</div> </li> <li><a href="/article/1835493008716427264.htm" title="没有邀请码怎么注册买手妈妈?" target="_blank">没有邀请码怎么注册买手妈妈?</a> <span class="text-muted">氧惠评测</span> <div>买手妈妈怎么注册小编为大家带来买手妈妈没有邀请码怎么注册。打开买手妈妈APP,点击“马上注册”,输入邀请信息“邀请码”点击下一步,没有邀请码是登录不上的,所以这个必须要填写,那我们没有怎么办?填写成功就可以登录下一步。这里面有手机登录和淘宝登录,手机登录以后也需要用淘宝授权的,所以基本上都是淘宝登录。购物、看电影、点外卖、用氧惠APP!更优惠!氧惠(全网优惠上氧惠)——是与以往完全不同的抖客+淘客</div> </li> <li><a href="/article/1835492741895778304.htm" title="番茄西红柿叶子病害分类数据集12882张11类别" target="_blank">番茄西红柿叶子病害分类数据集12882张11类别</a> <span class="text-muted">futureflsl</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E7%B1%BB/1.htm">分类</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>数据集类型:图像分类用,不可用于目标检测无标注文件数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片图片数量(jpg文件个数):12882分类类别数:11类别名称:["Bacterial_Spot_Bacteria","Early_Blight_Fungus","Healthy","Late_Blight_Water_Mold","Leaf_Mold_Fungus","Powdery</div> </li> <li><a href="/article/1835492742713667584.htm" title="钢筋长度超限检测检数据集VOC+YOLO格式215张1类别" target="_blank">钢筋长度超限检测检数据集VOC+YOLO格式215张1类别</a> <span class="text-muted">futureflsl</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):215标注数量(xml文件个数):215标注数量(txt文件个数):215标注类别数:1标注类别名称:["iron"]每个类别标注的框数:iron框数=215总框数:215使用标注工具:labelImg标注规则:对类别进</div> </li> <li><a href="/article/1835492372952215552.htm" title="阶段总结反思" target="_blank">阶段总结反思</a> <span class="text-muted">轻争</span> <div>马上就要进入10月份了,今天做一下前段时间的总结和反思。前段时间,日更、英语、健身、护肤坚持的比较好。阅读、书法坚持的不好。1.中间被迫停更半个多月,其余时间一直在坚持日更挑战。偶尔也有不想写的时候,就做一下摘抄。因为阅读(输入)没跟上来,所以写作(输出)质量有待进一步加强。2.英语做到了一周至少学习5天,每次不少于30分钟,但是小班课没有跟上更新速度,下一步要争取利用零碎时间补听小班课。3.减肥</div> </li> <li><a href="/article/1835491353451130880.htm" title="【华为OD技术面试真题 - 技术面】- python八股文真题题库(4)" target="_blank">【华为OD技术面试真题 - 技术面】- python八股文真题题库(4)</a> <span class="text-muted">算法大师</span> <a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BAod/1.htm">华为od</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选**1.Python中的`with`**用途和功能自动资源管理示例:文件操作上下文管理协议示例代码工作流程解析优点2.\_\_new\_\_和**\_\_init\_\_**区别__new____init__区别总结3.**切片(Slicing)操作**基本切片语法</div> </li> <li><a href="/article/1835491101276991488.htm" title="数据仓库——维度表一致性" target="_blank">数据仓库——维度表一致性</a> <span class="text-muted">墨染丶eye</span> <a class="tag" taget="_blank" href="/search/%E8%83%8C%E8%AF%B5/1.htm">背诵</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E4%BB%93%E5%BA%93/1.htm">数据仓库</a> <div>数据仓库基础笔记思维导图已经整理完毕,完整连接为:数据仓库基础知识笔记思维导图维度一致性问题从逻辑层面来看,当一系列星型模型共享一组公共维度时,所涉及的维度称为一致性维度。当维度表存在不一致时,短期的成功难以弥补长期的错误。维度时确保不同过程中信息集成起来实现横向钻取货活动的关键。造成横向钻取失败的原因维度结构的差别,因为维度的差别,分析工作涉及的领域从简单到复杂,但是都是通过复杂的报表来弥补设计</div> </li> <li><a href="/article/1835490712716668928.htm" title="第六集如何安装CentOS7.0,3分钟学会centos7安装教程" target="_blank">第六集如何安装CentOS7.0,3分钟学会centos7安装教程</a> <span class="text-muted">date分享</span> <div>从光盘引导系统按回车键继续进入引导程序安装界面,选择语言这里选择简体中文版点击继续选择桌面安装下面给系统分区选择磁盘,点击完成选择基本分区,点击加号swap分区,大小填内存的两倍在选择根分区,使用所有可用的磁盘空间选择文件系统ext4点击完成,点击开始安装设置root密码,点击完成设置普通用户和密码,点击完成整个过程持续八分钟左右根据个人配置不同,时间长短不同好,现在点击重启系统进入重启状态点击本</div> </li> <li><a href="/article/75.htm" title="knob UI插件使用" target="_blank">knob UI插件使用</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/jsonp/1.htm">jsonp</a><a class="tag" taget="_blank" href="/search/knob/1.htm">knob</a> <div>图形是用canvas绘制的 js代码 var paras = { max:800, min:100, skin:'tron',//button type thickness:.3,//button width width:'200',//define canvas width.,canvas height displayInput:'tr</div> </li> <li><a href="/article/202.htm" title="Android+Jquery Mobile学习系列(5)-SQLite数据库" target="_blank">Android+Jquery Mobile学习系列(5)-SQLite数据库</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/JQuery+Mobile/1.htm">JQuery Mobile</a> <div>目录导航   SQLite是轻量级的、嵌入式的、关系型数据库,目前已经在iPhone、Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠。   因为Android已经集成了SQLite,所以开发人员无需引入任何JAR包,而且Android也针对SQLite封装了专属的API,调用起来非常快捷方便。   我也是第一次接触S</div> </li> <li><a href="/article/329.htm" title="impala-2.1.2-CDH5.3.2" target="_blank">impala-2.1.2-CDH5.3.2</a> <span class="text-muted">dayutianfei</span> <a class="tag" taget="_blank" href="/search/impala/1.htm">impala</a> <div>最近在整理impala编译的东西,简单记录几个要点: 根据官网的信息(https://github.com/cloudera/Impala/wiki/How-to-build-Impala): 1. 首次编译impala,推荐使用命令: ${IMPALA_HOME}/buildall.sh -skiptests -build_shared_libs -format 2.仅编译BE ${I</div> </li> <li><a href="/article/456.htm" title="求二进制数中1的个数" target="_blank">求二进制数中1的个数</a> <span class="text-muted">周凡杨</span> <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/%E4%BA%8C%E8%BF%9B%E5%88%B6/1.htm">二进制</a> <div>解法一: 对于一个正整数如果是偶数,该数的二进制数的最后一位是 0 ,反之若是奇数,则该数的二进制数的最后一位是 1 。因此,可以考虑利用位移、判断奇偶来实现。   public int bitCount(int x){ int count = 0; while(x!=0){ if(x%2!=0){ /</div> </li> <li><a href="/article/583.htm" title="spring中hibernate及事务配置" target="_blank">spring中hibernate及事务配置</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a> <div>hibernate的sessionFactory配置: <!-- hibernate sessionFactory配置 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <</div> </li> <li><a href="/article/710.htm" title="log4j.properties 使用" target="_blank">log4j.properties 使用</a> <span class="text-muted">510888780</span> <a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a> <div>log4j.properties 使用 一.参数意义说明 输出级别的种类 ERROR、WARN、INFO、DEBUG ERROR 为严重错误 主要是程序的错误 WARN 为一般警告,比如session丢失 INFO 为一般要显示的信息,比如登录登出 DEBUG 为程序的调试信息 配置日志信息输出目的地 log4j.appender.appenderName = fully.qua</div> </li> <li><a href="/article/837.htm" title="Spring mvc-jfreeChart柱图(2)" target="_blank">Spring mvc-jfreeChart柱图(2)</a> <span class="text-muted">布衣凌宇</span> <a class="tag" taget="_blank" href="/search/jfreechart/1.htm">jfreechart</a> <div>上一篇中生成的图是静态的,这篇将按条件进行搜索,并统计成图表,左面为统计图,右面显示搜索出的结果。 第一步:导包 第二步;配置web.xml(上一篇有代码) 建BarRenderer类用于柱子颜色 import java.awt.Color; import java.awt.Paint; import org.jfree.chart.renderer.category.BarR</div> </li> <li><a href="/article/964.htm" title="我的spring学习笔记14-容器扩展点之PropertyPlaceholderConfigurer" target="_blank">我的spring学习笔记14-容器扩展点之PropertyPlaceholderConfigurer</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Spring3/1.htm">Spring3</a> <div>PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是BeanFactoryPostProcessor接口的一个实现。关于BeanFactoryPostProcessor和BeanPostProcessor类似。我会在其他地方介绍。 PropertyPlaceholderConfigurer可以将上下文(配置文件)中的属性值放在另一个单独的标准java</div> </li> <li><a href="/article/1091.htm" title="maven 之 cobertura 简单使用" target="_blank">maven 之 cobertura 简单使用</a> <span class="text-muted">antlove</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/test/1.htm">test</a><a class="tag" taget="_blank" href="/search/unit/1.htm">unit</a><a class="tag" taget="_blank" href="/search/cobertura/1.htm">cobertura</a><a class="tag" taget="_blank" href="/search/report/1.htm">report</a> <div>1. 创建一个maven项目 2. 创建com.CoberturaStart.java package com; public class CoberturaStart { public void helloEveryone(){ System.out.println("=================================================</div> </li> <li><a href="/article/1218.htm" title="程序的执行顺序" target="_blank">程序的执行顺序</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/JAVA%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F/1.htm">JAVA执行顺序</a> <div>      刚在看java核心技术时发现对java的执行顺序不是很明白了,百度一下也没有找到适合自己的资料,所以就简单的回顾一下吧   代码如下;     经典的程序执行面试题 //关于程序执行的顺序 //例如: //定义一个基类 public class A(){ public A(</div> </li> <li><a href="/article/1345.htm" title="设置session失效的几种方法" target="_blank">设置session失效的几种方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/session%E5%A4%B1%E6%95%88/1.htm">session失效</a><a class="tag" taget="_blank" href="/search/%E7%9B%91%E5%90%AC%E5%99%A8/1.htm">监听器</a> <div>在系统登录后,都会设置一个当前session失效的时间,以确保在用户长时间不与服务器交互,自动退出登录,销毁session。具体设置很简单,方法有三种:(1)在主页面或者公共页面中加入:session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效。这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端。所</div> </li> <li><a href="/article/1472.htm" title="java jvm常用命令工具" target="_blank">java jvm常用命令工具</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a> <div>一.概述         程序运行中经常会遇到各种问题,定位问题时通常需要综合各种信息,如系统日志、堆dump文件、线程dump文件、GC日志等。通过虚拟机监控和诊断工具可以帮忙我们快速获取、分析需要的数据,进而提高问题解决速度。 本文将介绍虚拟机常用监控和问题诊断命令工具的使用方法,主要包含以下工具:       &nbs</div> </li> <li><a href="/article/1599.htm" title="【Spring框架一】Spring常用注解之Autowired和Resource注解" target="_blank">【Spring框架一】Spring常用注解之Autowired和Resource注解</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Spring%E5%B8%B8%E7%94%A8%E6%B3%A8%E8%A7%A3/1.htm">Spring常用注解</a> <div>Spring自从2.0引入注解的方式取代XML配置的方式来做IOC之后,对Spring一些常用注解的含义行为一直处于比较模糊的状态,写几篇总结下Spring常用的注解。本篇包含的注解有如下几个: Autowired Resource Component Service Controller Transactional 根据它们的功能、目的,可以分为三组,Autow</div> </li> <li><a href="/article/1726.htm" title="mysql 操作遇到safe update mode问题" target="_blank">mysql 操作遇到safe update mode问题</a> <span class="text-muted">bitray</span> <a class="tag" taget="_blank" href="/search/update/1.htm">update</a> <div>    我并不知道出现这个问题的实际原理,只是通过其他朋友的博客,文章得知的一个解决方案,目前先记录一个解决方法,未来要是真了解以后,还会继续补全.     在mysql5中有一个safe update mode,这个模式让sql操作更加安全,据说要求有where条件,防止全表更新操作.如果必须要进行全表操作,我们可以执行 SET</div> </li> <li><a href="/article/1853.htm" title="nginx_perl试用" target="_blank">nginx_perl试用</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx_perl%E8%AF%95%E7%94%A8/1.htm">nginx_perl试用</a> <div>因为空闲时间比较多,所以在CPAN上乱翻,看到了nginx_perl这个项目(原名Nginx::Engine),现在托管在github.com上。地址见:https://github.com/zzzcpan/nginx-perl 这个模块的目的,是在nginx内置官方perl模块的基础上,实现一系列异步非阻塞的api。用connector/writer/reader完成类似proxy的功能(这里</div> </li> <li><a href="/article/1980.htm" title="java-63-在字符串中删除特定的字符" target="_blank">java-63-在字符串中删除特定的字符</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class DeleteSpecificChars { /** * Q 63 在字符串中删除特定的字符 * 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。 * 例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.” */ public static voi</div> </li> <li><a href="/article/2107.htm" title="EffectiveJava--创建和销毁对象" target="_blank">EffectiveJava--创建和销毁对象</a> <span class="text-muted">ccii</span> <a class="tag" taget="_blank" href="/search/%E5%88%9B%E5%BB%BA%E5%92%8C%E9%94%80%E6%AF%81%E5%AF%B9%E8%B1%A1/1.htm">创建和销毁对象</a> <div>本章内容: 1. 考虑用静态工厂方法代替构造器 2. 遇到多个构造器参数时要考虑用构建器(Builder模式) 3. 用私有构造器或者枚举类型强化Singleton属性 4. 通过私有构造器强化不可实例化的能力 5. 避免创建不必要的对象 6. 消除过期的对象引用 7. 避免使用终结方法 1. 考虑用静态工厂方法代替构造器     类可以通过</div> </li> <li><a href="/article/2234.htm" title="[宇宙时代]四边形理论与光速飞行" target="_blank">[宇宙时代]四边形理论与光速飞行</a> <span class="text-muted">comsci</span> <div>   从四边形理论来推论 为什么光子飞船必须获得星光信号才能够进行光速飞行?    一组星体组成星座  向空间辐射一组由复杂星光信号组成的辐射频带,按照四边形-频率假说  一组频率就代表一个时空的入口    那么这种由星光信号组成的辐射频带就代表由这些星体所控制的时空通道,该时空通道在三维空间的投影是一</div> </li> <li><a href="/article/2361.htm" title="ubuntu server下python脚本迁移数据" target="_blank">ubuntu server下python脚本迁移数据</a> <span class="text-muted">cywhoyi</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/Kettle/1.htm">Kettle</a><a class="tag" taget="_blank" href="/search/pymysql/1.htm">pymysql</a><a class="tag" taget="_blank" href="/search/cx_Oracle/1.htm">cx_Oracle</a><a class="tag" taget="_blank" href="/search/ubuntu+server/1.htm">ubuntu server</a> <div>因为是在Ubuntu下,所以安装python、pip、pymysql等都极其方便,sudo apt-get install pymysql, 但是在安装cx_Oracle(连接oracle的模块)出现许多问题,查阅相关资料,发现这边文章能够帮我解决,希望大家少走点弯路。http://www.tbdazhe.com/archives/602 1.安装python 2.安装pip、pymysql</div> </li> <li><a href="/article/2488.htm" title="Ajax正确但是请求不到值解决方案" target="_blank">Ajax正确但是请求不到值解决方案</a> <span class="text-muted">dashuaifu</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/async/1.htm">async</a> <div>Ajax正确但是请求不到值解决方案   解决方案:1 .     async: false ,    2.     设置延时执行js里的ajax或者延时后台java方法!!!!!!!   例如:   $.ajax({     &</div> </li> <li><a href="/article/2615.htm" title="windows安装配置php+memcached" target="_blank">windows安装配置php+memcached</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a><a class="tag" taget="_blank" href="/search/memcache/1.htm">memcache</a> <div>Windows下Memcached的安装配置方法 1、将第一个包解压放某个盘下面,比如在c:\memcached。 2、在终端(也即cmd命令界面)下输入 'c:\memcached\memcached.exe -d install' 安装。 3、再输入: 'c:\memcached\memcached.exe -d start' 启动。(需要注意的: 以后memcached将作为windo</div> </li> <li><a href="/article/2742.htm" title="iOS开发学习路径的一些建议" target="_blank">iOS开发学习路径的一些建议</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a> <div>iOS论坛里有朋友要求回答帖子,帖子的标题是: 想学IOS开发高阶一点的东西,从何开始,然后我吧啦吧啦回答写了很多。既然敲了那么多字,我就把我写的回复也贴到博客里来分享,希望能对大家有帮助。欢迎大家也到帖子里讨论和分享,地址:http://bbs.csdn.net/topics/390920759   下面是我回复的内容:   结合自己情况聊下iOS学习建议,</div> </li> <li><a href="/article/2869.htm" title="Javascript闭包概念" target="_blank">Javascript闭包概念</a> <span class="text-muted">fanfanlovey</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E9%97%AD%E5%8C%85/1.htm">闭包</a> <div>1.参考资料 http://www.jb51.net/article/24101.htm http://blog.csdn.net/yn49782026/article/details/8549462 2.内容概述 要理解闭包,首先需要理解变量作用域问题 内部函数可以饮用外面全局变量 var n=999;   functio</div> </li> <li><a href="/article/2996.htm" title="yum安装mysql5.6" target="_blank">yum安装mysql5.6</a> <span class="text-muted">haisheng</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>1、安装http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm   2、yum install mysql   3、yum install mysql-server   4、vi /etc/my.cnf   添加character_set_server=utf8</div> </li> <li><a href="/article/3123.htm" title="po/bo/vo/dao/pojo的详介" target="_blank">po/bo/vo/dao/pojo的详介</a> <span class="text-muted">IT_zhlp80</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/BO/1.htm">BO</a><a class="tag" taget="_blank" href="/search/VO/1.htm">VO</a><a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a><a class="tag" taget="_blank" href="/search/po/1.htm">po</a> <div>    JAVA几种对象的解释 PO:persistant object持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作. VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可</div> </li> <li><a href="/article/3250.htm" title="java设计模式" target="_blank">java设计模式</a> <span class="text-muted">kerryg</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>设计模式的分类:    一、 设计模式总体分为三大类: 1、创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 2、结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。 3、行为型模式(11种):策略模式,模版方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者</div> </li> <li><a href="/article/3377.htm" title="[1]CXF3.1整合Spring开发webservice——helloworld篇" target="_blank">[1]CXF3.1整合Spring开发webservice——helloworld篇</a> <span class="text-muted">木头.java</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/webservice/1.htm">webservice</a><a class="tag" taget="_blank" href="/search/CXF/1.htm">CXF</a> <div>Spring 版本3.2.10 CXF 版本3.1.1 项目采用MAVEN组织依赖jar 我这里是有parent的pom,为了简洁明了,我直接把所有的依赖都列一起了,所以都没version,反正上面已经写了版本 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht</div> </li> <li><a href="/article/3504.htm" title="Google 工程师亲授:菜鸟开发者一定要投资的十大目标" target="_blank">Google 工程师亲授:菜鸟开发者一定要投资的十大目标</a> <span class="text-muted">qindongliang1922</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%82%9F/1.htm">感悟</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E7%94%9F/1.htm">人生</a> <div>身为软件开发者,有什么是一定得投资的? Google 软件工程师 Emanuel Saringan 整理了十项他认为必要的投资,第一项就是身体健康,英文与数学也都是必备能力吗?来看看他怎么说。(以下文字以作者第一人称撰写)) 你的健康 无疑地,软件开发者是世界上最久坐不动的职业之一。 每天连坐八到十六小时,休息时间只有一点点,绝对会让你的鲔鱼肚肆无忌惮的生长。肥胖容易扩大罹患其他疾病的风险,</div> </li> <li><a href="/article/3631.htm" title="linux打开最大文件数量1,048,576" target="_blank">linux打开最大文件数量1,048,576</a> <span class="text-muted">tianzhihehe</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>File descriptors are represented by the C int type. Not using a special type is often  considered odd, but is, historically, the Unix way. Each Linux process has a maximum number of files th</div> </li> <li><a href="/article/3758.htm" title="java语言中PO、VO、DAO、BO、POJO几种对象的解释" target="_blank">java语言中PO、VO、DAO、BO、POJO几种对象的解释</a> <span class="text-muted">衞酆夼</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/VO/1.htm">VO</a><a class="tag" taget="_blank" href="/search/BO/1.htm">BO</a><a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a><a class="tag" taget="_blank" href="/search/po/1.htm">po</a> <div>PO:persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。 BO:business object业务对象 封装业务逻辑的java对象</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>