HLS协议全解

一、HLS是什么

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

 

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

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

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

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

 

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

 

二、HLS的工作流程

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

苹果官方文档的配图

2.1 三个大部分的解析

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

 

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

 

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

 

2.2上面的图的每一块解释

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

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

 

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

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

 

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

 

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

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

 

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

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

 

5. 索引文件(PlayLists

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

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

4. .m3u8 PlayLists文件

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

 

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

 

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

 

三、会话模式

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

1.点播VOD

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

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

 

2.Live 会话:

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

 

3.LiveVOD

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

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

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

 

四、协议抓取分析

4.1HLS协议规定:

视频的封装格式是TS

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

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

 

4.2主索引 :

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

 

#EXTM3U

#EXT-X-VERSION:3

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

30647_JIjP2_400/index.m3u8?Dnion_vsnae=30647_JIjP2

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

30647_JIjP2_700/index.m3u8?Dnion_vsnae=30647_JIjP2

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

30647_JIjP2_1024/index.m3u8?Dnion_vsnae=30647_JIjP2

 

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

 

1.

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

 

2.

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

 

3.

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

BANDWIDTH 指定码率

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

CODECS 指定流的编码类型

 

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

 

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

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

图片来源于苹果官网

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

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

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

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

 

4.3 子索引 :

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

结果 :

 

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-MEDIA-SEQUENCE:5647

#EXT-X-TARGETDURATION:10

#EXTINF:9.560,

1462167932532_1462167932532.ts?Dnion_vsnae=30647_JIjP2

#EXTINF:6.520,

1462167942133_1462167942133.ts?Dnion_vsnae=30647_JIjP2

#EXTINF:9.960,

1462167948685_1462167948685.ts?Dnion_vsnae=30647_JIjP2

 

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

 

1.

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

 

2.

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

 

3.

#EXTINF 
格式 #EXTINF ,<br></span>每一份媒体文件的详细信息<span>, duration : </span>媒体持续时间<span>, </span>应该四舍五入为整数<span>,</span>上面的例子<span>,9.560</span>就是这一份媒体文件的持续时间<span><br> title : 1462167932532_1462167932532.ts?Dnion_vsnae=30647_JIjP2</span>这个是这一份媒体文件的<span>URL</span>地址<span>,</span></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1275222701622968320"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(流媒体:HLS专项)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1892381274820112384.htm" title="AI编剧系统深度解析:从算法架构到影视工业化应用实战" target="_blank">AI编剧系统深度解析:从算法架构到影视工业化应用实战</a> <span class="text-muted">Coderabo</span> <a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8/1.htm">R1模型企业级应用</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>媒体娱乐行业革命:AI编剧创意辅助系统架构解析与实战应用一、行业背景与技术架构在流媒体内容需求激增的当下,传统编剧模式面临产能瓶颈。AI编剧创意辅助系统通过自然语言处理(NLP)、生成对抗网络(GAN)和知识图谱技术,构建了包含剧本生成、情节优化、角色塑造等模块的智能创作平台。核心架构分为:知识图谱层:整合影视剧本数据库(IMSDb)、维基百科等结构化数据NLP处理层:基于Transformer的</div> </li> <li><a href="/article/1892314959031889920.htm" title="vue播放m3u8视频" target="_blank">vue播放m3u8视频</a> <span class="text-muted">zmyalh</span> <a class="tag" taget="_blank" href="/search/html%E8%A7%86%E9%A2%91video/1.htm">html视频video</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>这里封装成组件先安装插件npmivue-video-player-S//版本"^5.0.2"npmivideojs-flash-S//播放rtmpnpmivideojs-contrib-hls-S//播放m3u8父页面://传入视频地址videoUrl页面引入importvideosfrom"../../../components/videos/videos.vue";components:{vi</div> </li> <li><a href="/article/1892311807301840896.htm" title="python ffmpeg直播_FFmpeg+Nginx+Rtmp+HLS+Videojs搭建直播网站(理论与实战)" target="_blank">python ffmpeg直播_FFmpeg+Nginx+Rtmp+HLS+Videojs搭建直播网站(理论与实战)</a> <span class="text-muted">weixin_39565300</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ffmpeg%E7%9B%B4%E6%92%AD/1.htm">ffmpeg直播</a> <div>第1章直播原理与架构28分钟2节1-1直播原理与架构直播原理与架构「仅限付费用户」点击下载“直播原理与架构.pdf”[14:53]开始学习1-2甜点:福优学苑--简历包装与面试技巧甜点:福优学苑--简历包装与面试技巧「仅限付费用户」点击下载“福优学苑--简历包装与面试技巧--51other.pdf”[13:36]开始学习第2章亲手搭建FFmpeg+Nginx直播网站1小时48分钟11节2-1直播引</div> </li> <li><a href="/article/1892300939293945856.htm" title="使用nginx+rtmp+ffmpeg实现桌面直播" target="_blank">使用nginx+rtmp+ffmpeg实现桌面直播</a> <span class="text-muted">handsomestWei</span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/rtmp/1.htm">rtmp</a><a class="tag" taget="_blank" href="/search/live%E7%9B%B4%E6%92%AD/1.htm">live直播</a><a class="tag" taget="_blank" href="/search/%E6%8E%A8%E6%B5%81/1.htm">推流</a><a class="tag" taget="_blank" href="/search/%E6%8B%89%E6%B5%81/1.htm">拉流</a> <div>使用nginx+rtmp+ffmpeg实现桌面直播流媒体服务器搭建dockerrundocker镜像基于添加了rtmp模块的nginx,和ffmpegdockerpullalfg/nginx-rtmpdockerrun-d-p1935:1935-p8080:80--name=nginx-rtmpalfg/nginx-rtmprtmp模块说明进入容器内部查看dockerps|grepalfg/ngi</div> </li> <li><a href="/article/1892293368113852416.htm" title="《剑指 Offer》专项突破版 - 面试题 56 : 二叉搜索树中两节点的值之和(详解 C++ 实现的两种方法)" target="_blank">《剑指 Offer》专项突破版 - 面试题 56 : 二叉搜索树中两节点的值之和(详解 C++ 实现的两种方法)</a> <span class="text-muted">melonyzzZ</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/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/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>目录前言一、利用哈希表二、应用双指针前言题目链接:LCR056.两数之和IV-输入二叉搜索树-力扣(LeetCode)题目:给定一棵二叉搜索树和一个值k,请判断该二叉搜索树中是否存在值之和等于k的两个节点。假设二叉搜索树中节点的值均唯一。例如,在下图所示的二叉搜索树中,存在值之和等于12的两个节点(节点5和节点7),但不存在值之和为22的两个节点。分析:解决这个问题自然需要遍历二叉树中的所有节点,</div> </li> <li><a href="/article/1892193485797257216.htm" title="[总结] 音视频开发工程师之路" target="_blank">[总结] 音视频开发工程师之路</a> <span class="text-muted">二进制怪兽</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>前言音视频开发是一个涉及多个技术领域的复杂方向,涵盖了音频处理、视频渲染、编解码技术、流媒体传输等多个方面。以下是一个简要的学习路线指南,帮助你逐步掌握音视频开发的核心技能。基础知识计算机科学基础:掌握操作系统、计算机网络、数据结构和算法等基础知识。数学基础:了解傅里叶变换、线性代数、信号处理等数学知识,这些是音视频编-解码和处理的基石。编程语言:熟练掌握C/C++,这是音视频开发中最常用的语言;</div> </li> <li><a href="/article/1892111645929435136.htm" title="遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)" target="_blank">遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)</a> <span class="text-muted">岁月如歌,青春不败</span> <a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%80%81%E9%81%A5%E6%84%9F/1.htm">生态遥感</a><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/cnn/1.htm">cnn</a><a class="tag" taget="_blank" href="/search/transformer/1.htm">transformer</a><a class="tag" taget="_blank" href="/search/%E9%81%A5%E6%84%9F/1.htm">遥感</a><a class="tag" taget="_blank" href="/search/%E9%81%A5%E6%84%9F%E5%BD%B1%E5%83%8F/1.htm">遥感影像</a> <div>我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时代已然来临。一:深度卷积网络知识1.深度学习在遥感图像识别中的范式和问题2.深度学习的历史发展历程3.机器学习,深度学习等任务的基本处理流程4.卷积神经网络的基本原理5</div> </li> <li><a href="/article/1892058530568007680.htm" title="Java基础专项复习7——事务" target="_blank">Java基础专项复习7——事务</a> <span class="text-muted">Ttang23</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>Java基础专项复习系列目录1、Java基础专项复习1——函数关键字static-CSDN博客2、Java基础专项复习2——集合-CSDN博客3、Java基础专项复习3——Map集合-CSDN博客4、Java基础专项复习4——IO流-CSDN博客5、Java基础专项复习5——异常-CSDN博客6、Java基础专项复习6——多线程-CSDN博客文章目录目录Java基础专项复习系列目录文章目录1.1事</div> </li> <li><a href="/article/1891785497869611008.htm" title="如何自建obs服务器,使用 Nginx+OBS 搭建rmtp直播服务器并进行直播" target="_blank">如何自建obs服务器,使用 Nginx+OBS 搭建rmtp直播服务器并进行直播</a> <span class="text-muted">卓相</span> <a class="tag" taget="_blank" href="/search/%E5%A6%82%E4%BD%95%E8%87%AA%E5%BB%BAobs%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">如何自建obs服务器</a> <div>目录简介和安装配置OBS推流运行拉流完成简介和安装Nginx本身是一个非常出色的HTTP服务器,OBS(OpenBroadcasterSoftware)是一个免费且开源的,全平台支持的视频录制和直播软件。这两个东西通过一个nginx的模块nginx-rtmp-module组合在一起,即可以搭建一个功能流媒体服务器。这个流媒体服务器可以支持RTMP和HLS(LiveHttpStream)。FFmpe</div> </li> <li><a href="/article/1891150785908109312.htm" title="【一文读懂】什么是RTSP协议?" target="_blank">【一文读懂】什么是RTSP协议?</a> <span class="text-muted">Bl_a_ck</span> <a class="tag" taget="_blank" href="/search/%E9%80%9A%E8%AE%AF%E5%8D%8F%E8%AE%AE/1.htm">通讯协议</a><a class="tag" taget="_blank" href="/search/udp/1.htm">udp</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/rtsp/1.htm">rtsp</a> <div>RTSP协议(Real-TimeStreamingProtocol)RTSP(Real-TimeStreamingProtocol)是一个网络控制协议,用于在实时流媒体传输中管理多媒体数据的传输。RTSP并不传输数据本身,而是用于控制流媒体服务器,类似于HTTP协议,但它主要用于多媒体流的控制,比如音视频流的播放、暂停、停止等操作。工作原理RTSP协议本质上是一个客户端-服务器协议。客户端发起请求</div> </li> <li><a href="/article/1890679436475428864.htm" title="腾讯26届实习生招聘火热开启~可内推" target="_blank">腾讯26届实习生招聘火热开启~可内推</a> <span class="text-muted">飞300</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%B8%9A%E7%95%8C%E8%B5%84%E8%AE%AF/1.htm">业界资讯</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a> <div>腾讯2025实习基地专项启动啦!报名自即日起至2月25日面向毕业时间在2025年9月1日-2026年12月31日期间在校大学生求职辅导、简历直推、专场面试⭐7大岗位,提前投、优先面、简历直推、快人一步⭐软件开发-后台开发方向软件开发-移动客户端开发方向软件开发-PC客户端开发方向软件开发-游戏客户端开发方向软件开发-前端开发方向软件开发-测试开发方向技术运营简历内推链接:https://join.</div> </li> <li><a href="/article/1890629637634060288.htm" title="什么是RTMP 和 RTSP?它们之间有什么区别?" target="_blank">什么是RTMP 和 RTSP?它们之间有什么区别?</a> <span class="text-muted">wljslmz</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E6%8A%80%E6%9C%AF/1.htm">网络技术</a><a class="tag" taget="_blank" href="/search/RTMP/1.htm">RTMP</a><a class="tag" taget="_blank" href="/search/RTSP/1.htm">RTSP</a> <div>你好,这里是网络技术联盟站。视频盛行的时代,流媒体技术越来越重要,在本文中,我们将讨论两种流行的流媒体协议:RTMP和RTSP。什么是流协议?简单地说,流协议就是在两个通信系统之间传输多媒体文件的一套规则,它定义了视频文件将如何分解为小数据包以及它们在互联网上传输的顺序,RTMP与RTSP是比较常见的流媒体协议。RTMP英文全称:Real-TimeMessagingProtocol中文意思:实时消</div> </li> <li><a href="/article/1890416511470858240.htm" title="webrtc-stream和m7s可以实现thingsboard加载视频的功能,还有其其他网页的方法也可以实现如flask" target="_blank">webrtc-stream和m7s可以实现thingsboard加载视频的功能,还有其其他网页的方法也可以实现如flask</a> <span class="text-muted">鼾声鼾语</span> <a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E4%BA%91%E5%B9%B3%E5%8F%B0/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/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a> <div>方法1,推荐参考的案例:去学习webrtc-stream下载地址:去下载方法2,推荐:m7s下载地址:去下载m7s流媒体服务搭建方法方法3不推荐,不能够直接迁入到thingsboard中flask实现网页读取rtsp视频流创建app.py在app.py同级目录下创建文件夹和htmltemplates/index.html启动app.py,然后在地址中就可以看到视频了</div> </li> <li><a href="/article/1890320802339942400.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> <div>•实时播放:流媒体通过网络传输多媒体数据(如音频、视频),允许用户在数据传输过程中就开始播放,而不是等到所有数据都下载完毕。这依赖于以下几个关键因素:•网络控制协议:例如RTSP(Real-TimeStreamingProtocol)用于控制流媒体会话,RTP(Real-timeTransportProtocol)用于数据传输,而RTCP(RTPControlProtocol)用于监控质量和提供反</div> </li> <li><a href="/article/1890023707745775616.htm" title="合合信息启信宝助力国家自然科学基金委员会重点专项推进" target="_blank">合合信息启信宝助力国家自然科学基金委员会重点专项推进</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%E5%A4%A7%E6%95%B0%E6%8D%AE%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">人工智能大数据自然语言处理</a> <div>近日,国家自然科学基金委员会公布了2024年度宏观调控专项“数据市场制度设计与关键技术”的评审结果。由中国科学院大学、中国社会科学院数量经济与技术经济研究所和清华大学共同申报的《数据资源统计监测与市场价值评估的理论与方法研究》项目成功获批立项。上海合合信息科技股份有限公司(股票代码:688615)作为课题支撑合作单位,将为课题研究团队提供多维度数据源支持与智能数据分析能力,共同为数字经济发展贡献力</div> </li> <li><a href="/article/1889548720693899264.htm" title="RTP协议详解" target="_blank">RTP协议详解</a> <span class="text-muted">dusk0825</span> <a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93/1.htm">流媒体</a> <div>RTP协议负责对流媒体数据进行封包并实现媒体流的实时传输,即它按照RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进行数据包的传输;RTP本身只保证实时数据的传输,并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。一、RTP数据包格式RTP码流由多个RTP包组成,每个RTP包,由RTP头标准字段(固定12字节)、RTP头扩展字段、RTP负载、</div> </li> <li><a href="/article/1889427441391300608.htm" title="FFmpeg 命令规则与参数详解:输入/输出 YUV 文件的要求与分析" target="_blank">FFmpeg 命令规则与参数详解:输入/输出 YUV 文件的要求与分析</a> <span class="text-muted">陈皮话梅糖@</span> <a class="tag" taget="_blank" href="/search/FFmpeg%E9%9F%B3%E8%A7%86%E9%A2%91%E9%AB%98%E9%98%B6%E6%8A%80%E6%9C%AF%E8%AE%B2%E8%A7%A3/1.htm">FFmpeg音视频高阶技术讲解</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>FFmpeg命令规则与参数详解:输入/输出YUV文件的要求与分析FFmpeg是一个强大的多媒体处理工具,支持视频、音频的编解码、格式转换、流媒体处理等功能。使用FFmpeg时,命令行参数的配置非常重要,尤其是处理YUV文件时,需要明确指定输入/输出的格式、分辨率、帧率等参数。本文将详细分析FFmpeg命令的规则和要求,特别是针对YUV文件的输入和输出。1.FFmpeg命令的基本结构FFmpeg命令</div> </li> <li><a href="/article/1889099096128548864.htm" title="TOGAF 企业架构 3 企业数字化专项顶层设计" target="_blank">TOGAF 企业架构 3 企业数字化专项顶层设计</a> <span class="text-muted">装B五分钟,挨打两小时</span> <a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A%E6%9E%B6%E6%9E%84/1.htm">企业架构</a><a class="tag" taget="_blank" href="/search/Togaf/1.htm">Togaf</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/togaf/1.htm">togaf</a><a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A%E6%9E%B6%E6%9E%84/1.htm">企业架构</a> <div>文章目录TOGAF企业架构3企业数字化专项顶层设计1导语:2企业数字化发展规律与顶层设计意义案例4一、业务部“点菜”、IT叫苦。案例23何为数字化数字化目的是要达到:科学(决策)、透明(运营)、高效(运营)要达到这样的状态,战略上需要:技术上需要:统一的、数据共享的平台业务和流程需要:管得住4数字化发展源动力4.1经济发展进入缓慢期,增速下滑企业竞争激烈4.2企业竞争-价格战。IT数字化将企业4.</div> </li> <li><a href="/article/1888993684578430976.htm" title="音视频流媒体中的实 时 流式 传 输 (Realtime (progressive streaming)。streaming )和 顺 序 流式 传 输" target="_blank">音视频流媒体中的实 时 流式 传 输 (Realtime (progressive streaming)。streaming )和 顺 序 流式 传 输</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/ffmpeg/1.htm">ffmpeg</a> <div>实时流式传输(RealtimeStreaming)和顺序流式传输(ProgressiveStreaming)是两种不同的视频传输方式,它们各自有不同的特点和应用场景:实时流式传输(RealtimeStreaming)定义:实时流式传输是指视频内容在被创建或捕获的同时进行传输。观众可以立即看到正在进行的直播内容。特点:实时性:内容几乎没有延迟地到达观众,这对于直播、体育赛事、新闻报道等场景非常重要。</div> </li> <li><a href="/article/1888795950193897472.htm" title="hvv 云安全专项检测工具" target="_blank">hvv 云安全专项检测工具</a> <span class="text-muted">问脉团队·VeinMind</span> <a class="tag" taget="_blank" href="/search/%E9%97%AE%E8%84%89Tools/1.htm">问脉Tools</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a> <div>又是一年的HVV季,不知各位红方蓝方是否已经做好了准备?这一年的时间,不知各位有没有注意到,各个迹象表明,安全对抗正逐步迁移至云端。面对这种迅猛的云原生趋势,在本次的hvv中,我们应该如何对这种新型的云上攻击进行防护?有效的云上攻击防护需要从基础架构开始。云服务提供商应该提供全方位的安全保障,包括数据隔离、访问控制和监控等。人为因素在云安全中占据重要地位。许多安全事件都源于员工的错误操作或者是对安</div> </li> <li><a href="/article/1888652635943268352.htm" title="EasyNVR平台现已支持AAC、G711A及G711U音频编码格式" target="_blank">EasyNVR平台现已支持AAC、G711A及G711U音频编码格式</a> <span class="text-muted">EasyNVR</span> <a class="tag" taget="_blank" href="/search/EasyNVR%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/1.htm">EasyNVR问题解决</a><a class="tag" taget="_blank" href="/search/aac/1.htm">aac</a><a class="tag" taget="_blank" href="/search/g711/1.htm">g711</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/%E6%95%B0%E6%8D%AE%E5%BA%93/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/%E5%AE%89%E5%85%A8/1.htm">安全</a> <div>在视频监控和流媒体传输领域,音频与视频的质量和同步性是用户体验的关键因素。EasyNVR平台一直以来致力于为用户提供稳定、高效的音视频解决方案。然而,随着技术的发展和用户需求的多样化,平台在音频编码格式的支持上遇到了一些挑战。之前有客户反馈,在使用EasyNVR平台播放云端录像时没有声音。经排查发现,问题源于设备使用的是G711A音频编码格式,而当时EasyNVR平台仅支持AAC格式的云端录像音频</div> </li> <li><a href="/article/1888548121198260224.htm" title="实现使用Python和OpenCV播放RTMP视频流媒体的WebRTC" target="_blank">实现使用Python和OpenCV播放RTMP视频流媒体的WebRTC</a> <span class="text-muted">FdviAutoit</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a><a class="tag" taget="_blank" href="/search/%E5%AA%92%E4%BD%93/1.htm">媒体</a><a class="tag" taget="_blank" href="/search/WebRTC/1.htm">WebRTC</a> <div>WebRTC(Web实时通信)是一种用于浏览器之间实时通信的开放标准。它可以在Web浏览器中实现音频、视频和数据的传输,为实时通信应用程序提供了强大的功能。本文将介绍如何使用Python和OpenCV库来实现通过RTMP(实时媒体传输协议)播放视频流,并结合WebRTC实现实时的视频通信。在开始之前,确保你已经安装了Python和相应的库。你可以使用pip命令来安装OpenCV和其他所需的库:pi</div> </li> <li><a href="/article/1888453573767917568.htm" title="NGINX-RTMP 框架详解及与SRS对比" target="_blank">NGINX-RTMP 框架详解及与SRS对比</a> <span class="text-muted">Ryan-S</span> <a class="tag" taget="_blank" href="/search/webrtc/1.htm">webrtc</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>NGINX-RTMP框架详解及与SRS对比1.概述NGINX-RTMP是基于Nginx的第三方模块(由社区开发维护),专注于RTMP协议的流媒体处理,适用于直播推流、点播分发等场景。它通过扩展Nginx的能力,支持RTMP流接收、转码、录制及多协议输出(如HLS)。核心特点如下:2.核心功能推流与拉流:支持RTMP协议推流(如OBS推流)和拉流播放。转码与录制:集成FFmpeg进行实时转码(分辨率</div> </li> <li><a href="/article/1888353704566910976.htm" title="【QT】- QUdpSocket" target="_blank">【QT】- QUdpSocket</a> <span class="text-muted">追心嵌入式</span> <a class="tag" taget="_blank" href="/search/QT/1.htm">QT</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>QUdpSocket是Qt自带的一个类,属于Qt网络模块,用于进行UDP(用户数据报协议)通信。它提供了简便的接口来发送和接收UDP数据报(datagrams)。UDP是一种无连接的协议,适用于那些不需要确保数据可靠性和顺序的应用场景,比如实时游戏、流媒体、DNS请求等。QUdpSocket概述QUdpSocket继承自QAbstractSocket,可以用于进行基于UDP协议的数据发送和接收。它</div> </li> <li><a href="/article/1888142134138171392.htm" title="中国和加拿大(魁北克省)政府间科技合作项目的联系方式" target="_blank">中国和加拿大(魁北克省)政府间科技合作项目的联系方式</a> <span class="text-muted">神午侠意</span> <a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%B8%B8%E5%B7%A5%E4%BD%9C/1.htm">日常工作</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E6%8B%BF%E5%A4%A7/1.htm">加拿大</a><a class="tag" taget="_blank" href="/search/%E9%AD%81%E5%8C%97%E5%85%8B/1.htm">魁北克</a><a class="tag" taget="_blank" href="/search/%E6%94%BF%E5%BA%9C%E9%97%B4/1.htm">政府间</a><a class="tag" taget="_blank" href="/search/%E9%87%8D%E7%82%B9%E4%B8%93%E9%A1%B9/1.htm">重点专项</a> <div>中国和加拿大(魁北克省)政府间科技合作项目国家重点研发计划“政府间国际科技创新合作/港澳台科技创新合作”重点专项中国和加拿大(魁北克省)政府间科技合作项目》的加方联系方式:折腾了很久,终于从国家国际科技合作专项办公室zhdxmbgs@163.com拿到了联系方式。客官,拿走不谢!国家重点研发计划“政府间国际科技创新合作/港澳台科技创新合作”重点专项中国和加拿大(魁北克省)政府间科技合作项目》的加方</div> </li> <li><a href="/article/1887896661229891584.htm" title="Licode简介及与SRS对比" target="_blank">Licode简介及与SRS对比</a> <span class="text-muted">Ryan-S</span> <a class="tag" taget="_blank" href="/search/webrtc/1.htm">webrtc</a><a class="tag" taget="_blank" href="/search/Licode/1.htm">Licode</a> <div>Licode是一个开源的WebRTC通信框架,专注于多人实时音视频互动(如视频会议),而SRS是一个通用的流媒体服务器,支持直播、低延迟流分发等场景。以下是两者的详细对比和Licode的核心解析:一、Licode核心解析1.定位与设计目标核心功能:基于WebRTC的多人实时音视频通信(SFU/MCU混合架构)。设计思想:分布式架构:支持横向扩展(多个节点组成集群)。房间管理:以“房间(Room)”</div> </li> <li><a href="/article/1887619707205382144.htm" title="DeepSeek开源引擎引爆央国企AI革命:一场自主可控的“智能突围战“" target="_blank">DeepSeek开源引擎引爆央国企AI革命:一场自主可控的“智能突围战“</a> <span class="text-muted">Light60</span> <a class="tag" taget="_blank" href="/search/%E5%A4%AE%E5%9B%BD%E4%BC%81/1.htm">央国企</a><a class="tag" taget="_blank" href="/search/AI%E5%BA%94%E7%94%A8/1.htm">AI应用</a><a class="tag" taget="_blank" href="/search/%E4%BA%A7%E4%B8%9A%E7%AF%87/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><a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/%E5%A4%AE%E5%9B%BD%E4%BC%81AI%E9%9D%A9%E5%91%BD/1.htm">央国企AI革命</a> <div>一、破局时刻:当信创遇上AI,央国企的"智能焦虑"如何解?在数字经济浪潮席卷全球的今天,中央企业数字化转型已进入深水区。2023年国资委《中央企业人工智能专项行动计划》明确要求:到2025年央企AI应用普及率需超90%。然而现实却充满挑战——某能源集团AI模型训练耗时长达72小时,某金融机构因数据安全问题被迫放弃云端方案,某制造央企为适配国产硬件额外投入超千万...这些痛点直指三大困局:性能瓶颈:</div> </li> <li><a href="/article/1887544066007166976.htm" title="新闻文化建设杂志新闻文化建设杂志社新闻文化建设编辑部2022年第14期目录" target="_blank">新闻文化建设杂志新闻文化建设杂志社新闻文化建设编辑部2022年第14期目录</a> <span class="text-muted">QQ992832970</span> <a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a><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>新闻文化建设杂志新闻文化建设杂志社新闻文化建设编辑部2022年第14期目录新闻热点关于公示第32届中国新闻奖融合报道、应用创新和新媒体新闻专栏专项初评结果的公告梁楠;1两大《实施办法》出台,新闻、出版领域职称申报条件再放宽梁楠;2新闻文化论坛符号互动视域下人格化IP与互动体验——以玲娜贝尔IP形象输出为例鞠惠冰;李欣窈;3-5突发公共卫生事件中日新闻报道差异研究——以《人民日报》《朝日新闻》新冠肺</div> </li> <li><a href="/article/1887486712712589312.htm" title="NVR管理平台EasyNVR深度解析:RTSP协议应用及摄像机集成" target="_blank">NVR管理平台EasyNVR深度解析:RTSP协议应用及摄像机集成</a> <span class="text-muted">EasyGBS</span> <a class="tag" taget="_blank" href="/search/EasyNVR/1.htm">EasyNVR</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/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>随着信息技术的飞速发展,智慧视频监控平台已成为现代社会安全管理与智能化建设的重要基石。在众多视频监控平台中,NVR管理平台EasyNVR凭借其高效性、兼容性和灵活性,赢得了广泛的赞誉和应用。RTSP协议主要用于控制声音或影像的多媒体串流。它允许客户端与服务器进行交互,从而控制流媒体的播放、暂停、停止、倒放、快进等操作。RTSP协议应用及原理1、应用场景:共装了几台网络摄像机,想要实现多台录像机同时</div> </li> <li><a href="/article/1887485704355770368.htm" title="使用国标流媒体服务器查看监控摄像头视频流如何正确使用UDP及TCP协议?" target="_blank">使用国标流媒体服务器查看监控摄像头视频流如何正确使用UDP及TCP协议?</a> <span class="text-muted">EasyGBS</span> <a class="tag" taget="_blank" href="/search/EasyGBS/1.htm">EasyGBS</a><a class="tag" taget="_blank" href="/search/TCP%E5%8D%8F%E8%AE%AE/1.htm">TCP协议</a><a class="tag" taget="_blank" href="/search/%E5%9B%BD%E6%A0%87%E6%B5%81%E5%AA%92%E4%BD%93%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">国标流媒体服务器</a><a class="tag" taget="_blank" href="/search/%E5%9B%BD%E6%A0%87GB28181/1.htm">国标GB28181</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E9%98%B2%E6%91%84%E5%83%8F%E5%A4%B4/1.htm">安防摄像头</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E7%9B%B4%E6%92%AD/1.htm">视频直播</a> <div>用过国标流媒体服务器的朋友们应该都知道,GB28181协议是由公安部提出来的,能够对接公安部的网络系统,给安防带来了很大的便利性,我们的国标流媒体服务器就支持集成接入自己的平台,也能够对视频进行录像。使用国标流媒体服务器会有很多二次开发的可能,因为我们会提供丰富的二次开发接口。近期也有不少用户用https接入国标流媒体服务器,是一种十分实用的视频监控网页直播。有位开发者为了进行测试,在自己的现场环</div> </li> <li><a href="/article/26.htm" title="设计模式介绍" target="_blank">设计模式介绍</a> <span class="text-muted">tntxia</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>设计模式来源于土木工程师 克里斯托弗 亚历山大(http://en.wikipedia.org/wiki/Christopher_Alexander)的早期作品。他经常发表一些作品,内容是总结他在解决设计问题方面的经验,以及这些知识与城市和建筑模式之间有何关联。有一天,亚历山大突然发现,重复使用这些模式可以让某些设计构造取得我们期望的最佳效果。 亚历山大与萨拉-石川佳纯和穆雷 西乐弗斯坦合作</div> </li> <li><a href="/article/153.htm" title="android高级组件使用(一)" target="_blank">android高级组件使用(一)</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/RatingBar/1.htm">RatingBar</a><a class="tag" taget="_blank" href="/search/Spinner/1.htm">Spinner</a> <div>1、自动完成文本框(AutoCompleteTextView) AutoCompleteTextView从EditText派生出来,实际上也是一个文本编辑框,但它比普通编辑框多一个功能:当用户输入一个字符后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView按用户选择自动填写该文本框。 使用AutoCompleteTex</div> </li> <li><a href="/article/280.htm" title="[网络与通讯]路由器市场大有潜力可挖掘" target="_blank">[网络与通讯]路由器市场大有潜力可挖掘</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>          如果国内的电子厂商和计算机设备厂商觉得手机市场已经有点饱和了,那么可以考虑一下交换机和路由器市场的进入问题.....        这方面的技术和知识,目前处在一个开放型的状态,有利于各类小型电子企业进入  &nbs</div> </li> <li><a href="/article/407.htm" title="自写简单Redis内存统计shell" target="_blank">自写简单Redis内存统计shell</a> <span class="text-muted">商人shang</span> <a class="tag" taget="_blank" href="/search/Linux+shell/1.htm">Linux shell</a><a class="tag" taget="_blank" href="/search/%E7%BB%9F%E8%AE%A1Redis%E5%86%85%E5%AD%98/1.htm">统计Redis内存</a> <div>#!/bin/bash address="192.168.150.128:6666,192.168.150.128:6666" hosts=(${address//,/ }) sfile="staticts.log" for hostitem in ${hosts[@]} do ipport=(${hostitem</div> </li> <li><a href="/article/534.htm" title="单例模式(饿汉 vs懒汉)" target="_blank">单例模式(饿汉 vs懒汉)</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a> <div>package 单例模式; /* * 应用场景:保证在整个应用之中某个对象的实例只有一个 * 单例模式种的《 懒汉模式》 * */ public class Singleton { //01 将构造方法私有化,外界就无法用new Singleton()的方式获得实例 private Singleton(){}; //02 申明类得唯一实例 priva</div> </li> <li><a href="/article/661.htm" title="springMvc json支持" target="_blank">springMvc json支持</a> <span class="text-muted">杨白白</span> <a class="tag" taget="_blank" href="/search/json+springmvc/1.htm">json springmvc</a> <div>1.Spring mvc处理json需要使用jackson的类库,因此需要先引入jackson包 2在spring mvc中解析输入为json格式的数据:使用@RequestBody来设置输入 @RequestMapping("helloJson") public @ResponseBody JsonTest helloJson() { </div> </li> <li><a href="/article/788.htm" title="android播放,掃描添加本地音頻文件" target="_blank">android播放,掃描添加本地音頻文件</a> <span class="text-muted">小桔子</span> <div>        最近幾乎沒有什麽事情,繼續鼓搗我的小東西。想在項目中加入一個簡易的音樂播放器功能,就像華為p6桌面上那麼大小的音樂播放器。用過天天動聽或者QQ音樂播放器的人都知道,可已通過本地掃描添加歌曲。不知道他們是怎麼實現的,我覺得應該掃描設備上的所有文件,過濾出音頻文件,每個文件實例化為一個實體,記錄文件名、路徑、歌手、類型、大小等信息。具體算法思想,</div> </li> <li><a href="/article/915.htm" title="oracle常用命令" target="_blank">oracle常用命令</a> <span class="text-muted">aichenglong</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/dba/1.htm">dba</a><a class="tag" taget="_blank" href="/search/%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">常用命令</a> <div>1 创建临时表空间 create temporary tablespace user_temp  tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m  autoextend on  next 50m maxsize 20480m  extent management local</div> </li> <li><a href="/article/1042.htm" title="25个Eclipse插件" target="_blank">25个Eclipse插件</a> <span class="text-muted">AILIKES</span> <a class="tag" taget="_blank" href="/search/eclipse%E6%8F%92%E4%BB%B6/1.htm">eclipse插件</a> <div>提高代码质量的插件1. FindBugsFindBugs可以帮你找到Java代码中的bug,它使用Lesser GNU Public License的自由软件许可。2. CheckstyleCheckstyle插件可以集成到Eclipse IDE中去,能确保Java代码遵循标准代码样式。3. ECLemmaECLemma是一款拥有Eclipse Public License许可的免费工具,它提供了</div> </li> <li><a href="/article/1169.htm" title="Spring MVC拦截器+注解方式实现防止表单重复提交" target="_blank">Spring MVC拦截器+注解方式实现防止表单重复提交</a> <span class="text-muted">baalwolf</span> <a class="tag" taget="_blank" href="/search/spring+mvc/1.htm">spring mvc</a> <div>原理:在新建页面中Session保存token随机码,当保存时验证,通过后删除,当再次点击保存时由于服务器端的Session中已经不存在了,所有无法验证通过。   1.新建注解:   ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 </div> </li> <li><a href="/article/1296.htm" title="《Javascript高级程序设计(第3版)》闭包理解" target="_blank">《Javascript高级程序设计(第3版)》闭包理解</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>“闭包是指有权访问另一个函数作用域中的变量的函数。”--《Javascript高级程序设计(第3版)》         看以下代码: <script type="text/javascript"> function outer() { var i = 10; return f</div> </li> <li><a href="/article/1423.htm" title="AngularJS Module类的方法" target="_blank">AngularJS Module类的方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/Module/1.htm">Module</a> <div>        AngularJS中的Module类负责定义应用如何启动,它还可以通过声明的方式定义应用中的各个片段。我们来看看它是如何实现这些功能的。 一.Main方法在哪里         如果你是从Java或者Python编程语言转过来的,那么你可能很想知道AngularJS里面的main方法在哪里?这个把所</div> </li> <li><a href="/article/1550.htm" title="[Maven学习笔记七]Maven插件和目标" target="_blank">[Maven学习笔记七]Maven插件和目标</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/maven%E6%8F%92%E4%BB%B6/1.htm">maven插件</a> <div>插件(plugin)和目标(goal) Maven,就其本质而言,是一个插件执行框架,Maven的每个目标的执行逻辑都是由插件来完成的,一个插件可以有1个或者几个目标,比如maven-compiler-plugin插件包含compile和testCompile,即maven-compiler-plugin提供了源代码编译和测试源代码编译的两个目标   使用插件和目标使得我们可以干预</div> </li> <li><a href="/article/1677.htm" title="【Hadoop八】Yarn的资源调度策略" target="_blank">【Hadoop八】Yarn的资源调度策略</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>1. Hadoop的三种调度策略 Hadoop提供了3中作业调用的策略, FIFO Scheduler Fair Scheduler Capacity Scheduler 以上三种调度算法,在Hadoop MR1中就引入了,在Yarn中对它们进行了改进和完善.Fair和Capacity Scheduler用于多用户共享的资源调度   2. 多用户资源共享的调度 </div> </li> <li><a href="/article/1804.htm" title="Nginx使用Linux内存加速静态文件访问" target="_blank">Nginx使用Linux内存加速静态文件访问</a> <span class="text-muted">ronin47</span> <div>Nginx是一个非常出色的静态资源web服务器。如果你嫌它还不够快,可以把放在磁盘中的文件,映射到内存中,减少高并发下的磁盘IO。 先做几个假设。nginx.conf中所配置站点的路径是/home/wwwroot/res,站点所对应文件原始存储路径:/opt/web/res shell脚本非常简单,思路就是拷贝资源文件到内存中,然后在把网站的静态文件链接指向到内存中即可。具体如下: </div> </li> <li><a href="/article/1931.htm" title="关于Unity3D中的Shader的知识" target="_blank">关于Unity3D中的Shader的知识</a> <span class="text-muted">brotherlamp</span> <a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a><a class="tag" taget="_blank" href="/search/unity%E8%B5%84%E6%96%99/1.htm">unity资料</a><a class="tag" taget="_blank" href="/search/unity%E6%95%99%E7%A8%8B/1.htm">unity教程</a><a class="tag" taget="_blank" href="/search/unity%E8%A7%86%E9%A2%91/1.htm">unity视频</a><a class="tag" taget="_blank" href="/search/unity%E8%87%AA%E5%AD%A6/1.htm">unity自学</a> <div>首先先解释下Unity3D的Shader,Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader还是使用标准的Cg/HLSL 编程语言编写的。因此Unity文档里面的Shader,都是指用ShaderLab编写的代码,然后我们来看下Unity3D自带的60多个S</div> </li> <li><a href="/article/2058.htm" title="CopyOnWriteArrayList vs ArrayList" target="_blank">CopyOnWriteArrayList vs ArrayList</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>package com.ljn.base; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** * 总述: * 1.ArrayListi不是线程安全的,CopyO</div> </li> <li><a href="/article/2185.htm" title="内存中栈和堆的区别" target="_blank">内存中栈和堆的区别</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98/1.htm">内存</a> <div> 1、内存分配方面:     堆:一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式是类似于链表。可能用到的关键字如下:new、malloc、delete、free等等。     栈:由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中</div> </li> <li><a href="/article/2312.htm" title="回答一位网友对Scala的提问" target="_blank">回答一位网友对Scala的提问</a> <span class="text-muted">chenchao051</span> <a class="tag" taget="_blank" href="/search/scala/1.htm">scala</a><a class="tag" taget="_blank" href="/search/map/1.htm">map</a> <div>本来准备在私信里直接回复了,但是发现不太方便,就简要回答在这里。 问题 写道 对于scala的简洁十分佩服,但又觉得比较晦涩,例如一例,Map("a" -> List(11,111)).flatMap(_._2),可否说下最后那个函数做了什么,真正在开发的时候也会如此简洁?谢谢    先回答一点,在实际使用中,Scala毫无疑问就是这么简单。</div> </li> <li><a href="/article/2439.htm" title="mysql 取每组前几条记录" target="_blank">mysql 取每组前几条记录</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E7%BB%84/1.htm">分组</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E5%A4%A7%E5%80%BC/1.htm">最大值</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E5%B0%8F%E5%80%BC/1.htm">最小值</a><a class="tag" taget="_blank" href="/search/%E6%AF%8F%E7%BB%84%E4%B8%89%E6%9D%A1%E8%AE%B0%E5%BD%95/1.htm">每组三条记录</a> <div>一、对分组的记录取前N条记录:例如:取每组的前3条最大的记录 1.用子查询: SELECT * FROM tableName a  WHERE 3> (SELECT COUNT(*) FROM  tableName b WHERE b.id=a.id AND b.cnt>a. cnt) ORDER BY a.id,a.account DE</div> </li> <li><a href="/article/2566.htm" title="HTTP深入浅出 http请求" target="_blank">HTTP深入浅出 http请求</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/http/1.htm">http</a> <div>  HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后We</div> </li> <li><a href="/article/2693.htm" title="判断MySQL记录是否存在方法比较" target="_blank">判断MySQL记录是否存在方法比较</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入。   我这里总结了判断记录是否存在的常用方法:   sql语句: select   count ( * )  from  tablename;   然后读取count(*)的值判断记录是否存在。对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来。</div> </li> <li><a href="/article/2820.htm" title="对HTML XML的一点认识" target="_blank">对HTML XML的一点认识</a> <span class="text-muted">e200702084</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a> <div>感谢http://www.w3school.com.cn提供的资料 HTML 文档中的每个成分都是一个节点。 节点 根据 DOM,HTML 文档中的每个成分都是一个节点。 DOM 是这样规定的: 整个文档是一个文档节点 每个 HTML 标签是一个元素节点 包含在 HTML 元素中的文本是文本节点 每一个 HTML 属性是一个属性节点 注释属于注释节点 Node 层次 </div> </li> <li><a href="/article/2947.htm" title="jquery分页插件" target="_blank">jquery分页插件</a> <span class="text-muted">genaiwei</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E9%A1%B5/1.htm">分页</a><a class="tag" taget="_blank" href="/search/%E6%8F%92%E4%BB%B6/1.htm">插件</a> <div>//jquery页码控件// 创建一个闭包    (function($) {      // 插件的定义      $.fn.pageTool = function(options) {        var totalPa</div> </li> <li><a href="/article/3201.htm" title="Mybatis与Ibatis对照入门于学习" target="_blank">Mybatis与Ibatis对照入门于学习</a> <span class="text-muted">Josh_Persistence</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a><a class="tag" taget="_blank" href="/search/%E5%8C%BA%E5%88%AB/1.htm">区别</a><a class="tag" taget="_blank" href="/search/%E8%81%94%E7%B3%BB/1.htm">联系</a> <div>一、为什么使用IBatis/Mybatis         对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate、JPA 这样的一站式对象 / 关系映射(O/R Mapping)解决方案盛行之前,iBaits 基本是持久层框架的不二选择。即使在持久层框架层出不穷的今天,iBatis 凭借着易学易用、</div> </li> <li><a href="/article/3328.htm" title="C中怎样合理决定使用那种整数类型?" target="_blank">C中怎样合理决定使用那种整数类型?</a> <span class="text-muted">秋风扫落叶</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/1.htm">数据类型</a> <div>如果需要大数值(大于32767或小于32767), 使用long 型。 否则, 如果空间很重要 (如有大数组或很多结构), 使用 short 型。 除此之外, 就使用 int 型。 如果严格定义的溢出特征很重要而负值无关紧要, 或者你希望在操作二进制位和字节时避免符号扩展的问题, 请使用对应的无符号类型。 但是, 要注意在表达式中混用有符号和无符号值的情况。    &nbs</div> </li> <li><a href="/article/3455.htm" title="maven问题" target="_blank">maven问题</a> <span class="text-muted">zhb8015</span> <a class="tag" taget="_blank" href="/search/maven%E9%97%AE%E9%A2%98/1.htm">maven问题</a> <div>  问题1: Eclipse 中 新建maven项目 无法添加src/main/java 问题    eclipse创建maevn web项目,在选择maven_archetype_web原型后,默认只有src/main/resources这个Source Floder。     按照maven目录结构,添加src/main/ja</div> </li> <li><a href="/article/3582.htm" title="(二)androidpn-server tomcat版源码解析之--push消息处理" target="_blank">(二)androidpn-server tomcat版源码解析之--push消息处理</a> <span class="text-muted">spjich</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/androdipn/1.htm">androdipn</a><a class="tag" taget="_blank" href="/search/%E6%8E%A8%E9%80%81/1.htm">推送</a> <div>在 (一)androidpn-server tomcat版源码解析之--项目启动这篇中,已经描述了整个推送服务器的启动过程,并且把握到了消息的入口即XmppIoHandler这个类,今天我将继续往下分析下面的核心代码,主要分为3大块,链接创建,消息的发送,链接关闭。 先贴一段XmppIoHandler的部分代码 /** * Invoked from an I/O proc</div> </li> <li><a href="/article/3709.htm" title="用js中的formData类型解决ajax提交表单时文件不能被serialize方法序列化的问题" target="_blank">用js中的formData类型解决ajax提交表单时文件不能被serialize方法序列化的问题</a> <span class="text-muted">中华好儿孙</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6/1.htm">上传文件</a><a class="tag" taget="_blank" href="/search/FormData/1.htm">FormData</a> <div> var formData = new FormData($("#inputFileForm")[0]); $.ajax({ type:'post', url:webRoot+"/electronicContractUrl/webapp/uploadfile", data:formData, async: false, ca</div> </li> <li><a href="/article/3836.htm" title="mybatis常用jdbcType数据类型" target="_blank">mybatis常用jdbcType数据类型</a> <span class="text-muted">ysj5125094</span> <a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/mapper/1.htm">mapper</a><a class="tag" taget="_blank" href="/search/jdbcType/1.htm">jdbcType</a> <div>  MyBatis 通过包含的jdbcType 类型 BIT         FLOAT      CHAR          </div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>