网络流媒体(五)———HLS

1. 简介

         HLS(HTTP Live Streaming)是苹果公司提出的基于HTTP的流媒体网络传输协议。HLS把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。HLS 协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是音视频的媒体信息。类似于MPEG-DASH,但是HLS更加简洁,它的基本原理也是服务端把文件或媒体流按照不同的码率切分成一个个小片段进行传输,客户端在播放码流时,可以根据自身的带宽及性能限制,在同一视频内容的不同码率的备用源中,选择合适码率的码流进行下载播放。在传输会话开始时,客户端首先需要下载描述不同码流元数据的M3U8索引文件(类似于DASH中的MPD文件)。
         优点:与基于UDP的RTP协议不同,HLS请求仅使用HTTP传输,因此可以穿过任何允许HTTP数据通过的防火墙或代理服务器。这也便于使用传统的HTTP服务器作为源,并广泛使用基于HTTP的内容分发网络来传输媒体流。HLS相对于RTMP来讲使用了标准的 HTTP 协议来传输数据,可以避免在一些特殊的网络环境下被屏蔽。HLS相比RTMP在服务器端做负载均衡要简单得多。因为HLS是基于无状态协议HTTP实现的,客户端只需要按照顺序使用下载存储在服务器的普通ts文件进行播放就可以。而RTMP是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。HLS 协议本身实现了码率自适应,在不同带宽情况下,设备可以自动切换到最适合自己码率的视频播放。
         缺点:虽然HLS有上述优势,但也同时存在延迟过大的劣势。采用HLS直播的视频流延时一般在10秒以上,使用推荐配置时延迟大概在30s,而RTMP直播的延迟最低可达到3、4秒,因此,在对实时性要求较高的场合,如互动直播,就要慎用HLS了。
         HLS的格式可简单归结如下:
        网络协议: HTTP;
        封装格式: MEPG-2 TS;
        编码格式: 视频编码格式为H.264,音频编码格式为MP3、AAC、AC-3或EC-3;
        索引文件: M3U8。每一个.m3u8文件,分别对应若干个ts文件,这些ts文件才是真正存放视频的数据,m3u8文件只是存放了一些ts文件的配置信息和相关路径,当视频播放时,.m3u8是动态改变的,video标签会解析这个文件,并找到对应的ts文件来播放,所以一般为了加快速度,.m3u8 放在web服务器上,ts文件放在cdn 上。.m3u8 文件,其实就是以utf-8编码的m3u文件,这个文件本身不能播放,只是存放了播放信息的文本文件。
        需要说明的是,目前已有厂家实现了H.265的HLS编码。在封装层面,除了MPEG-2 TS封装外,在WWDC2016上,苹果宣布了HLS对分段MP4(fMP4)文件字节寻址的支持,为HLS向MPEG-DASH的兼容提供了可能。
        根据媒体流的生成及流向,HLS的结构可划分为如下几个部分(本图来自苹果官网):

网络流媒体(五)———HLS_第1张图片

        HLS有两级索引,第一级索引存放的是不同码率的HLS源的M3U8地址,也就是二级索引文件的地址;第二级索引则记录了同一码率下TS切片序列的下载地址。客户端获取一级M3U8文件后,根据自己的带宽,去下载相应码率的二级索引文件,然后再按二级索引文件的切片顺序下载并播放TS文件序列。
        一个典型的一级索引文件如下:

#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

        #EXTM3U:格式标签,标明该文件是一个Extended M3U播放列表文件,必须存在于一二级列表的第一行。
        #EXT-X-STREAM-INF:特定流标签,指示了该流的格式信息:PROGRAM-ID节目ID,一般不用考虑;BANDWIDTH:指定流的带宽;RESOLUTION:视频分辨率;如果存在音频分级,则需指定音频的编码格式CODECS,如上例中的最后两项;#EXT-X-STREAM-INF下面紧接的一行,如mid_video_index.m3u8则是对应流的二级索引文件地址,通过下载该二级索引文件,便可得到媒体切片的信息。
        二级索引文件格式如下:

       (1)VOD形式

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#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

       仍然是以#EXTM3U开头。
       #EXT-X-TARGETDURATION: 表示切片的最大时长,单位是秒。#EXT-X-TARGETDURATION:10表示列表中表示的每个切片时长不超过10秒。
       #EXT-X-VERSION:表示协议兼容性版本。
       #EXTINF:切片的实际时长,若要求取整,则其数值不能大于EXT-X-TARGETDURATION的值。
       http://media.example.com/first.ts:对应的切片文件(路径),可以是绝对路径,也可以是相对路径。
       #EXT-X-ENDLIST:表示整个码流的结束,不再向后附加新的切片列表。
        (2) Live形式:

#EXTM3U
#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

       #EXT-X-MEDIA-SEQUENCE:媒体序列号,表示出现在当前M3U8文件中的第一个Segment的序列号。
       Live形式的M3U8一般用于直播,列表中的文件数有限制,推荐配置中是3个,服务端会实时更新该列表,删除最开始的Segment,并向后面添加新生成的Segment。因此,这种模式下,当网络带宽不足时,客户端来不及下载新的M3U8和对应的切片文件,会导致切片丢失,播放卡顿。

       (3) 加密形式:

#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

        HLS可以被加密。客户端通过读取M3U8文件中的#EXT-X_KEY标签可以获取解密的密钥。EXT-X-KEY指示的密钥信息作用于当前EXT-X-KEY标签至下一个EXT-X-KEY标签(若没有下一个,则到最后一个Segment)之间的所有Segments。METHOD指示加密算法,可用的取值有NONE、AES-128和SAMPLE-AES,NONE表示不加密。URI指示获取密钥的路径,该项不可省略,除非METHOD为NONE。

2. 基础概念

2.1 Playlist file

       一个 m3u 的 Playlist 就是一个由多个独立行组成的文本文件,每行由回车/换行区分。每一行可以是一个 URI、空白行或是一个 以 "#" 号开头的字符串,并且空格只能存在于一行中不同元素间的分隔。
一个 URI 表示一个媒体段或是 "variant Playlist file"(最多支持一层嵌套,即一个 m3u8 文件中嵌套另一个 m3u8),以 "EXT" 开头的表示一个 "tag",否则表示注释,直接忽略。

2.2 Tags

① #EXTM3U:每个 m3u8 文件第一行必须是这个 tag,如上面的两个示例。
② #EXTINF:指定每个媒体段(ts)的持续时间,这个仅对其后面的 URI 有效,每两个媒体段URI间被这个tag分隔开,
其格式为:#EXTINF:,<br> •    duration:表示持续的时间(秒),"Durations MUST be integers if the protocol version of the Playlist file is less than 3",否则可以是浮点数。<br> ③ #EXT-X-BYTERANGE:表示媒体段是一个媒体URI资源中的一段,只对其后的media URI有效,<br> 格式为:#EXT-X-BYTERANGE:<n>[@o]<br> •    n:表示这个区间的大小<br> •    o:表示在 URI 中的 offset<br> •    The EXT-X-BYTERANGE tag appeared in version 4 of the protocol<br> ④ #EXT-X-TARGETDURATION:指定当前视频流中的单个切片(即ts)文件的最大时长(秒)。所以 #EXTINF 中指定的时间长度必须小于或是等于这个最大值。这个tag在整个 Playlist 文件中只能出现一次(在嵌套的情况下,一般有真正ts url的m3u8才会出现该tag)。</p> <h1 style="margin-left:0cm;">3  参考文献</h1> <p style="margin-left:0cm;">https://blog.csdn.net/DeliaPu/article/details/79065697</p> <p style="margin-left:0cm;">https://www.cnblogs.com/jimodetiantang/p/9133564.html</p> <p style="margin-left:0cm;">https://www.jianshu.com/p/32417d8ee5b6</p> <p style="margin-left:0cm;">https://segmentfault.com/a/1190000008810572</p> <p style="margin-left:0cm;">https://my.oschina.net/u/727148/blog/666824</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1305434839226290176"></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/1943154903992037376.htm" title="python视频工具包 ffmpeg 使用示例" target="_blank">python视频工具包 ffmpeg 使用示例</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/pythonffmpeg/1.htm">pythonffmpeg</a> <div>1.简介FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器,提供了录制、转换以及流化音视频的完整解决方案。2.ffmpeg的常用方法将某文件下所有ts文件按顺序合并,转换成MP4格式存储:importffmpegdeftest2():ts_folder='path/ts_files/ceshi/'output_mp4="pa</div> </li> <li><a href="/article/1942883298925670400.htm" title="ffmpeg的常见使用" target="_blank">ffmpeg的常见使用</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/pythonffmpeg/1.htm">pythonffmpeg</a> <div>1.简介FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器,提供了录制、转换以及流化音视频的完整解决方案。2.ffmpeg的常用方法将某文件下所有ts文件按顺序合并,转换成MP4格式存储:importffmpegdeftest2():ts_folder='path/ts_files/ceshi/'output_mp4="pa</div> </li> <li><a href="/article/1940711685736165376.htm" title="WebRTC基础介绍" target="_blank">WebRTC基础介绍</a> <span class="text-muted"></span> <div>WebRTC全称为:WebReal-TimeCommunication。它是为了解决Web端无法捕获音视频的能力,并且提供了peer-to-peer(就是浏览器间)的视频交互。WebRTC汇集了先进的实时通信技术,包括:先进的音视频编解码器(Opus和VP8/9),强制加密协议(SRTP和DTLS)和网络地址转换器(ICE&STUN)。根据最初的定义,WebRTC被指定为P2P(peer-to-p</div> </li> <li><a href="/article/1937495529072160768.htm" title="WebRTC(七):媒体能力协商" target="_blank">WebRTC(七):媒体能力协商</a> <span class="text-muted">却道天凉_好个秋</span> <a class="tag" taget="_blank" href="/search/WebRTC/1.htm">WebRTC</a><a class="tag" taget="_blank" href="/search/webrtc/1.htm">webrtc</a> <div>目的在WebRTC中,每个浏览器或终端支持的音视频编解码器、分辨率、码率、帧率等可能不同。媒体能力协商的目的就是:确保双方能“听得懂”对方发的媒体流;明确谁发送、谁接收、怎么发送;保障连接的互操作性和兼容性。P2P的基本流程参与角色角色说明peerA发起连接的端(通常是主叫)peerB接收连接的端(通常是被叫)signal信令服务器,用于中转SDP和ICE信息,但不参与媒体传输stun/turnS</div> </li> <li><a href="/article/1936796871330689024.htm" title="ESP FOURCC 编码介绍" target="_blank">ESP FOURCC 编码介绍</a> <span class="text-muted">乐鑫科技 Espressif</span> <a class="tag" taget="_blank" href="/search/%E4%B9%90%E9%91%AB%E7%A7%91%E6%8A%80/1.htm">乐鑫科技</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E5%AA%92%E4%BD%93/1.htm">多媒体</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A0%81/1.htm">编码</a> <div>FOURCC(FourCharacterCode,四字符编码)是一种在多媒体领域被广泛使用的标识符,常用于快速识别音视频编码格式、封装格式、像素格式等。乐鑫科技定义了一套完整的FOURCC编码标准,称为ESPFOURCC,该标准可在开源项目ESP-GMF中的esp_fourcc.h头文件中找到,涵盖了音视频编解码、图像、封装格式和各种像素格式。本文将深入介绍ESPFOURCC的背景意义、定义原则、</div> </li> <li><a href="/article/1934112329859919872.htm" title="FFmpeg编译安装(Mac、Linux)" target="_blank">FFmpeg编译安装(Mac、Linux)</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/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>FFmpeg简介FFmpeg是一款常用的多媒体框架,支持音视频编解码、格式转换等功能。安装FFmpeg可以通过多种不同的方式进行,包括使用包管理器、源代码安装以及使用预编译二进制文件等。不同方式安装FFmpeg的区别:包管理器:使用包管理器安装FFmpeg最为简便,通常只需要执行几条命令即可完成安装。包管理器会自动处理依赖关系,并为用户管理软件包的更新。然而,这种方法可能不能提供最新的FFmpeg</div> </li> <li><a href="/article/1930687212425375744.htm" title="FFmpeg中视频 Filters 使用文档介绍" target="_blank">FFmpeg中视频 Filters 使用文档介绍</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/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/Filters/1.htm">Filters</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/vmaf/1.htm">vmaf</a><a class="tag" taget="_blank" href="/search/%E6%BB%A4%E9%95%9C/1.htm">滤镜</a><a class="tag" taget="_blank" href="/search/FFmpeg/1.htm">FFmpeg</a> <div>FFmpeg中Filters简介FFmpeg是一个强大的多媒体框架,它支持多种音视频编解码器、容器格式、协议等。其中,FFmpeg的Filters(过滤器)是FFmpeg中一个非常强大的功能,它允许用户对音视频数据进行各种处理,包括但不限于视频滤镜、音频效果、视频转换等。到目前为止,FFmpeg中视频的Filters有296种之多,可以利用其中一种或组合Filters对视频进行各种处理。视频Fil</div> </li> <li><a href="/article/1929226518534352896.htm" title="【FFmpeg 系列】 音视频解复用与复用实战" target="_blank">【FFmpeg 系列】 音视频解复用与复用实战</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/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E8%A7%A3%E5%A4%8D%E7%94%A8/1.htm">解复用</a><a class="tag" taget="_blank" href="/search/%E5%A4%8D%E7%94%A8/1.htm">复用</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4%E6%88%B3/1.htm">时间戳</a><a class="tag" taget="_blank" href="/search/%E7%9B%B4%E6%92%AD/1.htm">直播</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E8%BD%AC%E7%A0%81/1.htm">音视频转码</a> <div>FFmpegFFmpeg是一个功能强大、广泛使用的多媒体处理工具,可以处理音频、视频、字幕以及多种容器格式的操作。它支持解码、编码、复用、解复用、流式传输、过滤等功能。以下是关于FFmpeg的一些核心信息和操作说明:核心组件FFmpeg是由以下几个主要库组成的:libavcodec:用于各种音视频编解码器的实现。libavformat:处理各种音视频文件和流的容器格式(如MP4、MKV、AVI)。</div> </li> <li><a href="/article/1926396371036860416.htm" title="EasyRTC音视频实时通话WebP2P技术赋能的全场景实时通信解决方案" target="_blank">EasyRTC音视频实时通话WebP2P技术赋能的全场景实时通信解决方案</a> <span class="text-muted">EasyDSS</span> <a class="tag" taget="_blank" href="/search/EasyRTC/1.htm">EasyRTC</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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>一、技术背景在数字化浪潮席卷全球的当下,实时通信技术凭借其即时性、高效性的优势,已然成为推动各行业创新发展的核心动能。EasyRTC深度融合WebP2P技术,构建起去中心化的通信架构,实现了低延迟、高可靠的数据传输,为多场景应用提供了强有力的技术支撑。二、EasyRTC技术特点1)低延迟与高实时性:EasyRTC通过优化的音视频编解码算法和网络传输策略,实现了端到端延迟控制在300ms以内,为用户</div> </li> <li><a href="/article/1921208315266789376.htm" title="各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式" target="_blank">各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式</a> <span class="text-muted">wishfly</span> <a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91/1.htm">视频</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>编解码学习笔记(一):基本概念媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,也就是现在已经很少采用了。所以</div> </li> <li><a href="/article/1920885348028706816.htm" title="FFmpeg音视频处理指南,提升Android程序员月薪的关键技巧" target="_blank">FFmpeg音视频处理指南,提升Android程序员月薪的关键技巧</a> <span class="text-muted">EtwCpp</span> <a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</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/android/1.htm">android</a> <div>作为一名Android程序员,如果你擅长音视频编解码相关的开发,那么你的技能将会变得更加独特和有价值。本文将介绍如何使用FFmpeg库在Android应用中进行音视频处理,并分享一些提升月薪的秘籍。了解FFmpegFFmpeg是一个强大的开源音视频处理工具,它提供了一组用于编解码、转换和处理音视频的库和工具。在Android平台上,我们可以使用FFmpeg库来实现各种音视频处理功能。集成FFmpe</div> </li> <li><a href="/article/1919938311984574464.htm" title="鸿蒙5.0&next开发【典型场景的视频编码配置】音视频编解码" target="_blank">鸿蒙5.0&next开发【典型场景的视频编码配置】音视频编解码</a> <span class="text-muted">是秃子总会反光</span> <a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E7%B3%BB%E5%88%97/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/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99%E7%B3%BB%E7%BB%9F/1.htm">鸿蒙系统</a> <div>典型场景的视频编码配置此文档描述了AVCodec视频编码能力在不同应用场景下的推荐配置参数,供调用者根据实际应用场景进行视频编码应用的开发。视频编码在视频通话、视频会议、直播、视频编辑、视频分享等场景均有广泛使用,按照体验要求,上述场景可归纳划分为低时延、实时流媒体、离线编码三大类别应用场景。本文将给出三大类别应用场景下视频编码的推荐参数配置,供调用者根据不同的应用场景下的需求进行参数配置选择。通</div> </li> <li><a href="/article/1919435388183703552.htm" title="音视频编解码——音频编解码格式AAC(Advanced Audio Coding)" target="_blank">音视频编解码——音频编解码格式AAC(Advanced Audio Coding)</a> <span class="text-muted">墨影清泉</span> <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/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/aac/1.htm">aac</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81/1.htm">音频编解码</a> <div>AAC(AdvancedAudioCoding)是一种广泛使用的音频编解码格式,它采用了先进的压缩算法,旨在提供更高的音频质量和更低的比特率。一、原理:AAC基于声学模型和感知编码原理,利用人耳对声音的感知特性,对音频信号进行压缩。它主要采用了以下技术:1、频域分析:将音频信号转换为频域表示,通常使用快速傅里叶变换(FFT)进行频谱分析。2、时频掩蔽效应:利用人耳的掩蔽特性,对较弱的信号在较强的信</div> </li> <li><a href="/article/1917559888511299584.htm" title="音视频开发从入门到精通:编解码、流媒体协议与FFmpeg实战指南" target="_blank">音视频开发从入门到精通:编解码、流媒体协议与FFmpeg实战指南</a> <span class="text-muted">阿牛的药铺</span> <a class="tag" taget="_blank" href="/search/LINUX%E9%A9%B1%E5%8A%A8%E5%AD%A6%E4%B9%A0/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/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>音视频开发从入门到精通:编解码、流媒体协议与FFmpeg实战指南音视频技术作为数字媒体领域的核心,正在成为互联网和移动应用的重要组成部分。本文将全面介绍音视频开发的学习路径,从基础概念到高级应用,从编解码原理到实战案例,帮助你构建完整的音视频技术知识体系,并掌握面试所需的关键技能。一、音视频编解码基础:H.264/H.265详解1.1视频编码的必要性与基本原理视频编码的核心目的是解决原始视频数据量</div> </li> <li><a href="/article/1917500632525238272.htm" title="数说CS | 招收人数稳定,双一流生源占比100%!北京大学计算机学院拟录取情况解读!" target="_blank">数说CS | 招收人数稳定,双一流生源占比100%!北京大学计算机学院拟录取情况解读!</a> <span class="text-muted">Baoyan_cs</span> <a class="tag" taget="_blank" href="/search/CS%E4%BF%9D%E7%A0%94%E5%B9%B2%E8%B4%A7/1.htm">CS保研干货</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%BF%9D%E7%A0%94/1.htm">计算机保研</a> <div>写在前面北京大学计算机学院,计算机学科评估为A+?保研录取情况如何?今天,岛主就带你深度揭秘北京大学计算机学院!01院校简介北京大学计算机学院涵盖了国内计算机专业最全面的研究方向。在计算机理论、系统软件与软件工程、知识工程、程序设计语言、信息安全、计算机图形学、人机交互与虚拟现实、数据库与信息系统、计算机网络、计算语言学、计算机体系结构、数字音视频编解码与多媒体通信、人工智能等多方面开展了广泛研究</div> </li> <li><a href="/article/1907064357766885376.htm" title="推荐:Rust版FFmpeg库封装利器——ac-ffmpeg" target="_blank">推荐:Rust版FFmpeg库封装利器——ac-ffmpeg</a> <span class="text-muted">蒋闯中Errol</span> <div>推荐:Rust版FFmpeg库封装利器——ac-ffmpegrust-ac-ffmpegSimpleandsafeRustinterfaceforFFmpeglibraries.项目地址:https://gitcode.com/gh_mirrors/ru/rust-ac-ffmpeg在多媒体处理领域,FFmpeg无疑是一个不可或缺的名字。它提供了强大的音视频编解码、容器处理和转换功能。而今天,我们</div> </li> <li><a href="/article/1905690912873312256.htm" title="学习ffmpeg-从了解开始" target="_blank">学习ffmpeg-从了解开始</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/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>前言:从安装开始sudoaptupdatesudoaptinstallffmpegffmpeg的基本组成模块名称功能描述主要用途AVFormat实现媒体封装格式的处理,支持多种音视频容器格式(如MP4、AVI、MKV等)。-读取和解析音视频文件的容器格式-封装和复用音视频流-支持流媒体协议(如RTMP、HTTP)AVCodec提供音视频编解码器,支持多种编解码格式(如H.264、AAC、MP3等)</div> </li> <li><a href="/article/1904136498647724032.htm" title="FFmpeg 命令行全解析:高效音视频处理从入门到精通" target="_blank">FFmpeg 命令行全解析:高效音视频处理从入门到精通</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/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/ffplay/1.htm">ffplay</a><a class="tag" taget="_blank" href="/search/ffprobe/1.htm">ffprobe</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%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81/1.htm">视频编解码</a><a class="tag" taget="_blank" href="/search/%E7%9B%B4%E6%92%AD%E8%BD%AC%E7%A0%81/1.htm">直播转码</a> <div>FFmpegFFmpeg是一款开源的多媒体处理工具集,支持音视频编解码、格式转换、流媒体处理等全链路操作。核心功能与工具:多媒体全链路支持支持1000+音视频编解码格式(如H.264、HEVC、AV1)和协议(RTMP、RTSP、HLS),覆盖录制、转码、流化等全流程。提供三大核心工具:ffmpeg:转码与流处理(如ffmpeg-iinput.mp4output.avi)。ffplay:媒体播放(</div> </li> <li><a href="/article/1897681198495363072.htm" title="Linux音视频学习--音视频编解码相关基本概念介绍" target="_blank">Linux音视频学习--音视频编解码相关基本概念介绍</a> <span class="text-muted">文艺小少年</span> <a class="tag" taget="_blank" href="/search/IPC%E9%A1%B9%E7%9B%AE%E5%AE%9E%E8%B7%B5%E4%B9%8B%E9%9F%B3%E8%A7%86%E9%A2%91%E7%9B%B8%E5%85%B3%E6%95%B4%E7%90%86/1.htm">IPC项目实践之音视频相关整理</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/dsp/1.htm">dsp</a><a class="tag" taget="_blank" href="/search/isp/1.htm">isp</a> <div>一、引言二、ISP、DSP------>1、ISP------------>内置isp------>2、DSP三、编解码------>1、视频编码------------>各个格式(H264/H265)的编码------------>码率调节------>2、音频编码------>3、码流、采样率、比特率、采样点数概念介绍------>4、采样点数一、引言入职的事终于告一段落,现在要慢慢开始熟悉新</div> </li> <li><a href="/article/1896861041757843456.htm" title="【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式" target="_blank">【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式</a> <span class="text-muted">weixin_30906425</span> <a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">操作系统</a> <div>目录(?)[-]编解码学习笔记二codec类型编解码学习笔记三Mpeg系列Mpeg1和Mpeg2编解码学习笔记四Mpeg系列Mpeg4编解码学习笔记五Mpeg系列AAC音频编解码学习笔记六H26x系列编解码学习笔记七微软WindowsMedia系列编解码学习笔记八Real系列编解码学习笔记九QuickTime系列编解码学习笔记十Ogg系列编解码学习笔记十一FlashVideo系列编解码学习笔记十二</div> </li> <li><a href="/article/1894534384577474560.htm" title="如何省流量?视频高度压缩背后的预测技术" target="_blank">如何省流量?视频高度压缩背后的预测技术</a> <span class="text-muted">音视频开发老马</span> <a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">流媒体服务器</a><a class="tag" taget="_blank" href="/search/Android%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91/1.htm">Android音视频开发</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91/1.htm">音视频开发</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/5G/1.htm">5G</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/H264/1.htm">H264</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>1、引言从20世纪90年代以来,数字音视频编解码技术迅速发展,一直是国内外研究的热点领域。随着5G的成熟和广泛商用,带宽已经越来越高,传输音视频变得更加容易。视频直播、视频聊天,已经完全融入了每个人的生活。视频为何如此普及呢?是因为通过视频能方便快捷地获取到大量信息。但视频数据量非常巨大,视频的网络传输也面临着巨大的挑战。于是视频编解码技术就出场了。具体到实时视频场景,不仅仅是数据量的问题,实时通</div> </li> <li><a href="/article/1890135566360571904.htm" title="FFmpeg音视频编解码优化" target="_blank">FFmpeg音视频编解码优化</a> <span class="text-muted">AI天才研究院</span> <a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97/1.htm">计算</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">AI大模型企业级应用开发实战</a><a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1/1.htm">R1</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AEAI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大数据AI人工智能大模型</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/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/%E5%A4%A7%E5%8E%82%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">大厂程序员</a><a class="tag" taget="_blank" href="/search/%E7%A1%85%E5%9F%BA%E8%AE%A1%E7%AE%97/1.htm">硅基计算</a><a class="tag" taget="_blank" href="/search/%E7%A2%B3%E5%9F%BA%E8%AE%A1%E7%AE%97/1.htm">碳基计算</a><a class="tag" taget="_blank" href="/search/%E8%AE%A4%E7%9F%A5%E8%AE%A1%E7%AE%97/1.htm">认知计算</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E7%89%A9%E8%AE%A1%E7%AE%97/1.htm">生物计算</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/AGI/1.htm">AGI</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">系统架构设计</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%93%B2%E5%AD%A6/1.htm">软件哲学</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%9E%E7%8E%B0%E8%B4%A2%E5%AF%8C%E8%87%AA%E7%94%B1/1.htm">程序员实现财富自由</a> <div>FFmpeg音视频编解码优化关键词FFmpeg音视频编解码优化策略性能测试实战案例摘要本文将围绕FFmpeg音视频编解码优化这一主题,详细介绍FFmpeg的基础知识、安装配置、音视频编解码原理、性能优化方法,以及实际应用中的实战案例。通过对FFmpeg的深入分析,读者将了解到如何高效地利用FFmpeg进行音视频处理,提升编解码性能,为音视频处理项目提供实用的优化方案。目录大纲第一部分:FFmpeg</div> </li> <li><a href="/article/1890130644802007040.htm" title="Linux 上使用 Rust、Golang 和 C++ 进行应用开发比较" target="_blank">Linux 上使用 Rust、Golang 和 C++ 进行应用开发比较</a> <span class="text-muted">孽小倩</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</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/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a> <div>作为一名前音视频编解码工程师,最常使用的语言是c/c++,但是永久了总想尝试下其他语言。rust一直被宣传为未来取代c++的语言,所以这次总结下golang,rust,与c++在linux开发应用时各自的优缺点,方便以后作出选择。这里从内存安全、性能、并发模型、生态系统、跨平台、开发体验这几个方面进行比较。1.内存安全语言内存安全Rust✅最安全(所有权&借用检查)Golang✅自动垃圾回收(GC</div> </li> <li><a href="/article/1886426933885988864.htm" title="音视频多媒体编解码器基础-codec" target="_blank">音视频多媒体编解码器基础-codec</a> <span class="text-muted">硬件学长森哥</span> <a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6/1.htm">嵌入式软件</a><a class="tag" taget="_blank" href="/search/%E5%BD%B1%E5%83%8F/1.htm">影像</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E9%A9%B1%E5%8A%A8/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/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a> <div>如果要从事编解码多媒体的工作,需要准备哪些更为基础的内容,这里帮你总结完。因为数据类型不同所以编解码算法不同,分为图像、视频和音频三大类;因为流程不同,可以分为编码和解码两部分;因为编码器实现不同,分为硬编码和软编码;因为编解码硬件位置不同,可以分为片内、片外和独立编解码模块三类;软件常用的框架ffmpeg。音视频编解码(Audio-VideoCoding)是指将音频和视频信号进行压缩编码以及解码</div> </li> <li><a href="/article/1885746538001526784.htm" title="Android 音视频编解码 -- MediaCodec" target="_blank">Android 音视频编解码 -- MediaCodec</a> <span class="text-muted">消失的旧时光-1943</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/android/1.htm">android</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> <div>引言如果我们只是简单玩一下音频、视频播放,那么使用MediaPlayer+SurfaceView播放就可以了,但如果想加个水印,加点其他特效什么的,那就不行了;学习Android自带的硬件码类–MediaCodec。MediaCodec介绍MediaCodec是从API16后引入的处理音视频编解码的类,它可以直接访问Android底层的多媒体编解码器,通常与MediaExtractor,Media</div> </li> <li><a href="/article/1883517453451980800.htm" title="freeswtch目录下modules.conf各个模块的介绍【freeswitch版本1.6.8】" target="_blank">freeswtch目录下modules.conf各个模块的介绍【freeswitch版本1.6.8】</a> <span class="text-muted">狂爱代码的码农</span> <a class="tag" taget="_blank" href="/search/VOIP%E9%82%A3%E4%BA%9B%E4%BA%8B/1.htm">VOIP那些事</a><a class="tag" taget="_blank" href="/search/freeswitch/1.htm">freeswitch</a> <div>应用模块(applications)mod_abstraction:为其他模块提供抽象层,有助于简化模块开发,让开发者能在统一框架下开发新功能,减少与底层系统的直接交互,提高代码可移植性和可维护性。mod_av:处理音频和视频相关操作,可用于音视频会议、流媒体播放等场景,支持多种音视频编解码格式,实现音视频数据的采集、处理和传输。mod_avmd:主要用于音频和视频元数据处理,能提取、分析和管理音</div> </li> <li><a href="/article/1833361033603936256.htm" title="音视频编解码技术(二):AAC 音频编码技术" target="_blank">音视频编解码技术(二):AAC 音频编码技术</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/%E6%B5%81%E5%AA%92%E4%BD%93%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">流媒体服务器</a><a class="tag" taget="_blank" href="/search/Android%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91/1.htm">Android音视频开发</a><a class="tag" taget="_blank" href="/search/%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/%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%E5%8D%8F%E8%AE%AE/1.htm">网络协议</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/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>一、AAC编码概述AAC是高级音频编码(AdvancedAudioCoding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术包括SBR或PS特性,目前AAC可以定义为⼀种由MPEG-4标准定义的有损音频压缩格式二、AAC编码规格简述AAC共有9种规格,以适应不同的场合的需要:MPEG-2AACLC低</div> </li> <li><a href="/article/1832039561476272128.htm" title="rk3588音视频硬件编解码介绍" target="_blank">rk3588音视频硬件编解码介绍</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>目录ffmpegrk3588系列芯片编程方法最终的输出结果ffmpeg示例程序ffmpeg音视频处理中通常是用ffmpeg进行软件音视频编解码aac/h264编码,但其运行速度过慢消耗cpu占用率。因此需要寻找音视频硬件编解码方法。rk3588系列芯片自带音视频硬件编解码框架ffmedia或者mpp,其内部原理是配合内部硬件rga内存,把音视频数据读入内部rga内存中进行Mpp硬件编解码计算,包括</div> </li> <li><a href="/article/1827406508946714624.htm" title="FFmpeg和SDL的关系" target="_blank">FFmpeg和SDL的关系</a> <span class="text-muted">星海逐愿</span> <a class="tag" taget="_blank" href="/search/%E9%9A%8F%E7%AC%94/1.htm">随笔</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>SDL(SimpleDirectMediaLayer)和FFmpeg是两个在多媒体开发中常用的开源库,但它们各自的功能和用途有所不同,通常一起使用以实现完整的多媒体处理和播放解决方案。1.FFmpeg的作用FFmpeg是一个强大的多媒体框架,用于录制、转换和流式传输音视频。它包含了大量的音视频编解码器和格式支持,可以处理几乎所有已知的多媒体格式。FFmpeg主要用于:视频解码和编码:将视频文件解码</div> </li> <li><a href="/article/1769082359577116672.htm" title="qt+ffmpeg 实现音视频播放(一)" target="_blank">qt+ffmpeg 实现音视频播放(一)</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/Qt/1.htm">Qt</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>一、ffmpeg下载官网:点击跳转二、模块介绍1.libavcodec:音视频编解码库,提供了多种编解码器,可以支持多种音视频格式的编解码操作。2.libavformat:音视频封装和解封装库,提供了多种封装格式的支持,可以读取和写入多种音视频文件格式。3.libavfilter:音视频过滤器库,提供了多种音视频过滤器,可以对音视频流进行各种处理,如添加水印、调整亮度、对比度等。4.libavde</div> </li> <li><a href="/article/5.htm" title="[星球大战]阿纳金的背叛" target="_blank">[星球大战]阿纳金的背叛</a> <span class="text-muted">comsci</span> <div>       本来杰迪圣殿的长老是不同意让阿纳金接受训练的.........     但是由于政治原因,长老会妥协了...这给邪恶的力量带来了机会     所以......现代的地球联邦接受了这个教训...绝对不让某些年轻人进入学院    </div> </li> <li><a href="/article/132.htm" title="看懂它,你就可以任性的玩耍了!" target="_blank">看懂它,你就可以任性的玩耍了!</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>          javascript作为前端开发的标配技能,如果不掌握好它的三大特点:1.原型 2.作用域 3. 闭包 ,又怎么可以说你学好了这门语言呢?如果标配的技能都没有撑握好,怎么可以任性的玩耍呢?怎么验证自己学好了以上三个基本点呢,我找到一段不错的代码,稍加改动,如果能够读懂它,那么你就可以任性了。 function jClass(b</div> </li> <li><a href="/article/259.htm" title="Java常用工具包 Jodd" target="_blank">Java常用工具包 Jodd</a> <span class="text-muted">Kai_Ge</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jodd/1.htm">jodd</a> <div>Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架。简单,却很强大! 写道 Jodd = Tools + IoC + MVC + DB + AOP + TX + JSON + HTML < 1.5 Mb Jodd 被分成众多模块,按需选择,其中 工具类模块有: jodd-core    &nb</div> </li> <li><a href="/article/386.htm" title="SpringMvc下载" target="_blank">SpringMvc下载</a> <span class="text-muted">120153216</span> <a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a> <div>@RequestMapping(value = WebUrlConstant.DOWNLOAD) public void download(HttpServletRequest request,HttpServletResponse response,String fileName) { OutputStream os = null; InputStream is = null; </div> </li> <li><a href="/article/513.htm" title="Python 标准异常总结" target="_blank">Python 标准异常总结</a> <span class="text-muted">2002wmj</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>Python标准异常总结 AssertionError 断言语句(assert)失败 AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) FloatingPointError 浮点计算错误 GeneratorExit generator.close()方法被调用的时候 ImportError 导入模块失</div> </li> <li><a href="/article/640.htm" title="SQL函数返回临时表结构的数据用于查询" target="_blank">SQL函数返回临时表结构的数据用于查询</a> <span class="text-muted">357029540</span> <a class="tag" taget="_blank" href="/search/SQL+Server/1.htm">SQL Server</a> <div>这两天在做一个查询的SQL,这个SQL的一个条件是通过游标实现另外两张表查询出一个多条数据,这些数据都是INT类型,然后用IN条件进行查询,并且查询这两张表需要通过外部传入参数才能查询出所需数据,于是想到了用SQL函数返回值,并且也这样做了,由于是返回多条数据,所以把查询出来的INT类型值都拼接为了字符串,这时就遇到问题了,在查询SQL中因为条件是INT值,SQL函数的CAST和CONVERST都</div> </li> <li><a href="/article/767.htm" title="java 时间格式化 | 比较大小| 时区 个人笔记" target="_blank">java 时间格式化 | 比较大小| 时区 个人笔记</a> <span class="text-muted">7454103</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/MyEclipse/1.htm">MyEclipse</a> <div>个人总结! 不当之处多多包含! 引用 1.0 如何设置 tomcat 的时区:          位置:(catalina.bat---JAVA_OPTS  下面加上)          set JAVA_OPT</div> </li> <li><a href="/article/894.htm" title="时间获取Clander的用法" target="_blank">时间获取Clander的用法</a> <span class="text-muted">adminjun</span> <a class="tag" taget="_blank" href="/search/Clander/1.htm">Clander</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4/1.htm">时间</a> <div>/**    * 得到几天前的时间    * @param d    * @param day    * @return    */   public static Date getDateBefore(Date d,int day){    Calend</div> </li> <li><a href="/article/1021.htm" title="JVM初探与设置" target="_blank">JVM初探与设置</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台</div> </li> <li><a href="/article/1148.htm" title="SQL中ON和WHERE的区别" target="_blank">SQL中ON和WHERE的区别</a> <span class="text-muted">avords</span> <div>SQL中ON和WHERE的区别   数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。   www.2cto.com   在使用left jion时,on和where条件的区别如下:  1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。  </div> </li> <li><a href="/article/1275.htm" title="说说自信" target="_blank">说说自信</a> <span class="text-muted">houxinyou</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a> <div>自信的来源分为两种,一种是源于实力,一种源于头脑.实力是一个综合的评定,有自身的能力,能利用的资源等.比如我想去月亮上,要身体素质过硬,还要有飞船等等一系列的东西.这些都属于实力的一部分.而头脑不同,只要你头脑够简单就可以了!同样要上月亮上,你想,我一跳,1米,我多跳几下,跳个几年,应该就到了!什么?你说我会往下掉?你笨呀你!找个东西踩一下不就行了吗?     无论工作还</div> </li> <li><a href="/article/1402.htm" title="WEBLOGIC事务超时设置" target="_blank">WEBLOGIC事务超时设置</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/weblogic/1.htm">weblogic</a><a class="tag" taget="_blank" href="/search/jta/1.htm">jta</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1%E8%B6%85%E6%97%B6/1.htm">事务超时</a> <div>        系统中统计数据,由于调用统计过程,执行时间超过了weblogic设置的时间,提示如下错误: 统计数据出错! 原因:The transaction is no longer active - status: 'Rolling Back. [Reason=weblogic.transaction.internal</div> </li> <li><a href="/article/1529.htm" title="两年已过去,再看该如何快速融入新团队" target="_blank">两年已过去,再看该如何快速融入新团队</a> <span class="text-muted">bingyingao</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E4%BA%92%E8%81%94%E7%BD%91/1.htm">互联网</a><a class="tag" taget="_blank" href="/search/%E8%9E%8D%E5%85%A5/1.htm">融入</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E6%96%B0%E5%9B%A2%E9%98%9F/1.htm">新团队</a> <div>偶得的空闲,翻到了两年前的帖子 该如何快速融入一个新团队,有所感触,就记下来,为下一个两年后的今天做参考。     时隔两年半之后的今天,再来看当初的这个博客,别有一番滋味。而我已经于今年三月份离开了当初所在的团队,加入另外的一个项目组,2011年的这篇博客之后的时光,我很好的融入了那个团队,而直到现在和同事们关系都特别好。大家在短短一年半的时间离一起经历了一</div> </li> <li><a href="/article/1656.htm" title="【Spark七十七】Spark分析Nginx和Apache的access.log" target="_blank">【Spark七十七】Spark分析Nginx和Apache的access.log</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a> <div>Spark分析Nginx和Apache的access.log,第一个问题是要对Nginx和Apache的access.log文件进行按行解析,按行解析就的方法是正则表达式:   Nginx的access.log解析正则表达式   val PATTERN = """([^ ]*) ([^ ]*) ([^ ]*) (\\[.*\\]) (\&q</div> </li> <li><a href="/article/1783.htm" title="Erlang patch" target="_blank">Erlang patch</a> <span class="text-muted">bookjovi</span> <a class="tag" taget="_blank" href="/search/erlang/1.htm">erlang</a> <div>Totally five patchs committed to erlang otp, just small patchs. IMO, erlang really is a interesting programming language, I really like its concurrency feature. but the functional programming style </div> </li> <li><a href="/article/1910.htm" title="log4j日志路径中加入日期" target="_blank">log4j日志路径中加入日期</a> <span class="text-muted">bro_feng</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a> <div>要用log4j使用记录日志,日志路径有每日的日期,文件大小5M新增文件。 实现方式 log4j: <appender name="serviceLog" class="org.apache.log4j.RollingFileAppender"> <param name="Encoding" v</div> </li> <li><a href="/article/2037.htm" title="读《研磨设计模式》-代码笔记-桥接模式" target="_blank">读《研磨设计模式》-代码笔记-桥接模式</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ /** * 个人觉得关于桥接模式的例子,蜡笔和毛笔这个例子是最贴切的:http://www.cnblogs.com/zhenyulu/articles/67016.html * 笔和颜色是可分离的,蜡笔把两者耦合在一起了:一支蜡笔只有一种</div> </li> <li><a href="/article/2164.htm" title="windows7下SVN和Eclipse插件安装" target="_blank">windows7下SVN和Eclipse插件安装</a> <span class="text-muted">chenyu19891124</span> <a class="tag" taget="_blank" href="/search/eclipse%E6%8F%92%E4%BB%B6/1.htm">eclipse插件</a> <div>今天花了一天时间弄SVN和Eclipse插件的安装,今天弄好了。svn插件和Eclipse整合有两种方式,一种是直接下载插件包,二种是通过Eclipse在线更新。由于之前Eclipse版本和svn插件版本有差别,始终是没装上。最后在网上找到了适合的版本。所用的环境系统:windows7JDK:1.7svn插件包版本:1.8.16Eclipse:3.7.2工具下载地址:Eclipse下在地址:htt</div> </li> <li><a href="/article/2291.htm" title="[转帖]工作流引擎设计思路" target="_blank">[转帖]工作流引擎设计思路</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</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/workflow/1.htm">workflow</a><a class="tag" taget="_blank" href="/search/%E4%BC%81%E4%B8%9A%E5%BA%94%E7%94%A8/1.htm">企业应用</a> <div> 作为国内的同行,我非常希望在流程设计方面和大家交流,刚发现篇好文(那么好的文章,现在才发现,可惜),关于流程设计的一些原理,个人觉得本文站得高,看得远,比俺的文章有深度,转载如下 ================================================================================= 自开博以来不断有朋友来探讨工作流引擎该如何</div> </li> <li><a href="/article/2418.htm" title="Linux 查看内存,CPU及硬盘大小的方法" target="_blank">Linux 查看内存,CPU及硬盘大小的方法</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/cpu/1.htm">cpu</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E5%AD%98/1.htm">内存</a><a class="tag" taget="_blank" href="/search/%E7%A1%AC%E7%9B%98/1.htm">硬盘</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%B0%8F/1.htm">大小</a> <div>一、查看CPU信息的命令 [root@R4 ~]# cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id" model name : Intel(R) Xeon(R) CPU X5450 @ 3.00GHz model name : </div> </li> <li><a href="/article/2545.htm" title="linux 踢出在线用户" target="_blank">linux 踢出在线用户</a> <span class="text-muted">dongwei_6688</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>两个步骤: 1.用w命令找到要踢出的用户,比如下面:   [root@localhost ~]# w 18:16:55 up 39 days, 8:27, 3 users, load average: 0.03, 0.03, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT</div> </li> <li><a href="/article/2672.htm" title="放手吧,就像不曾拥有过一样" target="_blank">放手吧,就像不曾拥有过一样</a> <span class="text-muted">dcj3sjt126com</span> <div>内容提要: 静悠悠编著的《放手吧就像不曾拥有过一样》集结“全球华语世界最舒缓心灵”的精华故事,触碰生命最深层次的感动,献给全世界亿万读者。《放手吧就像不曾拥有过一样》的作者衷心地祝愿每一位读者都给自己一个重新出发的理由,将那些令你痛苦的、扛起的、背负的,一并都放下吧!把憔悴的面容换做一种清淡的微笑,把沉重的步伐调节成春天五线谱上的音符,让自己踏着轻快的节奏,在人生的海面上悠然漂荡,享受宁静与</div> </li> <li><a href="/article/2799.htm" title="php二进制安全的含义" target="_blank">php二进制安全的含义</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a> <div>PHP里,有string的概念。 string里,每个字符的大小为byte(与PHP相比,Java的每个字符为Character,是UTF8字符,C语言的每个字符可以在编译时选择)。 byte里,有ASCII代码的字符,例如ABC,123,abc,也有一些特殊字符,例如回车,退格之类的。 特殊字符很多是不能显示的。或者说,他们的显示方式没有标准,例如编码65到哪儿都是字母A,编码97到哪儿都是字符</div> </li> <li><a href="/article/2926.htm" title="Linux下禁用T440s,X240的一体化触摸板(touchpad)" target="_blank">Linux下禁用T440s,X240的一体化触摸板(touchpad)</a> <span class="text-muted">gashero</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ThinkPad/1.htm">ThinkPad</a><a class="tag" taget="_blank" href="/search/%E8%A7%A6%E6%91%B8%E6%9D%BF/1.htm">触摸板</a> <div>自打1月买了Thinkpad T440s就一直很火大,其中最让人恼火的莫过于触摸板。   Thinkpad的经典就包括用了小红点(TrackPoint)。但是小红点只能定位,还是需要鼠标的左右键的。但是自打T440s等开始启用了一体化触摸板,不再有实体的按键了。问题是要是好用也行。   实际使用中,触摸板一堆问题,比如定位有抖动,以及按键时会有飘逸。这就导致了单击经常就</div> </li> <li><a href="/article/3053.htm" title="graph_dfs" target="_blank">graph_dfs</a> <span class="text-muted">hcx2013</span> <a class="tag" taget="_blank" href="/search/Graph/1.htm">Graph</a> <div>package edu.xidian.graph; class MyStack { private final int SIZE = 20; private int[] st; private int top; public MyStack() { st = new int[SIZE]; top = -1; } public void push(i</div> </li> <li><a href="/article/3180.htm" title="Spring4.1新特性——Spring核心部分及其他" target="_blank">Spring4.1新特性——Spring核心部分及其他</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring+4.1/1.htm">spring 4.1</a> <div>目录 Spring4.1新特性——综述 Spring4.1新特性——Spring核心部分及其他 Spring4.1新特性——Spring缓存框架增强 Spring4.1新特性——异步调用和事件机制的异常处理 Spring4.1新特性——数据库集成测试脚本初始化 Spring4.1新特性——Spring MVC增强 Spring4.1新特性——页面自动化测试框架Spring MVC T</div> </li> <li><a href="/article/3307.htm" title="配置HiveServer2的安全策略之自定义用户名密码验证" target="_blank">配置HiveServer2的安全策略之自定义用户名密码验证</a> <span class="text-muted">liyonghui160com</span> <div>    具体从网上看   http://doc.mapr.com/display/MapR/Using+HiveServer2#UsingHiveServer2-ConfiguringCustomAuthentication   LDAP Authentication using OpenLDAP Setting </div> </li> <li><a href="/article/3434.htm" title="一位30多的程序员生涯经验总结" target="_blank">一位30多的程序员生涯经验总结</a> <span class="text-muted">pda158</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB/1.htm">生活</a><a class="tag" taget="_blank" href="/search/%E5%92%A8%E8%AF%A2/1.htm">咨询</a> <div>1.客户在接触到产品之后,才会真正明白自己的需求。   这是我在我的第一份工作上面学来的。只有当我们给客户展示产品的时候,他们才会意识到哪些是必须的。给出一个功能性原型设计远远比一张长长的文字表格要好。 2.只要有充足的时间,所有安全防御系统都将失败。   安全防御现如今是全世界都在关注的大课题、大挑战。我们必须时时刻刻积极完善它,因为黑客只要有一次成功,就可以彻底打败你。   3.</div> </li> <li><a href="/article/3561.htm" title="分布式web服务架构的演变" target="_blank">分布式web服务架构的演变</a> <span class="text-muted">自由的奴隶</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</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/%E4%BA%92%E8%81%94%E7%BD%91/1.htm">互联网</a> <div>最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候已经是托管了一台主机,并且有一定的带宽了,这个时候由于网站具备了一定的特色,吸引了部分人访问,逐渐你发现系统的压力越来越高,响应速度越来越慢,而这个时候比较明显的是数据库和应用互相影响,应用出问题了,数据库也很容易出现问题,而数据库出问题的时候,应用也容易</div> </li> <li><a href="/article/3688.htm" title="初探Druid连接池之二——慢SQL日志记录" target="_blank">初探Druid连接池之二——慢SQL日志记录</a> <span class="text-muted">xingsan_zhang</span> <a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%BF%97/1.htm">日志</a><a class="tag" taget="_blank" href="/search/%E8%BF%9E%E6%8E%A5%E6%B1%A0/1.htm">连接池</a><a class="tag" taget="_blank" href="/search/druid/1.htm">druid</a><a class="tag" taget="_blank" href="/search/%E6%85%A2SQL/1.htm">慢SQL</a> <div>由于工作原因,这里先不说连接数据库部分的配置,后面会补上,直接进入慢SQL日志记录。   1.applicationContext.xml中增加如下配置: <bean abstract="true" id="mysql_database" class="com.alibaba.druid.pool.DruidDataSourc</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>