HLS 详解

1 HLS概述

 

HTTP Live Streaming,也就是我们常说的HLS。HLS是苹果公司提出的基于HTTP的流媒体网络传输协议。类似于MPEG-DASH,但是HLS更加简洁,它的基本原理也是服务端把文件或媒体流按照不同的码率切分成一个个小片段进行传输,客户端在播放码流时,可以根据自身的带宽及性能限制,在同一视频内容的不同码率的备用源中,选择合适码率的码流进行下载播放。在传输会话开始时,客户端首先需要下载描述不同码流元数据的M3U8索引文件(类似于DASH中的MPD文件)。

 

与基于UDP的RTP协议不同,HLS请求仅使用HTTP传输,因此可以穿过任何允许HTTP数据通过的防火墙或代理服务器。这也便于使用传统的HTTP服务器作为源,并广泛使用基于HTTP的内容分发网络来传输媒体流。

 

虽然HLS有上述优势,但也同时存在延迟过大的劣势。采用HLS直播的视频流延时一般在10秒以上,使用推荐配置时延迟大概在30s,而RTMP直播的延迟最低可达到3、4秒,因此,在对实时性要求较高的场合,如互动直播,就要慎用HLS了。

 

 

 

 

2 HLS格式

 

 

HLS的格式可简单归结如下:

网络协议

HTTP

封装格式

MEPG-2 TS

编码格式

视频编码格式为H.264,音频编码格式为MP3、AAC、AC-3或EC-3

索引文件

M3U8

 

 

需要说明的是,目前已有厂家实现了H.265的HLS编码。在封装层面,除了MPEG-2 TS封装外,在WWDC2016上,苹果宣布了HLS对分段MP4(fMP4)文件字节寻址的支持,为HLS向MPEG-DASH的兼容提供了可能。

 

 

 

 

 

 

3 HLS 流程

 

根据媒体流的生成及流向,HLS的结构可划分为如下几个部分:

 

HLS 详解_第1张图片

 

 

 

 

序号

说明

1

Audio/Video inputs视频源可以是任意格式,可以是离线文件或实时码流。

2

Server接收到视频源后,Media encoder将源视频转码成HLS支持的编码格式和封装格式,根据需求可输出多个码率分别送至Stream segmenter,在segmenter中被切分成指定大小或时间长度的TS切片,并生成索引文件M3U8。

3

Distribution是一个HTTP文件服务器,负责将流媒体文件推送出去或响应客户端的请求。客户端只要访问一级M3U8文件路径就能自动播放HLS视频流了。

 

 

 

 

 

4 M3U8文件简介

 

4.1 M3U文件标签及属性说明

 

M3U文件中可以包含多个tag,每个tag的功能和属性如下:

 

标签

说明

#EXTM3U

每个M3U文件第一行必须是这个tag,起到标示作用。其格式如下:

 

#EXTM3U

#EXTINF

指定每个媒体段(ts)的持续时间,这个仅对其后面的URI有效,每两个媒体段URI间被这个tag分隔开,其格式如下:

 

#EXTINF:,

</span></p> <p><span style="color:#f33b45;">(a) duration表示持续的时间(秒)必须是整数,如果版本在3以上可以是浮点数。</span></p> <p><span style="color:#f33b45;">(b) title是下载资源的url。</span></p> <p> </p> <p><span style="color:#f33b45;">示例:</span></p> <p><span style="color:#f33b45;">#EXTINF:9.009,</span></p> <p><span style="color:#f33b45;">http://media.example.com/first.ts</span></p> </td> </tr> <tr> <td style="width:225px;"> <p>#EXT-X-BYTERANGE</p> </td> <td style="width:624px;"> <p>表示媒体段是一个媒体URI资源中的一段,只对其后的media URI有效,格式如下:</p> <p> </p> <p>#EXT-X-BYTERANGE:<n>[@o]</p> <p>(a) 其中n表示这个区间的大小。</p> <p>(b) o表在URI中的offset。</p> <p>这个标签出现在版本4中。</p> </td> </tr> <tr> <td style="width:225px;"> <p><span style="color:#f33b45;">#EXT-X-TARGETDURATION</span></p> </td> <td style="width:624px;"> <p><span style="color:#f33b45;">指定最大的媒体段时间长(秒)。所以#EXTINF中指定的时间长度必须小于或是等于这个最大值。这个tag在整个PlayList文件中只能出现一 次(在嵌套的情况下,一般有真正ts url的m3u8才会出现该tag)。格式如下:</span></p> <p> </p> <p><span style="color:#f33b45;">#EXT-X-TARGETDURATION:<s></span></p> <p><span style="color:#f33b45;">(a) s表示最大的秒数。</span></p> <p> </p> <p><span style="color:#f33b45;">示例:</span></p> <p><span style="color:#f33b45;">#EXT-X-TARGETDURATION:10</span></p> </td> </tr> <tr> <td style="width:225px;"> <p>#EXT-X-MEDIA-SEQUENCE</p> </td> <td style="width:624px;"> <p>每一个media URI 在 PlayList中只有唯一的序号,相邻之间序号+1。格式如下:</p> <p> </p> <p>#EXT-X-MEDIA-SEQUENCE:<number></p> <p>(a) 一个media URI并不是必须要包含的,如果没有,默认为0。</p> <p> </p> <p>示例:</p> <p>#EXT-X-MEDIA-SEQUENCE:2680</p> </td> </tr> <tr> <td style="width:225px;"> <p>#EXT-X-KEY</p> </td> <td style="width:624px;"> <p>表示怎么对media segments进行解码。其作用范围是下次该tag出现前的所有media URI,格式如下:</p> <p> </p> <p>#EXT-X-KEY:<attribute-list></p> <p>(a) NONE 或者 AES-128。</p> <p> </p> <p>如果是NONE,则URI以及IV属性必须不存在,如果是AES-128(Advanced Encryption Standard),则URI必须存在,IV可以不存在。</p> <p> </p> <p>对于AES-128的情况,keytag和URI属性共同表示了一个key文件,通过URI可以获得这个key,如果没有IV(Initialization Vector),则使用序列号作为IV进行编解码,将序列号的高位赋到16个字节的buffer中,左边补0;如果有IV,则将改值当成16个字节的16进制数。</p> <p> </p> <p>示例:</p> <p>#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"</p> </td> </tr> <tr> <td style="width:225px;"> <p>#EXT-X-PROGRAM-DATE-TIME</p> </td> <td style="width:624px;"> <p>将一个绝对时间或是日期和一个媒体段中的第一个sample相关联,只对下一个meida URI有效,格式如下:</p> <p> </p> <p>#EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ></p> <p> </p> <p>示例:</p> <p>#EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00</p> </td> </tr> <tr> <td style="width:225px;"> <p>#EXT-X-ALLOW-CACHE</p> </td> <td style="width:624px;"> <p>是否允许做cache,这个可以在PlayList文件中任意地方出现,并且最多出现一次,作用效果是所有的媒体段。格式如下:</p> <p> </p> <p>#EXT-X-ALLOW-CACHE:<YES|NO></p> </td> </tr> <tr> <td style="width:225px;"> <p>#EXT-X-PLAYLIST-TYPE</p> </td> <td style="width:624px;"> <p>提供关于PlayList的可变性的信息, 这个对整个PlayList文件有效,是可选的,格式如下:</p> <p> </p> <p>#EXT-X-PLAYLIST-TYPE:<EVENT|VOD></p> <p>(a) 如果是VOD,则服务器不能改变PlayList 文件。</p> <p>(b) 如果是EVENT,则服务器不能改变或是删除PlayList文件中的任何部分,但是可以向该文件中增加新的一行内容。</p> </td> </tr> <tr> <td style="width:225px;"> <p>#EXT-X-ENDLIST</p> </td> <td style="width:624px;"> <p>表示PlayList的末尾了,它可以在PlayList中任意位置出现,但是只能出现一个,格式如下:</p> <p> </p> <p>#EXT-X-ENDLIST</p> </td> </tr> <tr> <td style="width:225px;"> <p>EXT-X-MEDIA</p> </td> <td style="width:624px;"> <p>被用来在PlayList中表示相同内容的不用语种/译文的版本,比如可以通过使用3个这种tag表示3中不用语音的音频,或者用2个这个tag表示不同角度的video在PlayLists中。这个标签是独立存在的,其格式如下:</p> <p> </p> <p>#EXT-X-MEDIA:<attribute-list>:该属性列表中包含:URI、TYPE、GROUP-ID、LANGUAGE、NAME、DEFAULT、AUTOSELECT。</p> <p> </p> <p>(a) URI:如果没有,则表示这个tag描述的可选择版本在主PlayList的EXT-X-STREAM-INF中存在;</p> <p>(b) TYPE:AUDIO and VIDEO;</p> <p>(c) GROUP-ID:具有相同ID的MEDIA tag,组成一组样式;</p> <p>(d) LANGUAGE:确定使用的主要语言。</p> <p>(e) NAME:人类可读的语言的翻译。</p> <p>(f) DEFAULT: YES或是NO,默认是No,如果是YES,则客户端会以这种选项来播放,除非用户自己进行选择。</p> <p>(g) AUTOSELECT:YES或是NO,默认是No,如果是YES,则客户端会根据当前播放环境来进行选择(用户没有根据自己偏好进行选择的前提下)。</p> </td> </tr> <tr> <td style="width:225px;"> <p><span style="color:#f33b45;">#EXT-X-STREAM-INF</span></p> </td> <td style="width:624px;"> <p><span style="color:#f33b45;">指定一个包含多媒体信息的 media URI 作为PlayList,一般做M3U8的嵌套使用,它只对紧跟后面的URI有效,格式如下:</span></p> <p> </p> <p><span style="color:#f33b45;">#EXT-X-STREAM-INF:<attribute-list></span></p> <p><span style="color:#f33b45;"><URI></span></p> <p> </p> <p><span style="color:#f33b45;">有以下属性:</span></p> <p><span style="color:#f33b45;">(a) BANDWIDTH:带宽,必须有。</span></p> <p><span style="color:#f33b45;">(b) PROGRAM-ID:该值是一个十进制整数,惟一地标识一个在PlayList文件范围内的特定的描述。一个PlayList 文件中可能包含多个有相同ID的此tag。(这个属性在后面的协议版本废除了)</span></p> <p><span style="color:#f33b45;">(c) CODECS:指定流的编码类型,不是必须的。</span></p> <p><span style="color:#f33b45;">(d) RESOLUTION:分辨率。</span></p> <p><span style="color:#f33b45;">(e) AUDIO:这个值必须和AUDIO类别的“EXT-X-MEDIA”标签中“GROUP-ID”属性值相匹配。</span></p> <p><span style="color:#f33b45;">(f) VIDEO:这个值必须和VIDEO类别的“EXT-X-MEDIA”标签中“GROUP-ID”属性值相匹配。</span></p> <p> </p> <p><span style="color:#f33b45;">示例:</span></p> <p><span style="color:#f33b45;">#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=720x480</span></p> <p><span style="color:#f33b45;">mid_video_index.M3U8</span></p> </td> </tr> </tbody> </table> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <h2>4.2 M3U8结构</h2> <p> </p> <p>M3U8文件其实就是以UTF-8编码的M3U文件,该文件本身不能播放,只是用于存放待播放视频流的基本信息。</p> <p> </p> <p>如果你的视频具备流切换功能,处于不同的带宽、不同的网速播放不同清晰度的视频流,这样只能的流切换可以保证用户感觉到非常流畅的观影体验,同时不同的设备也可以作为选择的条件,比如视网膜屏可以在网速良好的情况下播放清晰度更高的视频流。</p> <p> </p> <p>这种功能的实现在于,索引文件的特殊结构。</p> <p></p> <p> </p> <p><a href="http://img.e-com-net.com/image/info8/e54bfecd62a64f86b0d3f58e25668046.jpg" target="_blank"><img alt="HLS 详解_第2张图片" class="has" src="http://img.e-com-net.com/image/info8/e54bfecd62a64f86b0d3f58e25668046.jpg" width="650" height="658" style="border:1px solid black;"></a></p> <p> </p> <p> </p> <p>如上图所示,客户端播放HLS视频流的逻辑其实非常简单,先下载一级Index file,它里面记录了二级索引文件(Alternate-A、Alternate-B、Alternate-C)的地址,然后客户端再去下载二级索引文件,二级索引文件中又记录了TS文件的下载地址,这样客户端就可以按顺序下载TS视频文件并连续播放。</p> <p> </p> <p> </p> <p> </p> <p>(1) HLS有两级索引:</p> <p><span style="color:#f33b45;">(a) 第一级索引存放的是不同码率的HLS源的M3U8地址,也就是二级索引文件的地址。</span></p> <p><span style="color:#f33b45;">(b) 第二级索引则记录了同一码率下TS切片序列的下载地址。</span></p> <p><span style="color:#f33b45;">客户端获取一级M3U8文件后,根据自己的带宽,去下载相应码率的二级索引文件,然后再按二级索引文件的切片顺序下载并播放TS文件序列。</span></p> <p></p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <h2>4.3 HLS 会话模式</h2> <p> </p> <table> <tbody> <tr> <td> <p>模式</p> </td> <td> <p>说明</p> </td> </tr> <tr> <td> <p><span style="color:#f33b45;">VOD</span></p> </td> <td> <p><span style="color:#f33b45;">点播VOD的特点就是当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有ts文件的地址。这种模式允许客户端访问全部内容。</span></p> </td> </tr> <tr> <td> <p><span style="color:#f33b45;">LIVE</span></p> </td> <td> <p><span style="color:#f33b45;">Live 模式就是实时生成M3u8和ts文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载二级index文件,以获得最新生成的ts文件播放视频。如果一个二级index文件的末尾没有#EXT-X-ENDLIST标志,说明它是一个Live视频流。</span></p> <p> </p> <p><span style="color:#f33b45;">这种类型通过向索引文件添加媒体地址可以很容易的转化为VOD类型。在转化时不要移除原来旧的源,而是通过添加一个 #ET-X-ENDLIST标记来终止实时事件。转化时如果你的索引文件中包含 EXT-X-PLAYLIST-TYPE标签,你需要将值从EVENT改为 VOD。</span></p> </td> </tr> </tbody> </table> <p> </p> <p> </p> <p>客户端在播放VOD模式的视频时其实只需要下载一次一级index文件和二级index文件就可以得到所有ts文件的下载地址,除非客户端进行比特率切换,否则无需再下载任何index文件,只需顺序下载ts文件并播放就可以了。但是Live模式下略有不同,因为播放的同时,新ts文件也在被生成中,所以客户端实际上是下载一次二级index文件,然后下载ts文件,再下载二级index文件(这个时候这个二级index文件已经被重写,记录了新生成的ts文件的下载地址),再下载新ts文件,如此反复进行播放。</p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <h2>4.4 索引文件分析</h2> <p> </p> <h3>4.4.1 一级索引文件格式</h3> <p> </p> <p>第一级索引存放的是不同码率的HLS源的M3U8地址,也就是二级索引文件的地址。</p> <p></p> <pre class="has"><code class="language-bash">#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=720x480 mid_video_index.M3U8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=800000, RESOLUTION=1280x720 wifi_video_index.M3U8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=3000000, CODECS="avc1.4d001e,mp4a.40.5", RESOLUTION=1920x1080 h264main_heaac_index.M3U8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=64000, CODECS="mp4a.40.5" aacaudio_index.M3U8</code></pre> <p> </p> <p> </p> <p> </p> <table> <tbody> <tr> <td> <p>#EXTM3U</p> </td> <td> <p>格式标签,标明该文件是一个Extended M3U播放列表文件,必须存在于一二级列表的第一行。</p> </td> </tr> <tr> <td> <p><span style="color:#f33b45;">#EXT-X-STREAM-INF</span></p> </td> <td> <p><span style="color:#f33b45;">特定流标签,指示了该流的格式信息:</span></p> <p><span style="color:#f33b45;">(a) PROGRAM-ID节目ID,一般不用考虑;</span></p> <p><span style="color:#f33b45;">(b) BANDWIDTH:指定流的带宽;</span></p> <p><span style="color:#f33b45;">(c) RESOLUTION:视频分辨率;如果存在音频分级,则需指定音频的编码格式CODECS,如上例中的最后两项;</span></p> <p><span style="color:#f33b45;">(d) STREAM-INF的下一行是二级index文件的路径,可以用相对路径也可以用绝对路径。例子中用的是相对路径。这个文件中记录了不同比特率视频流的二级index文件路径,客户端可以自己判断自己的现行网络带宽,来决定播放哪一个视频流。也可以在网络带宽变化的时候平滑切换到和带宽匹配的视频流。</span></p> </td> </tr> </tbody> </table> <p> </p> <p> </p> <p> </p> <p> </p> <p></p> <h3>4.4.2 二级索引文件格式</h3> <p> </p> <p>第二级索引则记录了同一码率下TS切片序列的下载地址。</p> <p> </p> <p> </p> <p>(1) VOD形式</p> <p>点播VOD的特点就是当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有ts文件的地址。这种模式允许客户端访问全部内容。</p> <p> </p> <p>下面的例子中就是一个点播模式下的m3u8的结构。</p> <pre class="has"><code class="language-bash">#EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:9.009, http://media.example.com/first.ts #EXTINF:9.009, http://media.example.com/second.ts #EXTINF:3.003, http://media.example.com/third.ts #EXT-X-ENDLIST</code></pre> <p> </p> <p> </p> <p> </p> <table> <tbody> <tr> <td> <p>#EXTM3U</p> </td> <td> <p>格式标签,标明该文件是一个Extended M3U播放列表文件,必须存在于一二级列表的第一行。</p> </td> </tr> <tr> <td> <p><span style="color:#f33b45;">#EXT-X-PLAYLIST-TYPE</span></p> </td> <td> <p><span style="color:#f33b45;">#EXT-X-PLAYLIST-TYPE:VOD的意思是当前的视频流并不是一个直播流,而是点播流,换句话说就是该视频的全部的ts文件已经被生成好了。</span></p> </td> </tr> <tr> <td> <p>#EXT-X-TARGETDURATION</p> </td> <td> <p>表示切片的最大时长,单位是秒。#EXT-X-TARGETDURATION:10表示列表中表示的每个切片时长不超过10秒。</p> </td> </tr> <tr> <td> <p>#EXT-X-VERSION</p> </td> <td> <p>表示协议兼容性版本。</p> </td> </tr> <tr> <td> <p>#EXTINF</p> </td> <td> <p>切片的实际时长,若要求取整,则其数值不能大于EXT-X-TARGETDURATION的值。</p> </td> </tr> <tr> <td> <p>http://media.example.com/first.ts</p> </td> <td> <p>对应的切片文件(路径),可以是绝对路径,也可以是相对路径。</p> </td> </tr> <tr> <td> <p><span style="color:#f33b45;">#EXT-X-ENDLIST</span></p> </td> <td> <p><span style="color:#f33b45;">表示整个码流的结束,不再向后附加新的切片列表。有这个标志同时也说明当前的流是一个非直播流。</span></p> </td> </tr> </tbody> </table> <p> </p> <p> </p> <p> </p> <p> </p> <p>(2) Live形式</p> <p>Live 模式就是实时生成M3u8和ts文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载二级index文件,以获得最新生成的ts文件播放视频。如果一个二级index文件的末尾没有#EXT-X-ENDLIST标志,说明它是一个Live视频流。</p> <p></p> <p> </p> <pre class="has"><code class="language-bash">#EXT-X-VERSION:3 #EXT-X-TARGETDURATION:8 #EXT-X-MEDIA-SEQUENCE:2680 #EXTINF:7.975, https://priv.example.com/fileSequence2680.ts #EXTINF:7.941, https://priv.example.com/fileSequence2681.ts #EXTINF:7.975, https://priv.example.com/fileSequence2682.ts</code></pre> <p> </p> <p> </p> <table> <tbody> <tr> <td> <p>#EXT-X-MEDIA-SEQUENCE</p> </td> <td> <p>媒体序列号,表示出现在当前M3U8文件中的第一个Segment的序列号。</p> </td> </tr> </tbody> </table> <p> </p> <p> </p> <p>Live形式的M3U8一般用于直播,列表中的文件数有限制,推荐配置中是3个,服务端会实时更新该列表,删除最开始的Segment,并向后面添加新生成的Segment。因此,这种模式下,当网络带宽不足时,客户端来不及下载新的M3U8和对应的切片文件,会导致切片丢失,播放卡顿。</p> <p> </p> <p> </p> <p> </p> <p> </p> <p>(3) 加密形式:</p> <p></p> <pre class="has"><code class="language-bash">#EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:7794 #EXT-X-TARGETDURATION:15 #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52" #EXTINF:2.833, http://media.example.com/fileSequence52-A.ts #EXTINF:15.0, http://media.example.com/fileSequence52-B.ts #EXTINF:13.333, http://media.example.com/fileSequence52-C.ts #EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53" #EXTINF:15.0, http://media.example.com/fileSequence53-A.ts</code></pre> <p> </p> <p> </p> <p> </p> <p>HLS可以被加密。客户端通过读取M3U8文件中的#EXT-X_KEY标签可以获取解密的密钥。EXT-X-KEY指示的密钥信息作用于当前EXT-X-KEY标签至下一个EXT-X-KEY标签(若没有下一个,则到最后一个Segment)之间的所有Segments。METHOD指示加密算法,可用的取值有NONE、AES-128和SAMPLE-AES,NONE表示不加密。<span style="color:#f33b45;">URI指示获取密钥的路径,该项不可省略,除非METHOD为NONE。</span></p> <p></p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <h1>5 流测试网址</h1> <p>https://www.vitamio.org/docs/Basic/2013/0508/14.html</p> <p></p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p></p> <p></p> <p></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1276583592444575744"></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">你可能感兴趣的:(流媒体协议)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1828760076794556416.htm" title="Qt/C++ 音视频开发 - VLC 解码播放(代码+部署测试)" target="_blank">Qt/C++ 音视频开发 - VLC 解码播放(代码+部署测试)</a> <span class="text-muted">鱼弦</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E6%97%B6%E4%BB%A3/1.htm">人工智能时代</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>Qt/C++音视频开发-VLC解码播放介绍Qt是一个跨平台的C++应用程序框架,广泛用于GUI程序和跨平台应用。VLC是一个开源的跨平台多媒体播放器及框架,可以播放大多数多媒体文件及流媒体协议。结合两者可以实现强大的音视频处理功能。在Qt/C++项目中集成VLC可以实现高效的音视频解码和播放功能,从而增强了应用的多媒体处理能力。应用使用场景多媒体播放器:开发支持多种格式的音视频播放器。实时流媒体播</div> </li> <li><a href="/article/1768627564735168512.htm" title="多人音视频实时通讯架构" target="_blank">多人音视频实时通讯架构</a> <span class="text-muted">从零开始学习人工智能</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>直播中的协议与格式在直播系统中,协议和格式的选择对于传输效率、画面质量和用户体验都至关重要。以下是直播中常见的协议与格式:协议RTSP(RealTimeStreamingProtocol)RTSP是一个网络流媒体协议,常用于视频监控和IPTV等场景。它本身并不传输数据,而是充当媒体服务器与客户端之间的通信协议。RTSP支持TCP和UDP传输,通常使用RTP(Real-timeTransportPr</div> </li> <li><a href="/article/1756439341065846784.htm" title="音视频/流媒体协议和编码汇总" target="_blank">音视频/流媒体协议和编码汇总</a> <span class="text-muted">phial03</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/%E8%A7%86%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81/1.htm">视频编解码</a><a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a><a class="tag" taget="_blank" href="/search/%E5%AE%9E%E6%97%B6%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">实时音视频</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E8%A7%89%E6%A3%80%E6%B5%8B/1.htm">视觉检测</a><a class="tag" taget="_blank" href="/search/mpeg-1/1.htm">mpeg-1</a><a class="tag" taget="_blank" href="/search/mpeg-2/1.htm">mpeg-2</a> <div>一、流媒体协议1.RTMP/RTMPT/RTMPS/RTMPE等多变种是应用层协议,使用TCP作为底层传输协议,并提供了低延迟、高带宽利用率和实时性的特点。(1)RTMP协议是Adobe的私有协议,未完全公开(2)一般传输的是flv,f4v格式流2.RTP/RTCP/SRTP都作用于OSI模型中的传输层。RTCP是RTP的补充协议,用于提供对RTP会话的控制和监控。RTCP负责传输会话中的控制信息</div> </li> <li><a href="/article/1752494888319991808.htm" title="最简单的基于FFmpeg的推流器(以推送RTMP为例)" target="_blank">最简单的基于FFmpeg的推流器(以推送RTMP为例)</a> <span class="text-muted">音视频开发老马</span> <a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>最简单的基于FFmpeg的推流器系列文章列表:《最简单的基于FFmpeg的推流器(以推送RTMP为例)》《最简单的基于FFMPEG的推流器附件:收流器》本文记录一个最简单的基于FFmpeg的推流器(simplestffmpegstreamer)。推流器的作用就是将本地的视频数据推送至流媒体服务器。本文记录的推流器,可以将本地的MOV/AVI/MKV/MP4/FLV等格式的媒体文件,通过流媒体协议(</div> </li> <li><a href="/article/1751966765585285120.htm" title="常用实时流媒体传输协议汇总" target="_blank">常用实时流媒体传输协议汇总</a> <span class="text-muted">稚肩</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91/1.htm">音视频开发</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>常见的流媒体协议如下,主要有RTSP,RTP,RTMP,HLS,MPEG-DASH等。近年来,HTTP-based协议如HLS和MPEG-DASH在移动设备和Web平台上的广泛应用日益增多。下面是这些协议的基本介绍。RTSP(Real-TimeStreamingProtocol):特点:RTSP是一个用于控制实时流媒体传输的应用层协议,负责控制和调度媒体服务器的行为。工作方式:RTSP本身不传输媒</div> </li> <li><a href="/article/1750568099750363136.htm" title="SkeyeWebPlayer免费网页直播点播播放器-页面动态添加多个播放器" target="_blank">SkeyeWebPlayer免费网页直播点播播放器-页面动态添加多个播放器</a> <span class="text-muted">打响第一枪</span> <a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>强大的网页直播/点播播放器SkeyeWebPlayer,使用简单,功能强大,终身免费使用,支持Windows、Android、iOS平台。SkeyeWebPlayer.jsH5播放器是由成都视开信息科技开发和维护的一个完善的RTSP、FLV、HLS等多种流媒体协议播放,视频编码支持H.264,H.265,音频支持AAC,支持TCP/UDP协议,是一套极佳的且适合用于综合安防视频云服务播放组件,已经</div> </li> <li><a href="/article/1750466117639356416.htm" title="音视频开发常见面试题" target="_blank">音视频开发常见面试题</a> <span class="text-muted">稚肩</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91/1.htm">音视频开发</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>问题:什么是采样率?采样位数是什么意思?答案:采样率是每秒采集的样本数,采样位数表示每个样本的位数。常见的音频采样率有44.1kHz,采样位数一般为16位。音视频编解码:问题:H.264和H.265有什么区别?答案:H.264和H.265都是视频编码标准,H.265相对于H.264有更高的压缩效率,更多的码率控制方法,对更高分辨率和帧率有更好的支持。流媒体协议:问题:RTSP和RTMP是什么协议?</div> </li> <li><a href="/article/1750217887961858048.htm" title="如何进行H.265视频播放器EasyPlayer.js的中性化设置?" target="_blank">如何进行H.265视频播放器EasyPlayer.js的中性化设置?</a> <span class="text-muted">EasyCVR</span> <a class="tag" taget="_blank" href="/search/EasyPlayer/1.htm">EasyPlayer</a><a class="tag" taget="_blank" href="/search/h.265/1.htm">h.265</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/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E7%9B%91%E6%8E%A7/1.htm">监控</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E7%9B%91%E6%8E%A7/1.htm">视频监控</a> <div>H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC、fmp4等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时直播等功能。EasyPlayer.js播放器右键点击时,会看到视频流以及</div> </li> <li><a href="/article/1749137484769411072.htm" title="ARM平台移植ZLMediaKit" target="_blank">ARM平台移植ZLMediaKit</a> <span class="text-muted">小宇宙L</span> <a class="tag" taget="_blank" href="/search/arm/1.htm">arm</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>ZLMediaKit是一套高性能的流媒体服务框架,目前支持rtmp、rtsp、hls、http-flv等流媒体协议,支持linux、macos、windows三大PC平台和ios、android两大移动端平台。host主机:ubuntu18.04移植平台:rk3568交叉编译链版本:gccversion9.3.0https://github.com/ZLMediaKit/ZLMediaKit1,下</div> </li> <li><a href="/article/1747598859112038400.htm" title="Docker部署 SRS rtmp/flv流媒体服务器" target="_blank">Docker部署 SRS rtmp/flv流媒体服务器</a> <span class="text-muted">迷糊小面包</span> <a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>一、介绍SRS(SimpleRealtimeServer)是一款开源的流媒体服务器,具有高性能、高可靠性、高灵活性的特点,能够支持直播、点播、转码等多种流媒体应用场景。SRS不仅提供了流媒体服务器,还提供了适用于多种平台的客户端SDK和在线转码等辅助服务,是一款十分强大的流媒体解决方案。SRS在流媒体直播、点播、转码等方面的应用场景十分丰富:在直播行业方面,SRS能够支持多种流媒体协议(如RTMP</div> </li> <li><a href="/article/1745796461536231424.htm" title="音视频开发成长之路与音视频知识总结" target="_blank">音视频开发成长之路与音视频知识总结</a> <span class="text-muted">徐福记456</span> <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/%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91%E5%9F%BA%E7%A1%80/1.htm">音视频开发基础</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E8%BF%9B%E9%98%B6%E6%88%90%E9%95%BF/1.htm">音视频进阶成长</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E5%B7%A5%E4%BD%9C%E6%96%B9%E5%90%91/1.htm">音视频工作方向</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E6%BA%90%E5%BA%93/1.htm">音视频开源库</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93%E5%8D%8F%E8%AE%AE%E4%B8%8E%E9%9F%B3%E8%A7%86%E9%A2%91%E4%B9%A6%E7%B1%8D/1.htm">流媒体协议与音视频书籍</a> <div>音视频涉及语音信号处理、数字图像处理、信息论、封装格式、编解码、流媒体协议、网络传输、渲染、算法等。在现实生活中,音视频扮演着越来越重要的角色,比如视频会议、直播、短视频、播放器、语音聊天等。因此,从事音视频是一件比较有意义的事情,机遇与挑战并存。本文将从几个维度进行介绍:音视频开发基础、音视频进阶成长、音视频工作方向、音视频开源库、流媒体协议与书籍。目录一、音视频开发基础1、音频基础2、通用基础</div> </li> <li><a href="/article/1745542128114614272.htm" title="RTMP vs SRT:延迟与最大带宽的比较" target="_blank">RTMP vs SRT:延迟与最大带宽的比较</a> <span class="text-muted">十年编程老舅</span> <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/RTSP/1.htm">RTSP</a><a class="tag" taget="_blank" href="/search/RTMP/1.htm">RTMP</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/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/SRT/1.htm">SRT</a> <div>引言文来自Haivision的白皮书,比较了RTMP和SRT两种流媒体协议的优缺点,并通过实验测试了两种协议在延迟和最大带宽两方面的表现。本文福利,免费领取C++音视频学习资料包+学习路线大纲、技术视频/代码,内容包括(音视频开发,面试题,FFmpeg,webRTC,rtmp,hls,rtsp,ffplay,编解码,推拉流,srs)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓介绍对于希望在IP上</div> </li> <li><a href="/article/1744932501467447296.htm" title="GB28181视频汇聚平台EasyCVR级联后,部分通道视频无法播放是什么原因?" target="_blank">GB28181视频汇聚平台EasyCVR级联后,部分通道视频无法播放是什么原因?</a> <span class="text-muted">EasyCVR</span> <a class="tag" taget="_blank" href="/search/EasyCVR/1.htm">EasyCVR</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/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>GB28181协议智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构,支持高清视频的接入和传输、分发,平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力。国标GB28181安防监控EasyCVR平台能通过标准接口与标准协议与第三方</div> </li> <li><a href="/article/1744804586327130112.htm" title="视频监控系统EasyCVR如何通过调用API接口查询和下载设备录像?" target="_blank">视频监控系统EasyCVR如何通过调用API接口查询和下载设备录像?</a> <span class="text-muted">EasyCVR</span> <a class="tag" taget="_blank" href="/search/EasyCVR/1.htm">EasyCVR</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/%E7%BD%91%E7%BB%9C/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>智慧安防平台EasyCVR是基于各种IP流媒体协议传输的视频汇聚和融合管理平台。视频流媒体服务器EasyCVR采用了开放式的网络结构,支持高清视频的接入和传输、分发,平台提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,此外,高清可视化视频监控平台EasyCVR还具备权限管理、设备管理、鉴权管理、流媒体接入与转发</div> </li> <li><a href="/article/1744224956255846400.htm" title="[转]聊聊RTMP,HLS,HTTP-FLV协议的优缺点" target="_blank">[转]聊聊RTMP,HLS,HTTP-FLV协议的优缺点</a> <span class="text-muted">青哥DevOps</span> <div>之前从事过一段时间的CDN相关工作,其实还是很不错的,目前CDN领域逐渐扩大,很多厂商也是倒的倒,赔的赔,只有那几个独角兽苟延残喘,从最开始的蓝汛,网宿,帝联到现在的腾讯云,阿里云也是经历了很多的时间,架构也是非常的精湛,下面给他家聊聊流媒体协议的一些优缺点,更多的是做一些直播、点播相关的事情HLS基于http协议;以识别.m3u8文件索引为准.ts文件播放;动态列表:实时更新ts文件,过期的会被</div> </li> <li><a href="/article/1742953968071360512.htm" title="rtsp学习记录" target="_blank">rtsp学习记录</a> <span class="text-muted">ketaotech</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81%E5%92%8C%E6%B5%81%E5%AA%92%E4%BD%93/1.htm">音视频编解码和流媒体</a><a class="tag" taget="_blank" href="/search/RTSP/1.htm">RTSP</a> <div>目录学习资料个人rtsp仓库文章视频标准学习资料个人rtsp仓库文档,标准,文章等:https://gitee.com/fedorayang/rtsp.git文章百度百科RTSP:https://baike.baidu.com/item/RTSP/1276768?fr=ge_ala流媒体协议之RTSP详解:https://zhuanlan.zhihu.com/p/622028835?utm_id=</div> </li> <li><a href="/article/1742343627104862208.htm" title="音视频通信" target="_blank">音视频通信</a> <span class="text-muted">jaronho</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>文章目录一、音视频通信流程二、流媒体协议1、RTSP2、RTMP3、HLS4、WebRTC一、音视频通信流程音视频通信完整流程有如下几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等。每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除、噪声抑制等,采集有麦克风阵列等,编解码有H.263,H.264、H.265等。二、流媒体协议1、RTSPRTSP一般不用作直播场景</div> </li> <li><a href="/article/1740689860743675904.htm" title="Windows搭建RTMP视频流服务(Nginx服务器版)" target="_blank">Windows搭建RTMP视频流服务(Nginx服务器版)</a> <span class="text-muted">wisdom_zhe</span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>文章目录引言1、安装FFmpeg2、安装Nginx服务器3、实现本地视频推流服务4、使用VLC或PotPlayer可视化播放器播放视频5、RTSP/RTMP系列文章引言RTSP和RTMP视频流的区别RTSP(Real-TimeStreamingProtocol)实时流媒体协议。RTSP定义流格式,流数据经由RTP传输;RTSP实时效果非常好,适合视频聊天,视频监控等方向。RTMP(RealTime</div> </li> <li><a href="/article/1740524552686944256.htm" title="Windows搭建RTSP视频流服务(EasyDarWin服务器版)" target="_blank">Windows搭建RTSP视频流服务(EasyDarWin服务器版)</a> <span class="text-muted">wisdom_zhe</span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java-ee/1.htm">java-ee</a><a class="tag" taget="_blank" href="/search/web/1.htm">web</a> <div>文章目录引言1、安装FFmpeg2、安装EasyDarWin3、实现本地\虚拟摄像头推流服务4、使用VLC或PotPlayer可视化播放器播放视频5、RTSP/RTMP系列文章引言RTSP和RTMP视频流的区别RTSP(Real-TimeStreamingProtocol)实时流媒体协议。RTSP定义流格式,流数据经由RTP传输;RTSP实时效果非常好,适合视频聊天,视频监控等方向。RTMP(Re</div> </li> <li><a href="/article/1740172528678092800.htm" title="java语言使用ffmpeg在windows系统中实现视频推流拉流" target="_blank">java语言使用ffmpeg在windows系统中实现视频推流拉流</a> <span class="text-muted">cah黎明就在眼前</span> <a class="tag" taget="_blank" href="/search/java%E5%90%84%E7%B1%BB%E5%B7%A5%E5%85%B7%E7%9A%84%E4%BD%BF%E7%94%A8/1.htm">java各类工具的使用</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a> <div>本文主要详细介绍在windows系统下,采用java语言来实现rtmp流媒体协议的视频的推流拉流。利用screencapturerrecorder录屏工具结合ffmpeg.exe文件捕获桌面视频流并推到nginx服务器,随后使用浏览器进行视频流的拉取并播放。文末给出相关工具的下载链接。一、环境准备首先我们要准备好nginx的环境并安装好录屏工具1、nginx服务搭建解压nginx压缩包到D盘,可以</div> </li> <li><a href="/article/1740170728004665344.htm" title="流媒体协议之RTSP详解" target="_blank">流媒体协议之RTSP详解</a> <span class="text-muted">壹零仓</span> <a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93/1.htm">流媒体</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/rtsp/1.htm">rtsp</a><a class="tag" taget="_blank" href="/search/rtp%2Frtcp/1.htm">rtp/rtcp</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93%E4%BC%A0%E8%BE%93/1.htm">流媒体传输</a><a class="tag" taget="_blank" href="/search/H264/1.htm">H264</a> <div>1流媒体协议之RTSP详解文章目录1流媒体协议之RTSP详解1.1RTSP概述1.2RTSP协议交互过程1.2.1RTSP基于TCP交互过程1.2.2RTSP基于HTTP的交互过程1.3RTSP协议拉流详解1.3.1OPTION方法1.3.2DESCRIBE方法1.3.3SETUP方法1.3.4PLAY方法1.3.5TEARDOWN方法1.3.6其他方法1.4RTSP推流方式说明1.1RTSP概述</div> </li> <li><a href="/article/1739392697011027968.htm" title="什么是流媒体" target="_blank">什么是流媒体</a> <span class="text-muted">WongKyunban</span> <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/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>所谓的流媒体是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网上即时传输音视频以供观赏的一种技术。如果没有流媒体技术,那么在观赏前必须下载整个媒体文件。常见流媒体协议:RTSPRTPHTTPHLSRTMPHTTP-FLV等目前应用流媒体技术就多的场景就是直播场景。完整的直播系统包括以下这些过程:音视频采集音视频编码音视频推流音视频拉流音视频分发音视频转码认证鉴权还有响应政策方面的自动鉴黄它的</div> </li> <li><a href="/article/1738390123516583936.htm" title="流媒体编程记录-RTSP" target="_blank">流媒体编程记录-RTSP</a> <span class="text-muted">我起了 一枪秒了</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>一、需求写一个代码可以接收rtsp流二、怎么搞那么,什么是rtsp流?乍一看都是p话。首先了解一下各种知识,rtsp流,h264,一大堆RTSP先看看rtsp是什么吧流媒体协议RTSP初篇(一)看着看着会问,rtp和rtcp是什么RTSP+RTP协议浅析协议篇—RTP&RTCP&RTSP流媒体协议RTSP末篇之RTP(三)看着看着会问,http也能传东西,和http有啥区别?要钱才能看【视频】视频</div> </li> <li><a href="/article/1737295222716555264.htm" title="开发短视频矩阵实时直播需要用到哪些技术?" target="_blank">开发短视频矩阵实时直播需要用到哪些技术?</a> <span class="text-muted">(ylhd898978)</span> <a class="tag" taget="_blank" href="/search/%E6%97%A0%E4%BA%BA%E7%9B%B4%E6%92%AD/1.htm">无人直播</a><a class="tag" taget="_blank" href="/search/%E7%9F%AD%E8%A7%86%E9%A2%91%E7%9F%A9%E9%98%B5%E5%89%AA%E8%BE%91%E7%B3%BB%E7%BB%9F%E7%AE%97%E6%B3%95/1.htm">短视频矩阵剪辑系统算法</a><a class="tag" taget="_blank" href="/search/%E7%9F%AD%E8%A7%86%E9%A2%91%E7%9F%A9%E9%98%B5%E7%B3%BB%E7%BB%9F%E6%BA%90%E7%A0%81/1.htm">短视频矩阵系统源码</a> <div>现在越来越多的人或公司都想开发出自己的直播网站或者直播APP,但是在技术这一块又不知道怎么下手,那么我就给大家讲一下在视频直播系统开发中要了解那些知识和技术:在开发上需要用的技术有:摄像头采集音视频编解码流媒体协议音视频流推送到流媒体服务器流媒体网络分发用户播放器音视频同步网络延迟自适应需要录制,多种视频文件的格式和封装语言:C、C++、html、php、mysql......开发环境:嵌入式,L</div> </li> <li><a href="/article/1736254932664770560.htm" title="视频音频编码解码技术初探" target="_blank">视频音频编码解码技术初探</a> <span class="text-muted">WongKyunban</span> <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/%E8%A7%86%E9%9F%B3%E9%A2%91%E7%BC%96%E7%A0%81%E6%8A%80%E6%9C%AF/1.htm">视音频编码技术</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81/1.htm">视频编码</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E9%A2%91%E7%BC%96%E7%A0%81/1.htm">音频编码</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93/1.htm">流媒体</a><a class="tag" taget="_blank" href="/search/%E5%B0%81%E8%A3%85%E6%A0%BC%E5%BC%8F/1.htm">封装格式</a> <div>视频音频编码解码技术初探视频播放器原理流媒体协议技术封装技术视频压缩编码技术音频压缩编码技术网络视音频服务平时我们下载的电影、音乐文件有各种各样的格式,它们用不同的后缀来表示,如avi、rmvb、mp4、flv、mkv等,这些格式代表了不同的封装格式。所谓的封装格式就是把视频数据和音频数据打包成一个文件的规范。视频播放器原理视频播放器播放一个网上的视频文件的经过:CreatedwithRaphaë</div> </li> <li><a href="/article/1736254933784649728.htm" title="直播原理" target="_blank">直播原理</a> <span class="text-muted">WongKyunban</span> <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/%E7%9B%B4%E6%92%AD%E5%8E%9F%E7%90%86/1.htm">直播原理</a> <div>无论哪种直播,都离不开端与端之间的交互。原理:(1)通过计算机上的音视频输入设备或手机端的摄像头和麦克风实时录制音视频流;(2)然后将音视频流编码;(3)最后把编好码的数据包通过直播协议实时地发送给服务器;(4)服务器再通过流媒体协议把数据包实时地分发出去;(5)观看的终端通过直播协议实时请求数据包,并进行解码播放。直播架构主要由三部分组成:(1)采集音视频数据然后推流的过程在这一部分主要的工作有</div> </li> <li><a href="/article/1735842835803987968.htm" title="On-Demand 和自金融" target="_blank">On-Demand 和自金融</a> <span class="text-muted">曹博士</span> <div>On-Demand是源于互联网的一个概念。在互联网的发展初期,受带宽的限制,大的影视文件下载不只是慢,而且经常失败。流媒体(Streaming)技术通过引入buffer的机制。创建流媒体协议,通过流媒体服务器和播放器。可以实现边看边下载的on-demand模式,而且下载的状态可以随时改变,暂停和恢复,断点续传,降低了下载失败的风险,极大改善了用户的体验。没有流媒体技术就没有今天丰富多彩的内容和自媒</div> </li> <li><a href="/article/1735514896243679232.htm" title="ZLMediaKit学习(一):Window环境下推拉流" target="_blank">ZLMediaKit学习(一):Window环境下推拉流</a> <span class="text-muted">Mikite</span> <a class="tag" taget="_blank" href="/search/%E5%8E%9F%E5%88%9B/1.htm">原创</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><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> <div>ZLMediaKit是一套高性能的流媒体服务框架,目前支持rtmp/rtsp/hls/http-flv流媒体协议。该项目已支持linux、macos、windows、ios、android平台,支持的编码格式包括H264、AAC、H265(仅rtsp支持H265);采用的模型是多线程IO多路复用非阻塞式编程(linux下采用epoll、其他平台采用select)。该框架基于C++11开发,避免使用</div> </li> <li><a href="/article/1735497484668559360.htm" title="Linux基础项目开发2:物联网监控——视频监控方案介绍(一)" target="_blank">Linux基础项目开发2:物联网监控——视频监控方案介绍(一)</a> <span class="text-muted">妄北呀</span> <a class="tag" taget="_blank" href="/search/Linux%E9%A1%B9%E7%9B%AE%E5%BC%80%E5%8F%91/1.htm">Linux项目开发</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/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E7%89%A9%E8%81%94%E7%BD%91/1.htm">物联网</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E7%9B%91%E6%8E%A7/1.htm">视频监控</a><a class="tag" taget="_blank" href="/search/Linux%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91/1.htm">Linux应用开发</a><a class="tag" taget="_blank" href="/search/Linux%E9%A1%B9%E7%9B%AE%E5%AE%9E%E7%8E%B0/1.htm">Linux项目实现</a><a class="tag" taget="_blank" href="/search/IMX6ull/1.htm">IMX6ull</a> <div>前言:这次我们来做一个关于视频监控的基础小项目,需要我们用到网络的相关知识,还会学到好多优秀的网络协议,下面让我们开始对物联网视频监控进行一个大体框架的介绍吧目录项目内容:1.视频监控方案介绍2.视频监控的作用3.使用流媒体4.几种流媒体协议5.流媒体服务:两端加一服项目内容:1.视频监控方案介绍介绍2种方案,一种可以运行在低性能的板子上,另一种是热门的流媒体方案MJPG-streamer方案的实</div> </li> <li><a href="/article/1730094191146512384.htm" title="流媒体协议HLS和DASH" target="_blank">流媒体协议HLS和DASH</a> <span class="text-muted">夏日 の blog</span> <a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%AF%86%E6%B5%81%E9%87%8F%E5%88%86%E6%9E%90/1.htm">加密流量分析</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93%E5%8D%8F%E8%AE%AE/1.htm">流媒体协议</a><a class="tag" taget="_blank" href="/search/HLS/1.htm">HLS</a><a class="tag" taget="_blank" href="/search/DASH/1.htm">DASH</a> <div>文章目录HLS定义HLS架构M3U8文件DASH定义DASH架构MPD文件HLS和DASH的对比常见格式参考文献HLS定义HLS全称是HTTPLiveStreaming,是由苹果公司提出的动态自适应流媒体协议,于2009年发布HLS架构一个典型的HLS流媒体系统主要由三部分组成,分别为服务器端,内容分发器和客户端服务器端:主要由视频文件录入、视频文件压缩编码及视频文件切片三部分组成多媒体编码器(M</div> </li> <li><a href="/article/74.htm" title="sql统计相同项个数并按名次显示" target="_blank">sql统计相同项个数并按名次显示</a> <span class="text-muted">朱辉辉33</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>现在有如下这样一个表: A表 ID Name time ------------------------------ 0001 aaa 2006-11-18 0002 ccc 2006-11-18 0003 eee 2006-11-18 0004 aaa 2006-11-18 0005 eee 2006-11-18 0004 aaa 2006-11-18 0002 ccc 20</div> </li> <li><a href="/article/201.htm" title="Android+Jquery Mobile学习系列-目录" target="_blank">Android+Jquery Mobile学习系列-目录</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/JQuery+Mobile/1.htm">JQuery Mobile</a> <div>最近在研究学习基于Android的移动应用开发,准备给家里人做一个应用程序用用。向公司手机移动团队咨询了下,觉得使用Android的WebView上手最快,因为WebView等于是一个内置浏览器,可以基于html页面开发,不用去学习Android自带的七七八八的控件。然后加上Jquery mobile的样式渲染和事件等,就能非常方便的做动态应用了。   从现在起,往后一段时间,我打算</div> </li> <li><a href="/article/328.htm" title="如何给线程池命名" target="_blank">如何给线程池命名</a> <span class="text-muted">daysinsun</span> <a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E6%B1%A0/1.htm">线程池</a> <div>        在系统运行后,在线程快照里总是看到线程池的名字为pool-xx,这样导致很不好定位,怎么给线程池一个有意义的名字呢。参照ThreadPoolExecutor类的ThreadFactory,自己实现ThreadFactory接口,重写newThread方法即可。参考代码如下:     public class Named</div> </li> <li><a href="/article/455.htm" title="IE 中"HTML Parsing Error:Unable to modify the parent container element before the" target="_blank">IE 中"HTML Parsing Error:Unable to modify the parent container element before the</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E8%A7%A3%E6%9E%90/1.htm">解析</a><a class="tag" taget="_blank" href="/search/error/1.htm">error</a><a class="tag" taget="_blank" href="/search/readyState/1.htm">readyState</a> <div>  错误: IE 中"HTML Parsing Error:Unable to modify the parent container element before the child element is closed"     现象: 同事之间几个IE 测试情况下,有的报这个错,有的不报。经查询资料后,可归纳以下原因。</div> </li> <li><a href="/article/582.htm" title="java上传" target="_blank">java上传</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>我们在做web项目中通常会遇到上传文件的情况,用struts等框架的会直接用的自带的标签和组件,今天说的是利用servlet来完成上传。 我们这里利用到commons-fileupload组件,相关jar包可以取apache官网下载:http://commons.apache.org/ 下面是servlet的代码: //定义一个磁盘文件工厂 DiskFileItemFactory fact</div> </li> <li><a href="/article/709.htm" title="SpringMVC配置学习" target="_blank">SpringMVC配置学习</a> <span class="text-muted">510888780</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a> <div>spring MVC配置详解 现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。   一、Spring MVC环境搭建:(Spring 2.5.6 + Hi</div> </li> <li><a href="/article/836.htm" title="spring mvc-jfreeChart 柱图(1)" target="_blank">spring mvc-jfreeChart 柱图(1)</a> <span class="text-muted">布衣凌宇</span> <a class="tag" taget="_blank" href="/search/jfreechart/1.htm">jfreechart</a> <div>第一步:下载jfreeChart包,注意是jfreeChart文件lib目录下的,jcommon-1.0.23.jar和jfreechart-1.0.19.jar两个包即可; 第二步:配置web.xml; web.xml代码如下 <servlet>     <servlet-name>jfreechart</servlet-nam</div> </li> <li><a href="/article/963.htm" title="我的spring学习笔记13-容器扩展点之PropertyPlaceholderConfigurer" target="_blank">我的spring学习笔记13-容器扩展点之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 P</div> </li> <li><a href="/article/1090.htm" title="java 线程池使用 Runnable&Callable&Future" target="_blank">java 线程池使用 Runnable&Callable&Future</a> <span class="text-muted">antlove</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/Runnable/1.htm">Runnable</a><a class="tag" taget="_blank" href="/search/callable/1.htm">callable</a><a class="tag" taget="_blank" href="/search/future/1.htm">future</a> <div>1. 创建线程池 ExecutorService executorService = Executors.newCachedThreadPool();   2. 执行一次线程,调用Runnable接口实现 Future<?> future = executorService.submit(new DefaultRunnable()); System.out.prin</div> </li> <li><a href="/article/1217.htm" title="XML语法元素结构的总结" target="_blank">XML语法元素结构的总结</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/%E6%A0%91%E7%BB%93%E6%9E%84/1.htm">树结构</a> <div>1.XML介绍1969年   gml (主要目的是要在不同的机器进行通信的数据规范)1985年   sgml  standard generralized markup language1993年   html(www网)1998年  xml   extensible markup language</div> </li> <li><a href="/article/1344.htm" title="改变eclipse编码格式" target="_blank">改变eclipse编码格式</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A0%81%E6%A0%BC%E5%BC%8F/1.htm">编码格式</a> <div>1.改变整个工作空间的编码格式         改变整个工作空间的编码格式,这样以后新建的文件也是新设置的编码格式。         Eclipse->window->preferences->General->workspace-</div> </li> <li><a href="/article/1471.htm" title="javascript中return的设计缺陷" target="_blank">javascript中return的设计缺陷</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a> <div>代码1: <script> var gisService = (function(window) { return { name:function () { alert(1); } }; })(this); gisService.name(); &l</div> </li> <li><a href="/article/1598.htm" title="【持久化框架MyBatis3八】Spring集成MyBatis3" target="_blank">【持久化框架MyBatis3八】Spring集成MyBatis3</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Mybatis3/1.htm">Mybatis3</a> <div>pom.xml配置 Maven的pom中主要包括: MyBatis MyBatis-Spring Spring MySQL-Connector-Java Druid applicationContext.xml配置   <?xml version="1.0" encoding="UTF-8"?> &</div> </li> <li><a href="/article/1725.htm" title="java web项目启动时自动加载自定义properties文件" target="_blank">java web项目启动时自动加载自定义properties文件</a> <span class="text-muted">bitray</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E7%9B%91%E5%90%AC%E5%99%A8/1.htm">监听器</a><a class="tag" taget="_blank" href="/search/%E7%9B%B8%E5%AF%B9%E8%B7%AF%E5%BE%84/1.htm">相对路径</a> <div>创建一个类 public class ContextInitListener implements ServletContextListener 使得该类成为一个监听器。用于监听整个容器生命周期的,主要是初始化和销毁的。 类创建后要在web.xml配置文件中增加一个简单的监听器配置,即刚才我们定义的类。 <listener> <des</div> </li> <li><a href="/article/1852.htm" title="用nginx区分文件大小做出不同响应" target="_blank">用nginx区分文件大小做出不同响应</a> <span class="text-muted">ronin47</span> <div>昨晚和前21v的同事聊天,说到我离职后一些技术上的更新。其中有个给某大客户(游戏下载类)的特殊需求设计,因为文件大小差距很大——估计是大版本和补丁的区别——又走的是同一个域名,而squid在响应比较大的文件时,尤其是初次下载的时候,性能比较差,所以拆成两组服务器,squid服务于较小的文件,通过pull方式从peer层获取,nginx服务于较大的文件,通过push方式由peer层分发同步。外部发布</div> </li> <li><a href="/article/1979.htm" title="java-67-扑克牌的顺子.从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大" target="_blank">java-67-扑克牌的顺子.从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>package com.ljn.base; import java.util.Arrays; import java.util.Random; public class ContinuousPoker { /** * Q67 扑克牌的顺子 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。 * 2-10为数字本身,A为1,J为1</div> </li> <li><a href="/article/2106.htm" title="翟鸿燊老师语录" target="_blank">翟鸿燊老师语录</a> <span class="text-muted">ccii</span> <a class="tag" taget="_blank" href="/search/%E7%BF%9F%E9%B8%BF%E7%87%8A/1.htm">翟鸿燊</a> <div>一、国学应用智慧TAT之亮剑精神A 1. 角色就是人格     就像你一回家的时候,你一进屋里面,你已经是儿子,是姑娘啦,给老爸老妈倒怀水吧,你还觉得你是老总呢?还拿派呢?就像今天一样,你们往这儿一坐,你们之间是什么,同学,是朋友。     还有下属最忌讳的就是领导向他询问情况的时候,什么我不知道,我不清楚,该你知道的你凭什么不知道</div> </li> <li><a href="/article/2233.htm" title="[光速与宇宙]进行光速飞行的一些问题" target="_blank">[光速与宇宙]进行光速飞行的一些问题</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E9%97%AE%E9%A2%98/1.htm">问题</a> <div>      在人类整体进入宇宙时代,即将开展深空宇宙探索之前,我有几个猜想想告诉大家     仅仅是猜想。。。未经官方证实      1:要在宇宙中进行光速飞行,必须首先获得宇宙中的航行通行证,而这个航行通行证并不是我们平常认为的那种带钢印的证书,是什么呢? 下面我来告诉</div> </li> <li><a href="/article/2360.htm" title="oracle undo解析" target="_blank">oracle undo解析</a> <span class="text-muted">cwqcwqmax9</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>oracle undo解析2012-09-24 09:02:01     我来说两句       作者:虫师收藏    我要投稿 Undo是干嘛用的?         &nb</div> </li> <li><a href="/article/2487.htm" title="java中各种集合的详细介绍" target="_blank">java中各种集合的详细介绍</a> <span class="text-muted">dashuaifu</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9B%86%E5%90%88/1.htm">集合</a> <div>一,java中各种集合的关系图 Collection       接口的接口     对象的集合  ├ List           子接口   &n</div> </li> <li><a href="/article/2614.htm" title="卸载windows服务的方法" target="_blank">卸载windows服务的方法</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/service/1.htm">service</a> <div>卸载Windows服务的方法 在Windows中,有一类程序称为服务,在操作系统内核加载完成后就开始加载。这里程序往往运行在操作系统的底层,因此资源占用比较大、执行效率比较高,比较有代表性的就是杀毒软件。但是一旦因为特殊原因不能正确卸载这些程序了,其加载在Windows内的服务就不容易删除了。即便是删除注册表中的相 应项目,虽然不启动了,但是系统中仍然存在此项服务,只是没有加载而已。如果安装其他</div> </li> <li><a href="/article/2741.htm" title="Warning: The Copy Bundle Resources build phase contains this target's Info.plist" target="_blank">Warning: The Copy Bundle Resources build phase contains this target's Info.plist</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/xcode/1.htm">xcode</a> <div>    http://developer.apple.com/iphone/library/qa/qa2009/qa1649.html Excerpt: You are getting this warning because you probably added your Info.plist file to your Copy Bundle </div> </li> <li><a href="/article/2868.htm" title="2014之C++学习笔记(一)" target="_blank">2014之C++学习笔记(一)</a> <span class="text-muted">Etwo</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/Etwo/1.htm">Etwo</a><a class="tag" taget="_blank" href="/search/Etwo/1.htm">Etwo</a><a class="tag" taget="_blank" href="/search/iterator/1.htm">iterator</a><a class="tag" taget="_blank" href="/search/%E8%BF%AD%E4%BB%A3%E5%99%A8/1.htm">迭代器</a> <div>        已经有很长一段时间没有写博客了,可能大家已经淡忘了Etwo这个人的存在,这一年多以来,本人从事了AS的相关开发工作,但最近一段时间,AS在天朝的没落,相信有很多码农也都清楚,现在的页游基本上达到饱和,手机上的游戏基本被unity3D与cocos占据,AS基本没有容身之处。so。。。最近我并不打算直接转型</div> </li> <li><a href="/article/2995.htm" title="js跨越获取数据问题记录" target="_blank">js跨越获取数据问题记录</a> <span class="text-muted">haifengwuch</span> <a class="tag" taget="_blank" href="/search/jsonp/1.htm">jsonp</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a> <div>js的跨越问题,普通的ajax无法获取服务器返回的值。   第一种解决方案,通过getson,后台配合方式,实现。 Java后台代码: protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String ca</div> </li> <li><a href="/article/3122.htm" title="蓝色jQuery导航条" target="_blank">蓝色jQuery导航条</a> <span class="text-muted">ini</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div>效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/39.htmHTML文件代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>jQuery鼠标悬停上下滑动导航条 - 柯乐义<</div> </li> <li><a href="/article/3249.htm" title="linux部署jdk,tomcat,mysql" target="_blank">linux部署jdk,tomcat,mysql</a> <span class="text-muted">kerryg</span> <a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>1、安装java环境jdk:     一般系统都会默认自带的JDK,但是不太好用,都会卸载了,然后重新安装。    1.1)、卸载:      (rpm -qa :查询已经安装哪些软件包;        rmp -q 软件包:查询指定包是否已</div> </li> <li><a href="/article/3376.htm" title="DOMContentLoaded VS onload VS onreadystatechange" target="_blank">DOMContentLoaded VS onload VS onreadystatechange</a> <span class="text-muted">mutongwu</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a> <div>1. DOMContentLoaded 在页面html、script、style加载完毕即可触发,无需等待所有资源(image/iframe)加载完毕。(IE9+) 2. onload是最早支持的事件,要求所有资源加载完毕触发。 3. onreadystatechange 开始在IE引入,后来其它浏览器也有一定的实现。涉及以下 document , applet, embed, fra</div> </li> <li><a href="/article/3503.htm" title="sql批量插入数据" target="_blank">sql批量插入数据</a> <span class="text-muted">qifeifei</span> <a class="tag" taget="_blank" href="/search/%E6%89%B9%E9%87%8F%E6%8F%92%E5%85%A5/1.htm">批量插入</a> <div>hi,   自己在做工程的时候,遇到批量插入数据的数据修复场景。我的思路是在插入前准备一个临时表,临时表的整理就看当时的选择条件了,临时表就是要插入的数据集,最后再批量插入到数据库中。    WITH tempT AS ( SELECT item_id AS combo_id, item_id, now() AS create_date FROM a</div> </li> <li><a href="/article/3630.htm" title="log4j打印日志文件 如何实现相对路径到 项目工程下" target="_blank">log4j打印日志文件 如何实现相对路径到 项目工程下</a> <span class="text-muted">thinkfreer</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%BF%97/1.htm">日志</a> <div>最近为了实现统计一个网站的访问量,记录用户的登录信息,以方便站长实时了解自己网站的访问情况,选择了Apache 的log4j,但是在选择相对路径那块 卡主了,X度了好多方法(其实大多都是一样的内用,还一个字都不差的),都没有能解决问题,无奈搞了2天终于解决了,与大家分享一下 需求: 用户登录该网站时,把用户的登录名,ip,时间。统计到一个txt文档里,以方便其他系统调用此txt。项目名</div> </li> <li><a href="/article/3757.htm" title="linux下mysql-5.6.23.tar.gz安装与配置" target="_blank">linux下mysql-5.6.23.tar.gz安装与配置</a> <span class="text-muted">笑我痴狂</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a> <div>1.卸载系统默认的mysql [root@localhost ~]# rpm -qa | grep mysql mysql-libs-5.1.66-2.el6_3.x86_64 mysql-devel-5.1.66-2.el6_3.x86_64 mysql-5.1.66-2.el6_3.x86_64 [root@localhost ~]# rpm -e mysql-libs-5.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>