HLS简介

    • 1.协议简介
    • 2.工作原理
      • 2.1总体架构
      • 2.2 优势及劣势
      • 2.3 M3U8简介
        • 2.3.1 tag说明
        • 2.3.2 常用tag详解

1.协议简介

HLS全称为HTTP Live Streaming,是苹果公司提出的基于HTTP的流媒体网络传输协议。它的工作原理是把整个媒体流分成一个个小的基于HTTP的媒体分片来下载,每次只下载一些分片。在开始一个流媒体会话时,客户端会下载一个包含媒体分片的索引文件,即extended M3U playlist文件(m3u8),用于寻找可用的媒体分片。

HLS中,索引文件可以嵌套,一般只有一级索引和二级索引;媒体流封分片装格式只支持MPEG-2传输流(ts)、WebVTT [WebVTT]文件或Packed Audio文件。

下图为索引文件(m3u8)和媒体分片(ts)之间的关系图:一级m3u8嵌套二级m3u8,二级m3u8描述ts分片。

HLS简介_第1张图片

2.工作原理

2.1总体架构

HLS简介_第2张图片
1、 服务器将媒体文件转换为m3u8及ts分片;对于直播源,服务器需要实时动态更新。
2、 客户端请求m3u8文件,根据索引获取ts分片;点播与直播服务器不同的地方是, 直播的 m3u8 文件会不断更新,而点播的 m3u8 文件是不会变的,只需要客户端在开始时请求一次即可。

客户端与服务器通过HTTP协议进行交互,以两级m3u8嵌套为例,客户端先GET请求到一级m3u8,一级m3u8里面包含了服务器端可以用于传播的一个或多个不同带宽的URL,这URL可以获取到二级m3u8;二级m3u8包含了多个ts分片的duration及其URL,最后带过这个URL下载ts分片。交互方式如下:
HLS简介_第3张图片

2.2 优势及劣势

优势:

  1. 客户端支持简单,只需要支持 HTTP 请求即可,HTTP 协议无状态,只需要按顺序下载媒体片段即可。
  2. 使用 HTTP 协议网络兼容性好,HTTP 数据包也可以方便地通过防火墙或者代理服务器。
  3. 当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

劣势:

  1. 因其自身的实现方式,HLS存在延迟(最少有一个分片),对于直播等实时敏感的场景,体验不好。

2.3 M3U8简介

HLS协议很大一部分内容即是对M3U8文本协议的描述。M3U8即播放索引文件,也称为Playlist,是由多个独立行组成的文本文件,必须通过 URI(.m3u8 或 .m3u) 或者 HTTP Content-Type 来识别(application/vnd.apple.mpegurl 或 audio/mpegurl)。

每行由用 \n 或者 \r\n来标识换行。每一行可以是一个URI、空白行或是一个 以# 号开头的字符串。

以 # 开头的是 tag 或者注释,以 #EXT 开头的是 tag, 其余的为注释, 在解析时应该忽略。URI 表示一个ts分片地址或是Playlist地址。URI 可以用绝对地址或者相对地址,如果使用相对地址,那么是相对于当前Playlist的地址。
有些tag带有属性值,多个属性用逗号分隔。
常见的m3u8文件如下所示:
一级m3u8:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000
http://gslbserv.itv.cmvideo.cn/index.m3u8?channel-id=bstvod&Contentid=4007432528&authCode=08210410332183529120&stbId=009903FF0002288018189C62AB5407DB&usergroup=g10000000001&userToken=ded7cd85837b64937de618db3e10553310vv
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1300000
http://gslbserv.itv.cmvideo.cn/index.m3u8?channel-id=bstvod&Contentid=4007432527&authCode=08210410332183529120&stbId=009903FF0002288018189C62AB5407DB&usergroup=g10000000001&userToken=ded7cd85837b64937de618db3e10553310vv
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2300000
http://gslbserv.itv.cmvideo.cn/index.m3u8?channel-id=bstvod&Contentid=4007432526&authCode=08210410332183529120&stbId=009903FF0002288018189C62AB5407DB&usergroup=g10000000001&userToken=ded7cd85837b64937de618db3e10553310vv

二级m3u8:

#EXTM3U
#EXT-X-VERSION:1
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:19674922
#EXT-X-PROGRAM-DATE-TIME:2019-03-28T04:33:40Z
#EXTINF:10,
19674922.ts?
#EXT-X-PROGRAM-DATE-TIME:2019-03-28T04:33:50Z
#EXTINF:10,
19674923.ts?
#EXT-X-PROGRAM-DATE-TIME:2019-03-28T04:34:00Z
#EXTINF:10,
19674924.ts?

音视频分离m3u8示例1:

#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="English", \
DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en", \
URI="main/english-audio.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Deutsch", \
DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="de", \
URI="main/german-audio.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Commentary", \
DEFAULT=NO,AUTOSELECT=NO,LANGUAGE="en", \
URI="commentary/audio-only.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",AUDIO="aac"
low/video-only.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",AUDIO="aac"
mid/video-only.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",AUDIO="aac"
hi/video-only.m3u8

音视频分离m3u8示例2:

#EXTM3U
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Main", \
DEFAULT=YES,URI="low/main/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Centerfield", \
DEFAULT=NO,URI="low/centerfield/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Dugout", \
DEFAULT=NO,URI="low/dugout/audio-video.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",VIDEO="low"
low/main/audio-video.m3u8
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Main", \
DEFAULT=YES,URI="mid/main/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Centerfield", \
DEFAULT=NO,URI="mid/centerfield/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Dugout", \
DEFAULT=NO,URI="mid/dugout/audio-video.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",VIDEO="mid"
mid/main/audio-video.m3u8
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Main", \
DEFAULT=YES,URI="hi/main/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Centerfield", \
DEFAULT=NO,URI="hi/centerfield/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Dugout", \
DEFAULT=NO,URI="hi/dugout/audio-video.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",VIDEO="hi"
hi/main/audio-video.m3u8

2.3.1 tag说明

名词说明:
1、 Media Playlist:携带ts分片url的m3u8;
2、 Master Playlist:一级m3u8;
3、 Media Segment:ts分片
4、 Attribute Lists:属性列表

 Attribute Lists :

• 有的 tags 的值带有 Attribute Lists。
• 一个 Attribute List是一个用逗号分隔的 attribute/value 对列表。
• 格式为: AttributeName=AttributeValue。

tag以#EXT开头,主要分为以下几类:

1) Basic Tags

Basic Tags 可以用在 Media Playlist 和 Master Playlist 里面。

• EXTM3U: 必须在文件的第一行, 标识是一个 Extended M3U Playlist 文件。
• EXT-X-VERSION: 表示 Playlist 兼容的版本。

2) Media Segment Tags
每一个 Media Segment 通过一系列的 Media Segment tags 跟一个 URI 来指定。有的 Media Segment tags 只应用于下一个 segment, 有的则是应用所有下面的 segments。
一个 Media Segment tag 只能出现在 Media Playlist 里面。

• EXTINF: 用于指定 Media Segment 的 duration。
• EXT-X-BYTERANGE: 用于指定 URI 的 sub-range。
• EXT-X-DISCONTINUITY: 表示后续分片属性发生变化,如文件格式/编码/序号。
• EXT-X-KEY: 表示Media Segment 已加密,该值用于解密。
• EXT-X-MAP: 表示Media Segment的头部信息,比如PAT/PMT 或者WebVTT头。
• EXT-X-PROGRAM-DATE-TIME: 和 Media Segment 的第一个sample一起来确定时间戳。

3)Media Playlist Tags
Media Playlist tags 描述 Media Playlist 的全局参数。 同样地, Media Playlist tags 只能出现在 Media Playlist 里面。

• EXT-X-TARGETDURATION: 用于指定最大的 Media Segment duration。
• EXT-X-MEDIA-SEQUENCE: 用于指定第一个 Media Segment 的序号。
• EXT-X-DISCONTINUITY-SEQUENCE: 用于不同 Variant Stream 之间同步。
• EXT-X-ENDLIST: 表示Media Playlist结束。
• EXT-X-PLAYLIST-TYPE: 可选, 指定整个 Playlist 的类型。
• EXT-X-I-FRAMES-ONLY: 表示每个 Media Segment 均为I-frame。

4)Master Playlist Tags
Master Playlist tags 定义 Variant Streams, Renditions 和其他显示的全局参数。 Master Playlist tags 只能出现在 Master Playlist 中。

• EXT-X-MEDIA: 用于关联同一个内容的多个 Media Playlist 的多种翻译。
• EXT-X-STREAM-INF:用于指定下级Media Playlist相关属性。
• EXT-X-I-FRAME-STREAM-INF:与EXT-X-STREAM-INF类似,但指向的下级Media Playlist包含Media Segment均为I-frame。
• EXT-X-SESSION-DATA: 可以随意存放一些 session 数据。

5) Media or Master Playlist Tags
这里的 tags 可以出现在 Media Playlist 或者 Master Playlist 中。 但是如果同时出现在同一个 Master Playlist 和 Media Playlist 中时, 必须为相同值。

• EXT-X-INDEPENDENT-SEGMENTS: 表示每个 Media Segment 可以独立解码。
• EXT-X-START: 标识一个优选的点来播放这个 Playlist。

2.3.2 常用tag详解

更加详细的描述,请参考HLS官方文档。

#EXTM3U	每个M3U文件第一行必须是这个tag。
#EXTINF	
格式:#EXTINF:
<URI>指定每个ts分片的时长,这个仅对其后面的URI有效,每两个媒体段URI间被这个tag分隔开。
<duration>表示时长(秒)必须是整数,如果版本在3以上可以是浮点数。
<URI>表示该ts分片下载地址
</code></pre> 
  <pre><code>#EXT-X-TARGETDURATION	
格式:#EXT-X-TARGETDURATION:<s>
<s>指定最大的媒体段时间长(秒)。#EXTINF中指定的时间长度必须小于或是等于这个最大值。
这个tag在整个PlayList文件中只能出现一次(在嵌套的情况下,一般有真正ts url的m3u8才会出现该tag)。
</code></pre> 
  <pre><code>#EXT-X-MEDIA-SEQUENCE	
格式:#EXT-X-MEDIA-SEQUENCE:<number>
<number>表示PlayList中第一个分片开始的序号,其他分片序号按此逐步加1
#EXT-X-ENDLIST	表示PlayList的末尾了,它可以在PlayList中任意位置出现,但是只能出现一个。直播节目不具有此tag,一般用此tag来区分是否为直播节目。
</code></pre> 
  <pre><code>#EXT-X-STREAM-INF	指定一个包含多媒体信息的 media URI 作为PlayList,一般做M3U8的嵌套使用,它只对紧跟后面的URI有效。
格式:
#EXT-X-STREAM-INF:<attribute-list>
<URI>
<URI>指定下级m3u8下载地址。
<attribute-list>为属性描述
有以下属性:
BANDWIDTH:带宽,必须有。
PROGRAM-ID:该值是一个十进制整数,惟一地标识一个在PlayList文件范围内的特定的描述。一个PlayList 文件中可能包含多个有相同ID的此tag。
CODECS:不是必须的。
RESOLUTION:分辨率。
AUDIO:这个值必须和AUDIO类别的“EXT-X-MEDIA”标签中“GROUP-ID”属性值相匹配。
VIDEO:同上
</code></pre> 
  <pre><code>#EXT-X-MEDIA	被用来在PlayList中表示相同内容的不用语种/译文的版本,比如可以通过使用3个这种tag表示3中不用语音的音频,或者用2个这个tag表示不同角度的video在PlayLists中。
格式:#EXT-X-MEDIA:<attribute-list>
<attribute-list>为属性描述,包含:URI、TYPE、GROUP-ID、LANGUAGE、NAME、DEFAULT、AUTOSELECT。
URI:如果没有,则表示这个tag描述的可选择版本在主PlayList的EXT-X-STREAM-INF中存在;
TYPE:AUDIO或VIDEO;
GROUP-ID:具有相同ID的MEDIA tag,组成一组样式;
LANGUAGE:确定使用的主要语言
NAME:对当前类型的描述,如果存在LANGUAGE,则改属性必须描述LANGUAGE指定的语言。
DEFAULT:YES或是NO,默认是No,如果是YES,则客户端会以这种选项来播放,除非用户自己进行选择。
AUTOSELECT:YES或是NO,默认是No,如果是YES,则客户端会根据当前播放环境来进行选择(用户没有根据自己偏好进行选择的前提下)。
#EXT-X-PROGRAM-DATE-TIME	将一个绝对时间或是日期和一个媒体段中的第一个sample相关联,只对下一个meida URI有效,格式如下:
#EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ssZ>
例如:
#EXT-X-PROGRAM-DATE-TIME:2019-03-26T10:09:10Z
</code></pre> 
  <pre><code>#EXT-X-BYTERANGE	表示媒体段是一个媒体URI资源中的一段,只对其后的media URI有效
格式:#EXT-X-BYTERANGE:<n>[@o]
<n>表示这个区间的大小
[@o]表在URI中的offset;
该tag只在V4及以后的版本生效
</code></pre> 
  <pre><code>#EXT-X-KEY	表示怎么对media segments进行解码。其作用范围是下次该tag出现前的所有media URI
格式:#EXT-X-KEY:<attribute-list>
<attribute-list>:NONE 或者 AES-128。如果是NONE,则URI以及IV属性必须不存在,如果是AES-128(Advanced Encryption Standard),则URI必须存在,IV可以不存在。对于AES-128的情况,keytag和URI属性共同表示了一个key文件,通过URI可以获得这个key,如果没有IV(Initialization Vector),则使用序列号作为IV进行编解码,将序列号的高位赋到16个字节的buffer中,左边补0;如果有IV,则将改值当成16个字节的16进制数。
</code></pre> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1294968718572462080"></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/1833738291426455552.htm"
                           title="调研App里的WebDAV功能@FE File Explorer 文件管理器(二)" target="_blank">调研App里的WebDAV功能@FE File Explorer 文件管理器(二)</a>
                        <span class="text-muted">jaminezhong</span>

                        <div>今天我又淘到一款特容易链接WebDAV的软件:FEFileExplorer我觉得它最大好处是在Mac版电脑、Android、iOS上,一个全功能的文件上管理app。而且还可以在您的iOS、安卓和Mac电脑上使用流媒体方式播放网络共享、NAS里面的视频和音乐。FEFileExplorerPro+穿越派=个人私有云需要穿越派的,在这里下:https://www.huluer.com/usercente</div>
                    </li>
                    <li><a href="/article/1833569302553391104.htm"
                           title="推荐项目:Monibuca(m7s)—— 开源直播服务器框架的明日之星" target="_blank">推荐项目:Monibuca(m7s)—— 开源直播服务器框架的明日之星</a>
                        <span class="text-muted">陶真蔷Scott</span>

                        <div>推荐项目:Monibuca(m7s)——开源直播服务器框架的明日之星monibucaMonibucaisaModularized,ExtensibleframeworkforbuildingStreamingServer项目地址:https://gitcode.com/gh_mirrors/mo/monibuca随着在线视频和流媒体服务的日益普及,高质量且灵活的直播服务器框架成为了开发者眼中的瑰宝</div>
                    </li>
                    <li><a href="/article/1833377741844606976.htm"
                           title="从吉利星越车名的发布,看吉利新车宣传的套路" target="_blank">从吉利星越车名的发布,看吉利新车宣传的套路</a>
                        <span class="text-muted">wakechy</span>

                        <div>这两天,吉利代号为FY11的车型终于公布了正式的中文名称——星越,车型外观采用类似宝马X6式的溜背设计,很是吸睛,令人相信会是吉利又一辆走量的车型。今天就借星越中文名发布这个契机,聊聊吉利这几年的营销宣传方式,或者说营销宣传套路。首先,在新车上市前一年的某个时刻,你会发现微信公众号,今日头条等平台,无论是自媒体账号,还是主流媒体账号,忽然之间出现了吉利某款车型的概念图。比如现在这款星越,早在201</div>
                    </li>
                    <li><a href="/article/1833125384351215616.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>视频的容器格式和编码格式是视频文件的两个核心概念,它们相互关联但具有不同的功能。以下是详细的解释:1.容器格式(ContainerFormat)容器格式,又称封装格式,指的是视频文件的外壳或容器,它用于封装视频、音频、字幕、元数据(如标题、章节信息等)等各种流媒体内容。容器格式本质上决定了文件的扩展名。常见的容器格式:MP4:支持多种编解码器,广泛用于互联网和移动设备。MKV:支持多轨音频、字幕,</div>
                    </li>
                    <li><a href="/article/1833011783334457344.htm"
                           title="Android平台轻量级RTSP服务之GStreamer还是SmartRtspServer" target="_blank">Android平台轻量级RTSP服务之GStreamer还是SmartRtspServer</a>
                        <span class="text-muted">音视频牛哥</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E7%89%9B%E7%9B%B4%E6%92%ADSDK/1.htm">大牛直播SDK</a><a class="tag" taget="_blank" href="/search/Android/1.htm">Android</a><a class="tag" taget="_blank" href="/search/RTSP%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">RTSP服务器</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%8D%93rtsp%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">安卓rtsp服务器</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/rtsp%E6%9C%8D%E5%8A%A1/1.htm">rtsp服务</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%8D%93%E5%90%AF%E5%8A%A8rtsp%E6%9C%8D%E5%8A%A1/1.htm">安卓启动rtsp服务</a><a class="tag" taget="_blank" href="/search/android%E7%BD%91%E7%BB%9C%E6%91%84%E5%83%8F%E5%A4%B4/1.htm">android网络摄像头</a><a class="tag" taget="_blank" href="/search/android%E5%86%85%E7%BD%91%E9%87%87%E9%9B%86%E6%91%84%E5%83%8F%E5%A4%B4/1.htm">android内网采集摄像头</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E7%89%9B%E7%9B%B4%E6%92%ADSDK/1.htm">大牛直播SDK</a>
                        <div>技术背景Android上启动一个轻量级RTSP服务,让Android终端像网络摄像头一样提供个外部可供RTSP拉流的服务,在内网小并发又不希望部署单独流媒体服务的场景下非常适用,在Android终端实现这样的流媒体服务,决定了,只能是轻量级的服务。可以通过集成第三方库或编写自定义的RTSP服务器代码来实现这一功能。今天我们介绍两种方案,一种是GStreamer,另外一种,大牛直播SDK的Smart</div>
                    </li>
                    <li><a href="/article/1832875630803382272.htm"
                           title="ios流媒体直播整个框架介绍(HLS、RTSP)" target="_blank">ios流媒体直播整个框架介绍(HLS、RTSP)</a>
                        <span class="text-muted">少一些浮躁__</span>
<a class="tag" taget="_blank" href="/search/IOS/1.htm">IOS</a>
                        <div>一、HTTP(WebService)基于HTTP的渐进下载ProgressiveDownload流媒体播放仅是在完全下载后再播放模式基础上做了一些小的改进。与下载播放模式中必须等待整个文件下载完毕后才能开始播放不同,渐进下载客户端在开始播放之前仅需等待一段较短的时间用于下载和缓冲该媒体文件最前面的一部分数据,之后便可以一边下载一边播放。在正式开始播放之前的这一小段缓冲应使得后续即使在网络较为拥塞的</div>
                    </li>
                    <li><a href="/article/1832841469266849792.htm"
                           title="MediaStream 的媒体流对象 (stream) 和流媒体轨道 (track) 详解" target="_blank">MediaStream 的媒体流对象 (stream) 和流媒体轨道 (track) 详解</a>
                        <span class="text-muted">Wu Youlu</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>navigator.mediaDevices.getUserMedia和MediaStream是实时音视频处理的重要API。通过这些API,可以从摄像头、麦克风或其他设备捕获音视频流,应用于视频通话、录制等场景。本文将介绍navigator.mediaDevices.getUserMedia的参数配置、MediaStream的传参、属性和方法,配合详细的代码示例,特别是如何动态添加和移除音视频轨道</div>
                    </li>
                    <li><a href="/article/1832274655365394432.htm"
                           title="Kafka,构建TB级异步消息系统" target="_blank">Kafka,构建TB级异步消息系统</a>
                        <span class="text-muted">Fern977</span>
<a class="tag" taget="_blank" href="/search/%E7%89%9B%E5%AE%A2%E8%AE%BA%E5%9D%9B%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">牛客论坛学习笔记</a><a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>1.阻塞队列BlockingQueue解决线程通信的问题阻塞方法:put、take。生产者消费者模式生产者:产生数据的线程消费者:使用数据的线程实现类ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueue、SynchronousQueue、DelayQueue等2.Kafka入门Kafka简介Kafka是一个分布式的流媒体平台应用:消息</div>
                    </li>
                    <li><a href="/article/1832270625805266944.htm"
                           title="仿论坛项目--Kafka,构建TB级异步消息系统" target="_blank">仿论坛项目--Kafka,构建TB级异步消息系统</a>
                        <span class="text-muted">HUT_Tyne265</span>
<a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                        <div>阻塞队列•BlockingQueue解决线程通信的问题。阻塞方法:put、take。•生产者消费者模式生产者:产生数据的线程。消费者:使用数据的线程。•实现类ArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueue、SynchronousQueue、DelayQueue等。Kafka入门•Kafka简介Kafka是一个分布式的流媒体平台。</div>
                    </li>
                    <li><a href="/article/1832179346341720064.htm"
                           title="25万人,30个亿,割韭菜,割到了体育界" target="_blank">25万人,30个亿,割韭菜,割到了体育界</a>
                        <span class="text-muted">黑熊爱折腾</span>

                        <div>黑熊/文0125万人被骗30个亿。其实在今年整个投资市场来说,并不是什么特别大的案子。30亿的涉案资金,在今年的网贷爆雷事件中,已经没有什么新闻价值了。恐怕只有上百亿的涉案资金量,主流媒体才会提起一点点的兴趣吧。不过,今天,我之所以想写一篇,关于25万人被骗30个亿的文章。原因就在于,这次,这25万被割韭菜的人,竟全都是体育界的人,而我自己,差点就变成了众多受害者之一。02之前一直关注我的朋友知道</div>
                    </li>
                    <li><a href="/article/1831387171211276288.htm"
                           title="推荐书籍:FFmpeg从入门到精通" target="_blank">推荐书籍: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>
                        <div>本书是一本介绍FFmpeg的实战技术指南,全书共10章,分为两个部分。第一部分部分(第1~7章)为FFmpeg的命令行使用篇,介绍了FFmpeg的基础组成部分、FFmpeg工具使用、FFmpeg的封装操作、FFmpeg的转码操作、FFmpeg的流媒体操作、FFmpeg的滤镜操作、FFmpeg的设备操作。第二部分(第8~10章)为FFmpeg的API使用篇,介绍了FFmpeg封装部分的API使用操作</div>
                    </li>
                    <li><a href="/article/1831167474188513280.htm"
                           title="Qt/C++ 音视频开发 - FFmpeg保存裸流" target="_blank">Qt/C++ 音视频开发 - FFmpeg保存裸流</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++音视频开发-FFmpeg保存裸流介绍FFmpeg是一个开源的多媒体框架,能够处理音频、视频及其他多媒体文件和流。裸流指的是未经封装处理的原始音视频数据。使用FFmpeg保存裸流,可以通过高效的方式处理并存储音视频数据。应用使用场景实时流媒体传输:在没有时间进行复杂封装的情况下,将音视频数据直接传输。低延迟应用:减少因为封装产生的冗余数据和延迟。数据分析:对原始音视频数据进行深入分析时,</div>
                    </li>
                    <li><a href="/article/1830758685303992320.htm"
                           title="只需四步轻松教你绕过校园WiFi认证上网!" target="_blank">只需四步轻松教你绕过校园WiFi认证上网!</a>
                        <span class="text-muted">2401_85752865</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1/1.htm">微信</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a>
                        <div>仅适用于安卓/鸿蒙/澎湃系统/win电脑!打开软件注册账号,使用WiFi连接到校园网,不验证,返回软件,点击连接即可WiFi助手是一款专为学生设计的高效软件,旨在提升网络连接的速度与稳定性,减少延迟,从而优化日常的在线活动体验。不论是在线游戏、流媒体观影还是软件下载,它都能为你提供便利。这款软件的一大亮点是它能够简化复杂的校园网登录过程,为用户创造一个无障碍的上网环境。传统的校园网验证往往复杂且耗</div>
                    </li>
                    <li><a href="/article/1830502580850094080.htm"
                           title="SRS:流媒体服务器如何实现负载均衡" target="_blank">SRS:流媒体服务器如何实现负载均衡</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/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</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%86%E9%A2%91%E7%BC%96%E8%A7%A3%E7%A0%81/1.htm">视频编解码</a>
                        <div>当我们的业务超过单台流媒体服务器的承受能力,就会遇到负载均衡问题,一般我们会在集群中提供这种能力,但实际上集群并非是唯一的实现方式。有时候负载均衡还会和服务发现等时髦词汇联系起来,而云服务的LoadBalancer无疑不可回避,因此,这个问题其实相当复杂,以至于大家会在多个场合询问这个问题,我打算系统地阐述这个问题。如果你已经知道了以下问题的所有答案,并且深刻了解背后的原因,那么你可以不用看这篇文</div>
                    </li>
                    <li><a href="/article/1830478002589364224.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/%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/1.htm">源码解析</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><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/%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/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/1.htm">图像处理</a>
                        <div>引言当我们欣赏一部电影、观看一段视频或者享受一首音乐时,很少有人会停下来思考这一切是如何呈现在我们眼前的。然而,在每一帧的画面、每一秒的声音背后,有着一个不可思议的技术世界这个充满音视频的世界的核心之一,就是FFmpeg。FFmpeg是一个强大而复杂的多媒体处理工具,它为视频和音频编解码、流媒体传输、格式转换等提供了优秀的解决方案。在这个系列博客中,我们将深入探讨FFmpeg源码,解析它的工作原理</div>
                    </li>
                    <li><a href="/article/1830115233121792000.htm"
                           title="pcma和pcmu pcm编码_GitHub - mackenbaron/EasyAACEncoder: 简单、高效、稳定的开源音频编码库,支持将各种音频数据(G.711A/PCMA、G.711U/P..." target="_blank">pcma和pcmu pcm编码_GitHub - mackenbaron/EasyAACEncoder: 简单、高效、稳定的开源音频编码库,支持将各种音频数据(G.711A/PCMA、G.711U/P...</a>
                        <span class="text-muted">CLOUDU</span>
<a class="tag" taget="_blank" href="/search/pcma%E5%92%8Cpcmu/1.htm">pcma和pcmu</a><a class="tag" taget="_blank" href="/search/pcm%E7%BC%96%E7%A0%81/1.htm">pcm编码</a>
                        <div>EasyAACEncoderEasyAACEncoder是EasyDarwin开源流媒体服务团队整理、开发的一款音频转码到AAC的工具库,目前支持G711a/G711u/G726/PCM等音频格式的转码,跨平台,支持Windows/Linux/arm.调用示例testEasyAACEncoder:通过EasyAACEncoderAPI对G711A/G711U/G726进行AAC转码;Windows</div>
                    </li>
                    <li><a href="/article/1829912547961171968.htm"
                           title="浏览器播放h.265 rtsp流媒体解决方案" target="_blank">浏览器播放h.265 rtsp流媒体解决方案</a>
                        <span class="text-muted">LiveWeb视频管理平台</span>
<a class="tag" taget="_blank" href="/search/h.265/1.htm">h.265</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</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/web%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">web播放器</a><a class="tag" taget="_blank" href="/search/h.266/1.htm">h.266</a>
                        <div>近期研究在VUE中播放RTSP实时视频,客户要求延迟低于300毫秒,并且要求支持多路同时播放,支持H.265格式视频,比较了下目前市场上常见的几种方案,以供大家参考!一、海康威视官方WEB解决方案:海康威视官方提供了两种WEB解决方案,即无插件方案和有插件方案。1.无插件方案,实际采用的是服务器转码推流的方式,因为需要转码两次,导致延迟比较高,多路播放或者播放高清视频容易卡顿或者花屏,无法满足客户</div>
                    </li>
                    <li><a href="/article/1829502218257133568.htm"
                           title="前端播放RTSP视频流,使用FLV请求RTSP视频流播放(Vue项目,在Vue中使用插件flv.js请求RTSP视频流播放)" target="_blank">前端播放RTSP视频流,使用FLV请求RTSP视频流播放(Vue项目,在Vue中使用插件flv.js请求RTSP视频流播放)</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/VueJS/1.htm">VueJS</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a>
                        <div>简述:在浏览器中请求RTSP视频流并进行播放时,直接使用原生的浏览器API是行不通的,因为它们不支持RTSP协议。为了解决这个问题,开发者通常会选择使用像flv.js这样的库,它专为在浏览器中播放FLV和其他流媒体格式设计。然而,flv.js本身并不直接支持RTSP,这意味着我们需要一个额外的步骤来桥接RTSP和flv.js。这里来记录一下详细介绍:在Vue中使用flv.js插件播放RTSP视频流</div>
                    </li>
                    <li><a href="/article/1829258173807161344.htm"
                           title="go srs 流媒体服务器_Go语言实现的流媒体服务器开发框架" target="_blank">go srs 流媒体服务器_Go语言实现的流媒体服务器开发框架</a>
                        <span class="text-muted">西风吹浮华</span>
<a class="tag" taget="_blank" href="/search/go/1.htm">go</a><a class="tag" taget="_blank" href="/search/srs/1.htm">srs</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>
                        <div>Monibucamonibuca.com背景市面上的流媒体服务器不可谓不多,从本人的第一份工作起,就一直接触和研究了形形色色的流媒体服务器,从最早的FCS(全称FlashCommunicationServer),后来改名为FMS(全称FlashMediaServer),到Red5(java语言开发),到CrtmpServer(C++开发),让我对流媒体服务器的基本原理有了深刻的认识。当时本人痴迷C</div>
                    </li>
                    <li><a href="/article/1829254516969664512.htm"
                           title="强大的Monibuca RTMP插件:实时流媒体处理的新星" target="_blank">强大的Monibuca RTMP插件:实时流媒体处理的新星</a>
                        <span class="text-muted">颜殉瑶Nydia</span>

                        <div>强大的MonibucaRTMP插件:实时流媒体处理的新星在现代数字时代,实时流媒体已经成为各种在线活动的核心部分,从在线会议、直播游戏到远程教育等不胜枚举。Monibuca是一个轻量级、高效的开源实时通信系统,而它的RTMP插件更是为实时流媒体传输添加了强大的翅膀。本文将深入探讨这个项目的背景、技术特性以及其应用场景,以期吸引更多开发者和使用者。MonibucaRTMP插件是什么?Monibuca</div>
                    </li>
                    <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/1828715058197262336.htm"
                           title="【GB28181】 SDP 报文内容(UDP、TCP主动、TCP被动)" target="_blank">【GB28181】 SDP 报文内容(UDP、TCP主动、TCP被动)</a>
                        <span class="text-muted">废人一枚</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/GB28181/1.htm">GB28181</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/GB28181/1.htm">GB28181</a><a class="tag" taget="_blank" href="/search/SDP/1.htm">SDP</a>
                        <div>GB28181SDP报文UDP预览回放下载TCP主动预览回放下载TCP被动预览回放下载根据《GB/T28181—2016》4.3.1、5.2的要求,SIP和流媒体都应该支持TCP和UDP两种方式以下是抓取GB28181分别在视频预览、回放和下载时交互的SDP信息。UDP预览v=0o=3402000000132000001100INIP4192.168.10.128s=Playc=INIP4192.</div>
                    </li>
                    <li><a href="/article/1828387074319937536.htm"
                           title="《Java核心技术:卷I 基础知识》第1章 Java 程序设计概述 阅读与重点标记" target="_blank">《Java核心技术:卷I 基础知识》第1章 Java 程序设计概述 阅读与重点标记</a>
                        <span class="text-muted">EdwardPan1999</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>第1章Java程序设计概述1996年Java第一次发布就引起了人们的极大兴趣。关注Java的人士不仅限于计算机出版界,还有诸如《纽约时报》《华盛顿邮报》《商业周刊》这样的主流媒体。Java是第一种也是唯一一种在NationalPublicRadio(全国公共广播电视台)上占用了10分钟时间来进行介绍的程序设计语言,并且还得到了$100000000的风险投资基金。这些基金全部用来支持用这种特别的计算</div>
                    </li>
                    <li><a href="/article/1828127473569722368.htm"
                           title="Centos安装netcat" target="_blank">Centos安装netcat</a>
                        <span class="text-muted">羋学僧</span>

                        <div>Centos安装netcatnetcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚本中以多种方式使用它。使用netcat命令所能完成的事情令人惊讶。netcat所做的就是在两台电脑之间建立链接并返回两个数据流,在这之后所能做的事就看你的想像力了。你能建立一个服务器,传输文件,与朋友聊天,传输流媒体或者用它作为其它协议的独立客户端。安装下载</div>
                    </li>
                    <li><a href="/article/1827934744805994496.htm"
                           title="破解青少年心理健康难题亟需整体社会性方案2023-05-10" target="_blank">破解青少年心理健康难题亟需整体社会性方案2023-05-10</a>
                        <span class="text-muted">清语宛如</span>

                        <div>破解青少年心理健康难题亟需整体社会性方案原创本刊编辑部人民教育2023-05-0914:56发表于北京人民教育《人民教育》杂志官方订阅号。《人民教育》是教育部主管、中国教育报刊社主办的全国性教育主流媒体,拥有73年历史。定位“思想高地、行动智库”,宣传解读党和国家教育方针政策,引导社会教育观念,提供专业解决方案,推动教育现代化。2041篇原创内容公众号心理健康与人的生活质量、智力水平,以及幸福和美</div>
                    </li>
                    <li><a href="/article/1827622928594857984.htm"
                           title="RK3588——网口实时传输视频" target="_blank">RK3588——网口实时传输视频</a>
                        <span class="text-muted">张飞飞飞飞飞</span>
<a class="tag" taget="_blank" href="/search/RK3588/1.htm">RK3588</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a>
                        <div>由于通过流媒体服务器传输画面延迟太高的问题,不知道是没有调试到合适的参数还是其他什么问题。诞生了这篇博客。RK3588板端上接摄像头,采集画面,通过网口实时传输给上位机并显示。第一代版本RK3588代码importcv2importsocketimportstruct#配置SERVER_IP='192.168.137.1'#上位机的IP地址PORT=5000#端口号#创建一个socket对象cli</div>
                    </li>
                    <li><a href="/article/1826958660929155072.htm"
                           title="ffmpeg.exe命令行参数的简单介绍" target="_blank">ffmpeg.exe命令行参数的简单介绍</a>
                        <span class="text-muted">香菇滑稽之谈</span>
<a class="tag" taget="_blank" href="/search/FFmpeg%E5%91%BD%E4%BB%A4%E8%A1%8C/1.htm">FFmpeg命令行</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/ffmpeg%E5%91%BD%E4%BB%A4%E8%A1%8C/1.htm">ffmpeg命令行</a><a class="tag" taget="_blank" href="/search/ffmpeg%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">ffmpeg音视频</a><a class="tag" taget="_blank" href="/search/ffmpeg.exe/1.htm">ffmpeg.exe</a>
                        <div>关于ffmpeg.exeffmpeg.exe是一个开源的多媒体处理工具,广泛应用于音视频的录制、转换、流媒体处理等领域。它由FFmpeg项目开发,支持多种音视频格式,并提供了丰富的命令行选项,使其功能强大且灵活。功能应用格式转换:支持几乎所有常见的音视频格式之间的转换。视频录制:可以从摄像头或屏幕录制视频。音频提取:可以从视频文件中提取音频,并保存为单独的音频文件。视频剪辑:可以对视频进行剪辑,截</div>
                    </li>
                    <li><a href="/article/1826356800404942848.htm"
                           title="利用命令行从youtube下载影片,并用huggingface的大语言模型翻译成中文" target="_blank">利用命令行从youtube下载影片,并用huggingface的大语言模型翻译成中文</a>
                        <span class="text-muted">SteveMiller</span>
<a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/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/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a>
                        <div>今天,从网络流媒体上下载字幕,并把它翻译成各种语言是一个非常常规的操作。我创建了一个工作流程。可以根着这个工作流程,从网上先下载影片,然后转出字幕,最后再做翻译。https://github.com/victorspaceRMW/download-Youtube-with-yt-dlp-and-translate-with-HuggingFace-s-whisper-model/tree/main</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/1766425416253399040.htm"
                           title="2020-06-05《学习究竟是什么》学习总结清单5" target="_blank">2020-06-05《学习究竟是什么》学习总结清单5</a>
                        <span class="text-muted">魔域之晶</span>

                        <div>你不是在找答案,而是在做研究。通过各种方式获取信息,然后以我为主,做出自己的判断,这是做研究。三种找书方法:看推荐,看主流媒体的书评,追作者。思维导图不是整理和记忆工具,而是思考工具。思维导图更高级的用法是决策和判断。借助智能化记录和储存信息,大脑用来思考。强力研读笔记法第一,清晰表现每一章的逻辑脉络;第二,带走书中所有的亮点;第三,大量自己的看法和心得;第四,发现这本书和以前读过的其他书或文章的</div>
                    </li>
                                <li><a href="/article/116.htm"
                                       title="ViewController添加button按钮解析。(翻译)" target="_blank">ViewController添加button按钮解析。(翻译)</a>
                                    <span class="text-muted">张亚雄</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a>
                                    <div><div class="it610-blog-content-contain" style="font-size: 14px"></div>//  ViewController.m 
//  Reservation software 
// 
//  Created by 张亚雄 on 15/6/2. 
</div>
                                </li>
                                <li><a href="/article/243.htm"
                                       title="mongoDB 简单的增删改查" target="_blank">mongoDB 简单的增删改查</a>
                                    <span class="text-muted">开窍的石头</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                    <div>   在上一篇文章中我们已经讲了mongodb怎么安装和数据库/表的创建。在这里我们讲mongoDB的数据库操作 
      在mongo中对于不存在的表当你用db.表名 他会自动统计 
下边用到的user是表明,db代表的是数据库 
 
      添加(insert): 
</div>
                                </li>
                                <li><a href="/article/370.htm"
                                       title="log4j配置" target="_blank">log4j配置</a>
                                    <span class="text-muted">0624chenhong</span>
<a class="tag" taget="_blank" href="/search/log4j/1.htm">log4j</a>
                                    <div>1) 新建java项目 
2) 导入jar包,项目右击,properties—java build path—libraries—Add External jar,加入log4j.jar包。 
3) 新建一个类com.hand.Log4jTest 
 

package com.hand;

import org.apache.log4j.Logger;


public class </div>
                                </li>
                                <li><a href="/article/497.htm"
                                       title="多点触摸(图片缩放为例)" target="_blank">多点触摸(图片缩放为例)</a>
                                    <span class="text-muted">不懂事的小屁孩</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%82%B9%E8%A7%A6%E6%91%B8/1.htm">多点触摸</a>
                                    <div>多点触摸的事件跟单点是大同小异的,上个图片缩放的代码,供大家参考一下 
 


import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener</div>
                                </li>
                                <li><a href="/article/624.htm"
                                       title="有关浏览器窗口宽度高度几个值的解析" target="_blank">有关浏览器窗口宽度高度几个值的解析</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/html/1.htm">html</a>
                                    <div>1 元素的 offsetWidth 包括border padding  content  整体的宽度。 
clientWidth  只包括内容区 padding 不包括border。 
clientLeft =  offsetWidth -clientWidth  即这个元素border的值 
offsetLeft  若无已定位的包裹元素</div>
                                </li>
                                <li><a href="/article/751.htm"
                                       title="数据库产品巡礼:IBM DB2概览" target="_blank">数据库产品巡礼:IBM DB2概览</a>
                                    <span class="text-muted">蓝儿唯美</span>
<a class="tag" taget="_blank" href="/search/db2/1.htm">db2</a>
                                    <div>IBM DB2是一个支持了NoSQL功能的关系数据库管理系统,其包含了对XML,图像存储和Java脚本对象表示(JSON)的支持。DB2可被各种类型的企 业使用,它提供了一个数据平台,同时支持事务和分析操作,通过提供持续的数据流来保持事务工作流和分析操作的高效性。 DB2支持的操作系统 
DB2可应用于以下三个主要的平台: 
  
 
 工作站,DB2可在Linus、Unix、Windo</div>
                                </li>
                                <li><a href="/article/878.htm"
                                       title="java笔记5" target="_blank">java笔记5</a>
                                    <span class="text-muted">a-john</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>控制执行流程: 
1,true和false 
   利用条件表达式的真或假来决定执行路径。例:(a==b)。它利用条件操作符“==”来判断a值是否等于b值,返回true或false。java不允许我们将一个数字作为布尔值使用,虽然这在C和C++里是允许的。如果想在布尔测试中使用一个非布尔值,那么首先必须用一个条件表达式将其转化成布尔值,例如if(a!=0)。 
2,if-els</div>
                                </li>
                                <li><a href="/article/1005.htm"
                                       title="Web开发常用手册汇总" target="_blank">Web开发常用手册汇总</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>一门技术,如果没有好的参考手册指导,很难普及大众。这其实就是为什么很多技术,非常好,却得不到普遍运用的原因。
 正如我们学习一门技术,过程大概是这个样子:
 ①我们日常工作中,遇到了问题,困难。寻找解决方案,即寻找新的技术;
 ②为什么要学习这门技术?这门技术是不是很好的解决了我们遇到的难题,困惑。这个问题,非常重要,我们不是为了学习技术而学习技术,而是为了更好的处理我们遇到的问题,才需要学习新的</div>
                                </li>
                                <li><a href="/article/1132.htm"
                                       title="今天帮助人解决的一个sql问题" target="_blank">今天帮助人解决的一个sql问题</a>
                                    <span class="text-muted">asialee</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a>
                                    <div>            今天有个人问了一个问题,如下: 
type     AD      value           
A  </div>
                                </li>
                                <li><a href="/article/1259.htm"
                                       title="意图对象传递数据" target="_blank">意图对象传递数据</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/%E6%84%8F%E5%9B%BEIntent/1.htm">意图Intent</a><a class="tag" taget="_blank" href="/search/Bundle%E5%AF%B9%E8%B1%A1%E6%95%B0%E6%8D%AE%E7%9A%84%E4%BC%A0%E9%80%92/1.htm">Bundle对象数据的传递</a>
                                    <div>学习意图将数据传递给目标活动; 初学者需要好好研究的 
   
   1,将下面的代码添加到main.xml中 
   
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http:/</div>
                                </li>
                                <li><a href="/article/1386.htm"
                                       title="oracle查询锁表解锁语句" target="_blank">oracle查询锁表解锁语句</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/object/1.htm">object</a><a class="tag" taget="_blank" href="/search/session/1.htm">session</a><a class="tag" taget="_blank" href="/search/kill/1.htm">kill</a>
                                    <div>一.查询锁定的表 
如下语句,都可以查询锁定的表 
语句一: 
select a.sid,
       a.serial#,
       p.spid,
       c.object_name,
       b.session_id,
       b.oracle_username,
       b.os_user_name
  from v$process p, v$s</div>
                                </li>
                                <li><a href="/article/1513.htm"
                                       title="mac osx 10.10 下安装 mysql 5.6 二进制文件[tar.gz]" target="_blank">mac osx 10.10 下安装 mysql 5.6 二进制文件[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/osx/1.htm">osx</a>
                                    <div>场景:在 mac osx 10.10 下安装 mysql 5.6 的二进制文件。 
 
环境:mac osx 10.10、mysql 5.6 的二进制文件 
 
步骤:[所有目录请从根“/”目录开始取,以免层级弄错导致找不到目录] 
1、下载 mysql 5.6 的二进制文件,下载目录下面称之为 mysql5.6SourceDir; 
下载地址:http://dev.mysql.com/downl</div>
                                </li>
                                <li><a href="/article/1640.htm"
                                       title="分布式系统与框架" target="_blank">分布式系统与框架</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                                    <div>RPC框架 Dubbo 
什么是Dubbo 
  
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包含:    远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。    集群容错: 提供基于接</div>
                                </li>
                                <li><a href="/article/1767.htm"
                                       title="那些令人蛋痛的专业术语" target="_blank">那些令人蛋痛的专业术语</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/SSO/1.htm">SSO</a><a class="tag" taget="_blank" href="/search/IOC/1.htm">IOC</a>
                                    <div> 
 spring 
 
【控制反转(IOC)/依赖注入(DI)】: 
由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。 
简单的说:对象的创建又容器(比如spring容器)来执行,程序里不直接new对象。 
 
 Web 
 
【单点登录(SSO)】:SSO的定义是在多个应用系统中,用户</div>
                                </li>
                                <li><a href="/article/1894.htm"
                                       title="《给大忙人看的java8》摘抄" target="_blank">《给大忙人看的java8》摘抄</a>
                                    <span class="text-muted">braveCS</span>
<a class="tag" taget="_blank" href="/search/java8/1.htm">java8</a>
                                    <div>函数式接口:只包含一个抽象方法的接口 
lambda表达式:是一段可以传递的代码 
  
  
  
你最好将一个lambda表达式想象成一个函数,而不是一个对象,并记住它可以被转换为一个函数式接口。 
事实上,函数式接口的转换是你在Java中使用lambda表达式能做的唯一一件事。 
  
方法引用:又是要传递给其他代码的操作已经有实现的方法了,这时可以使</div>
                                </li>
                                <li><a href="/article/2021.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/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a>
                                    <div>

public class StringDistance {

	/**
	 * 编程之美 计算字符串的相似度
	 * 我们定义一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:
	 * 1.修改一个字符(如把“a”替换为“b”);
	 * 2.增加一个字符(如把“abdd”变为“aebdd”);
	 * 3.删除一个字符(如把“travelling”变为“trav</div>
                                </li>
                                <li><a href="/article/2148.htm"
                                       title="上传、下载压缩图片" target="_blank">上传、下载压缩图片</a>
                                    <span class="text-muted">chengxuyuancsdn</span>
<a class="tag" taget="_blank" href="/search/%E4%B8%8B%E8%BD%BD/1.htm">下载</a>
                                    <div>/**
	 * 
	 * @param uploadImage --本地路径(tomacat路径)
	 * @param serverDir   --服务器路径
	 * @param imageType   --文件或图片类型
	 * 此方法可以上传文件或图片.txt,.jpg,.gif等
	 */
	public void upload(String uploadImage,Str</div>
                                </li>
                                <li><a href="/article/2275.htm"
                                       title="bellman-ford(贝尔曼-福特)算法" target="_blank">bellman-ford(贝尔曼-福特)算法</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/F%23/1.htm">F#</a>
                                    <div>Bellman-Ford算法(根据发明者 Richard Bellman 和 Lester Ford 命名)是求解单源最短路径问题的一种算法。单源点的最短路径问题是指:给定一个加权有向图G和源点s,对于图G中的任意一点v,求从s到v的最短路径。有时候这种算法也被称为 Moore-Bellman-Ford 算法,因为 Edward F. Moore zu 也为这个算法的发展做出了贡献。 
 
与迪科</div>
                                </li>
                                <li><a href="/article/2402.htm"
                                       title="oracle ASM中ASM_POWER_LIMIT参数" target="_blank">oracle ASM中ASM_POWER_LIMIT参数</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/ASM/1.htm">ASM</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/ASM_POWER_LIMIT/1.htm">ASM_POWER_LIMIT</a><a class="tag" taget="_blank" href="/search/%E7%A3%81%E7%9B%98%E5%B9%B3%E8%A1%A1/1.htm">磁盘平衡</a>
                                    <div>ASM_POWER_LIMIT 
该初始化参数用于指定ASM例程平衡磁盘所用的最大权值,其数值范围为0~11,默认值为1。该初始化参数是动态参数,可以使用ALTER  SESSION或ALTER  SYSTEM命令进行修改。示例如下: 
 
SQL>ALTER  SESSION  SET   Asm_power_limit=2; 
</div>
                                </li>
                                <li><a href="/article/2529.htm"
                                       title="高级排序:快速排序" target="_blank">高级排序:快速排序</a>
                                    <span class="text-muted">dieslrae</span>
<a class="tag" taget="_blank" href="/search/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F/1.htm">快速排序</a>
                                    <div>
    public void quickSort(int[] array){
        this.quickSort(array, 0, array.length - 1);
    }
    
    public void quickSort(int[] array,int left,int right){
        if(right - left <= 0</div>
                                </li>
                                <li><a href="/article/2656.htm"
                                       title="C语言学习六指针_何谓变量的地址 一个指针变量到底占几个字节" target="_blank">C语言学习六指针_何谓变量的地址 一个指针变量到底占几个字节</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a>
                                    <div># include <stdio.h>

int main(void)
{
	/*
	1、一个变量的地址只用第一个字节表示
	2、虽然他只使用了第一个字节表示,但是他本身指针变量类型就可以确定出他指向的指针变量占几个字节了
	3、他都只存了第一个字节地址,为什么只需要存一个字节的地址,却占了4个字节,虽然只有一个字节,
		但是这些字节比较多,所以编号就比较大,
		</div>
                                </li>
                                <li><a href="/article/2783.htm"
                                       title="phpize使用方法" target="_blank">phpize使用方法</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,下面介绍一个它的使用方法,需要的朋友可以参考下 
安装(fastcgi模式)的时候,常常有这样一句命令: 
代码如下: 
/usr/local/webserver/php/bin/phpize 
  
一、phpize是干嘛的? 
phpize是什么? 
phpize是用来扩展php扩展模块的,通过phpi</div>
                                </li>
                                <li><a href="/article/2910.htm"
                                       title="Java虚拟机学习 - 对象引用强度" target="_blank">Java虚拟机学习 - 对象引用强度</a>
                                    <span class="text-muted">shuizhaosi888</span>
<a class="tag" taget="_blank" href="/search/JAVA%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">JAVA虚拟机</a>
                                    <div> 
 本文原文链接:http://blog.csdn.net/java2000_wl/article/details/8090276 转载请注明出处! 
 无论是通过计数算法判断对象的引用数量,还是通过根搜索算法判断对象引用链是否可达,判定对象是否存活都与“引用”相关。 
 引用主要分为 :强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Wea</div>
                                </li>
                                <li><a href="/article/3037.htm"
                                       title=".NET Framework 3.5 Service Pack 1(完整软件包)下载地址" target="_blank">.NET Framework 3.5 Service Pack 1(完整软件包)下载地址</a>
                                    <span class="text-muted">happyqing</span>
<a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/%E4%B8%8B%E8%BD%BD/1.htm">下载</a><a class="tag" taget="_blank" href="/search/framework/1.htm">framework</a>
                                    <div>  
Microsoft .NET Framework 3.5 Service Pack 1(完整软件包)  
http://www.microsoft.com/zh-cn/download/details.aspx?id=25150 
Microsoft .NET Framework 3.5 Service Pack 1 是一个累积更新,包含很多基于 .NET Framewo</div>
                                </li>
                                <li><a href="/article/3164.htm"
                                       title="JAVA定时器的使用" target="_blank">JAVA定时器的使用</a>
                                    <span class="text-muted">jingjing0907</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E6%97%B6%E5%99%A8/1.htm">定时器</a>
                                    <div>1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 
对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。 
privatejava.util.Timer timer; 
timer = newTimer(true); 
timer.schedule( 
newjava.util.TimerTask() { public void run() 
</div>
                                </li>
                                <li><a href="/article/3291.htm"
                                       title="Webbench" target="_blank">Webbench</a>
                                    <span class="text-muted">流浪鱼</span>
<a class="tag" taget="_blank" href="/search/webbench/1.htm">webbench</a>
                                    <div>首页下载地址 http://home.tiscali.cz/~cz210552/webbench.html 
Webbench是知名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发。 
Webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webbench的标准测试可以向我们展示服务器的两项内容:每秒钟相</div>
                                </li>
                                <li><a href="/article/3418.htm"
                                       title="第11章 动画效果(中)" target="_blank">第11章 动画效果(中)</a>
                                    <span class="text-muted">onestopweb</span>
<a class="tag" taget="_blank" href="/search/%E5%8A%A8%E7%94%BB/1.htm">动画</a>
                                    <div>index.html 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/</div>
                                </li>
                                <li><a href="/article/3545.htm"
                                       title="windows下制作bat启动脚本." target="_blank">windows下制作bat启动脚本.</a>
                                    <span class="text-muted">sanyecao2314</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a><a class="tag" taget="_blank" href="/search/bat/1.htm">bat</a>
                                    <div>java -classpath C:\dwjj\commons-dbcp.jar;C:\dwjj\commons-pool.jar;C:\dwjj\log4j-1.2.16.jar;C:\dwjj\poi-3.9-20121203.jar;C:\dwjj\sqljdbc4.jar;C:\dwjj\voucherimp.jar com.citsamex.core.startup.MainStart </div>
                                </li>
                                <li><a href="/article/3672.htm"
                                       title="Java进行RSA加解密的例子" target="_blank">Java进行RSA加解密的例子</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>加密是保证数据安全的手段之一。加密是将纯文本数据转换为难以理解的密文;解密是将密文转换回纯文本。     数据的加解密属于密码学的范畴。通常,加密和解密都需要使用一些秘密信息,这些秘密信息叫做密钥,将纯文本转为密文或者转回的时候都要用到这些密钥。     对称加密指的是发送者和接收者共用同一个密钥的加解密方法。     非对称加密(又称公钥加密)指的是需要一个私有密钥一个公开密钥,两个不同的密钥的</div>
                                </li>
                                <li><a href="/article/3799.htm"
                                       title="Android_ViewStub" target="_blank">Android_ViewStub</a>
                                    <span class="text-muted">阿尔萨斯</span>
<a class="tag" taget="_blank" href="/search/ViewStub/1.htm">ViewStub</a>
                                    <div>public final class ViewStub extends View 
 
 
 java.lang.Object 
   
   android.view.View 
     
     android.view.ViewStub 
      
    
 
 类摘要: ViewStub 是一个隐藏的,不占用内存空间的视图对象,它可以在运行时延迟加载布局资源文件。当 ViewSt</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>