FFmpeg入门详解之102:HLS直播协议详解

引言与效果演示

-----------------------------------------

FFmpeg431的官方地址已经无法打开,

我将ffmepg4.3.1的开发包和源码上传到了百度云:

链接:https://pan.baidu.com/s/1-3xSO6ytyQLlSId0Xiak4w 

提取码:fyxy

------------------------------------------

音视频是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学 基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢?

因为没有学习音视频的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。

所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。

切片命令行:

ffmpeg -i ande_302.mp4 -fflags flush_packets -max_delay 2 -flags -global_header -hls_time 5

-hls_list_size 0 -vcodec libx264 -acodec aac -r 30  -g 60 -y index.m3u8

HLS是什么

HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。

是苹果公司QuickTime X和iPhone软件系统的一部分。

它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。

在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8)playlist文件,用于寻找可用的媒体流。HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

在服务器端,流媒体文件被切割成一个一个的小分片,这些小分片有着相同的时长(常用10s),每一个小分片是一个ts文件。同时 产生一个索引文件(m3u8),索引文件里存放了ts文件的URL。

客户端请求方式分两种,一种是点播(vod),一种是直播(live)

Video  on demand:视频点播,有求才播放

vod:客户端一次获取整个m3u8文件,按照里面的URL获取ts文件,采用HTTP协议。

live:由于M3u8文件时实时更新的,所以客户端每隔一段时间获取m3u8文件,再根据里面的URL获取ts文件,采用HTTP协议。

RTMP指Adobe的RTMP(Realtime Message Protocol),广泛应用于低延时直播,也是编码器和服务器对接的实际标准协议,在PC(Flash)上有最佳观看体验和最佳稳定性。

HLS指Apple的HLS(Http Live Streaming),本身就是Live(直播)的,不过Vod(点播)也能支持。

HLS是Apple平台的标准流媒体协议,和RTMP在PC上一样支持得天衣无缝。

FFmpeg入门详解之102:HLS直播协议详解_第1张图片

HLS协议简介

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

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

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

FFmpeg入门详解之102:HLS直播协议详解_第2张图片

HLS总体架构

FFmpeg入门详解之102:HLS直播协议详解_第3张图片

1、 服务器将媒体文件转换为m3u8及ts分片;对于直播源,服务器需要实时动态更新。

2、 客户端请求m3u8文件,根据索引获取ts分片;点播与直播服务器不同的地方是, 直播的 m3u8 文件会不断更新,而点播的 m3u8 文件是不会变的,只需要客户端在开始时请求一次即可。

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

交互方式如下:

HLS优势及劣势

优势:

客户端支持简单,只需要支持 HTTP 请求即可,HTTP 协议无状态,只需要按顺序下载媒体片段即可。

使用 HTTP 协议网络兼容性好,HTTP 数据包也可以方便地通过防火墙或者代理服务器。

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

劣势:

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

FFmpeg入门详解之102:HLS直播协议详解_第4张图片

HLS主要的应用场景

跨平台:PC主要的直播方案是RTMP,也有一些库能播放HLS,譬如jwplayer,基于osmf的hls插件也一大堆。所以实际上如果选一种协议能跨 PC/Android/IOS,那就是HLS。

IOS上苛刻的稳定性要求:IOS上最稳定的当然是HLS,稳定性不差于RTMP在PC-flash上的表现。

友好的CDN分发方式:目前CDN对于RTMP也是基本协议,但是HLS分发的基础是HTTP,所以CDN的接入和分发会比RTMP更加完善。能在各种CDN之间切换,RTMP也能,只是可能需要对接测试。

简单:HLS作为流媒体协议非常简单,apple支持得也很完善。Android对HLS的支持也会越来越完善。至于DASH/HDS,好像没有什么特别的理由,就像linux已经大行其道而且开放,其他的系统很难再广泛应用。

总之,SRS支持HLS主要是作为输出的分发协议,直播以RTMP+HLS分发,满总各种应用场景。点播以HLS为主。

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=700,000

http://xxx.itv.cmvideo.cn/low.m3u8?channel-id=bstvod&Contentid=4007432528

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1300,000

http://xxx.itv.cmvideo.cn/mid.m3u8?channel-id=bstvod&Contentid=4007432527

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2300,000

http://xxx.itv.cmvideo.cn/high.m3u8?channel-id=bstvod&Contentid=4007432526

二级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?

tag说明

名词说明:

1、 Media Playlist:二级m3u8,携带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。

HLS协议详解

HLS是提供一个m3u8地址:

Apple的Safari浏览器直接就能打开m3u8地址,譬如:

http://demo.srs.com/live/livestream.m3u8

Android不能直接打开,需要使用html5的video标签,然后在浏览器中打开这个页面即可,譬如:

        autoplay controls autobuffer 

        src="http://demo.srs.com/live/livestream.m3u8"

        type="application/vnd.apple.mpegurl">

PC:video.js

HLS协议规定

视频的封装格式是TS。

视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3。

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

HLS协议说明

HLS的m3u8,是一个ts的列表,也就是告诉客户端或浏览器可以播放这些ts文件,譬如:

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-ALLOW-CACHE:YES

#EXT-X-TARGETDURATION:13

#EXT-X-MEDIA-SEQUENCE:430

#EXT-X-PLAYLIST-TYPE:VOD

#EXTINF:11.800

news-430.ts

#EXTINF:10.120

news-431.ts

#EXT-X-DISCONTINUITY

#EXTINF:11.952

news-430.ts

#EXTINF:12.640

news-431.ts

#EXTINF:11.160

news-432.ts

#EXT-X-DISCONTINUITY

#EXTINF:11.751

news-430.ts

#EXTINF:2.040

news-431.ts

#EXT-X-ENDLIST

EXTM3U

每个M3U文件第一行必须是这个tag,提供标示作用

EXT-X-VERSION

用以标示协议版本。这里是3, 那么这里用的就是HLS协议第三个版本,此标签只能有0或1个,不写代表使用版本1

EXT-X-TARGETDURATION

所有切片的最大时长,有些Apple设备这个参数不正确会无法播放。

EXT-X-MEDIA-SEQUENCE

切片的开始序号。每一个切片都有唯一的序号,相邻之间序号+1。这个编号会继续增长,保证流的连续性。

EXTINF

ts 切片的实际时长。duration : 媒体持续时间

#EXTINF ,</p> <p></p> <p>EXT-X-PLAYLIST-TYPE</p> <p>类型,vod 表示点播 ,live:直播。</p> <p></p> <p>EXT-X-ENDLIST</p> <p>文件结束符号。表示不再向播放列表文件添加媒体文件。</p> <p></p> <h3>HLS补充说明</h3> <p>bandwidth指定视频流的比特率,PROGRAM-ID无用无需关注,每一个#EXT-X-STREAM-INF的下一行是二级index文件的路径,可以用相对路径也可以用绝对路径。</p> <p>例子中用的是相对路径。这个文件中记录了不同比特率视频流的二级index文件路径,客户端可以自己判断自己的现行网络带宽,来决定播放哪一个视频流。</p> <p>也可以在网络带宽变化的时候平滑切换到和带宽匹配的视频流。</p> <p></p> <p></p> <p>二级文件实际负责给出ts文件的下载地址,这里同样使用了相对路径。#EXTINF表示每个ts切片视频文件的时长。#EXT-X-TARGETDURATION指定当前视频流中的切片文件的最大时长,也就是说这些ts切片的时长不能大于#EXT-X-TARGETDURATION的值。</p> <p>#EXT-X-PLAYLIST-TYPE:VOD的意思是当前的视频流并不是一个直播流,而是点播流,换句话说就是该视频的全部的ts文件已经被生成好了,#EXT-X-ENDLIST这个表示视频结束,有这个标志同时也说明当前的流是一个非直播流。</p> <p></p> <h3>播放模式</h3> <p>点播VOD的特点就是当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有ts文件的地址。这种模式允许客户端访问全部内容。上面的例子中就是一个点播模式下的m3u8的结构。</p> <p></p> <p>Live 模式就是实时生成M3u8和ts文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载二级index文件,以获得最新生成的ts文件播放视频。如果一个二级index文件的末尾没有#EXT-X-ENDLIST标志,说明它是一个Live视频流。</p> <p></p> <p>客户端在播放VOD模式的视频时其实只需要下载一次一级index文件和二级index文件就可以得到所有ts文件的下载地址,除非客户端进行比特率切换,否则无需再下载任何index文件,只需顺序下载ts文件并播放就可以了。</p> <p>但是Live模式下略有不同,因为播放的同时,新ts文件也在被生成中,所以客户端实际上是下载一次二级index文件,然后下载ts文件,再下载二级index文件(这个时候这个二级index文件已经被重写,记录了新生成的ts文件的下载地址),再下载新ts文件,如此反复进行播放。</p> <p></p> <p></p> <h1>TS文件</h1> <p></p> <p><strong>ts文件为传输流文件(MPEG2 - tranport stream),</strong></p> <p><strong>视频编码主要格式h264/mpeg4,音频为acc/MP3</strong>。</p> <p></p> <p>ts文件分为三层:</p> <p>ts层<strong>Transport Stream、pes层 Packet Elemental Stream、es层 Elementary Stream.</strong> </p> <p>es层就是音视频压缩数据,pes层是在音视频数据es上加了时间戳(pts,dts)等对数据帧的说明信息,ts层就是在pes层加入数据流的识别和传输必须的信息</p> <p>Rtp:real time protocol, rtcp</p> <p></p> <p class="img-center"><a href="http://img.e-com-net.com/image/info8/630dfaa63aed4fabac19d522d61bad95.jpg" target="_blank"><img alt="FFmpeg入门详解之102:HLS直播协议详解_第5张图片" src="http://img.e-com-net.com/image/info8/630dfaa63aed4fabac19d522d61bad95.jpg" width="650" height="411" style="border:1px solid black;"></a></p> <p></p> <p>ts层</p> <p>ts包大小固定为188字节,ts层分为三个部分:ts header、adaptation field、payload。ts header固定4个字节;adaptation field可能存在也可能不存在,主要作用是给不足188字节的数据做填充;payload是pes数据。</p> <p>pes层</p> <p>pes层是在每一个视频/音频帧上加入了时间戳等信息,pes包内容很多,我们只留下最常用的。</p> <p>es层</p> <p>es层指的就是音视频数据,我们只介绍h.264视频。</p> <p>h.264视频:</p> <p>打包h.264数据我们必须给视频数据加上一个nalu(Network Abstraction Layer unit),</p> <p>nalu包括nalu header和nalu type,</p> <p>nalu header固定为0x00000001(帧开始)或0x000001(帧中)。</p> <p>h.264的数据是由slice组成的,slice的内容包括:视频、sps、pps等。</p> <p>nalu type决定了后面的h.264数据内容。</p> <p></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1587768126785728512"></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">你可能感兴趣的:(音视频/流媒体,ffmpeg,流媒体,音视频,hls直播)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1892489889514057728.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><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>系列文章目录嵌入式音视频开发(零)移植ffmpeg及推流测试嵌入式音视频开发(一)ffmpeg框架及内核解析嵌入式音视频开发(二)ffmpeg音视频同步嵌入式音视频开发(三)直播协议及编码器文章目录系列文章目录前言一、音视频同步1.1基础概念1.2三种同步方法二、音视频同步的实现2.1时间基的转换问题2.2音频为基准2.2.1实现思路2.2.2代码大纲2.3外部时钟同步2.3.1实现思路2.3.2</div> </li> <li><a href="/article/1892458219784171520.htm" title="【干货】视频文件抽帧(opencv和ffmpeg方式对比)" target="_blank">【干货】视频文件抽帧(opencv和ffmpeg方式对比)</a> <span class="text-muted">zkFun</span> <a class="tag" taget="_blank" href="/search/%E8%B6%85%E7%A1%AC%E5%B9%B2%E8%B4%A7/1.htm">超硬干货</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>1废话不多说,直接上代码opencv方式importtimeimportsubprocessimportcv2,osfrommathimportceildefextract_frames_opencv(video_path,output_folder,frame_rate=1):"""使用OpenCV从视频中抽取每秒指定帧数的帧,并保存到指定文件夹。如果视频长度不是整数秒,则会在最后一帧时补充空白</div> </li> <li><a href="/article/1892422258589233152.htm" title="智享AI直播三代系统,马斯克旗下AI人工智能直播工具,媲美DeepSeek!" target="_blank">智享AI直播三代系统,马斯克旗下AI人工智能直播工具,媲美DeepSeek!</a> <span class="text-muted">V__17671155793</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>智享AI直播三代系统,马斯克旗下AI人工智能直播工具,媲美DeepSeek!在科技飞速发展的当下,人工智能正以前所未有的态势重塑着各个行业的格局。直播领域,作为信息传播与商业交互的前沿阵地,也在AI技术的赋能下迎来了颠覆性的变革。其中,马斯克旗下的智享AI直播三代系统宛如一颗璀璨的新星,横空出世,以其卓越的性能和创新的理念,迅速在竞争激烈的直播市场中崭露头角,甚至被业界誉为可媲美DeepSeek的</div> </li> <li><a href="/article/1892385570013900800.htm" title="Coze扣子专业版计费规则调整一览" target="_blank">Coze扣子专业版计费规则调整一览</a> <span class="text-muted">落笔画忧愁e</span> <a class="tag" taget="_blank" href="/search/%E6%89%A3%E5%AD%90%E5%95%86%E5%BA%97/1.htm">扣子商店</a><a class="tag" taget="_blank" href="/search/Coze%E6%8F%92%E4%BB%B6/1.htm">Coze插件</a> <div>就在今晚(2025-01-24),扣子更新了专业版的计费规则更新时间:2025年2月中旬主要更新内容:新增扣子资源包,原智能体资源包、大模型资源包下架。专业版用户每日赠送500资源点(仅限当日有效),可抵扣智能体调用费用和模型调用费用语音识别API、语音合成API、实时音视频SDK全面开放,无需申请即可使用更新详解:智能体资源包、大模型资源包下架处理,剩余资源用量使用完毕后,不支持续费。新增扣子资</div> </li> <li><a href="/article/1892381274820112384.htm" title="AI编剧系统深度解析:从算法架构到影视工业化应用实战" target="_blank">AI编剧系统深度解析:从算法架构到影视工业化应用实战</a> <span class="text-muted">Coderabo</span> <a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8/1.htm">R1模型企业级应用</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>媒体娱乐行业革命:AI编剧创意辅助系统架构解析与实战应用一、行业背景与技术架构在流媒体内容需求激增的当下,传统编剧模式面临产能瓶颈。AI编剧创意辅助系统通过自然语言处理(NLP)、生成对抗网络(GAN)和知识图谱技术,构建了包含剧本生成、情节优化、角色塑造等模块的智能创作平台。核心架构分为:知识图谱层:整合影视剧本数据库(IMSDb)、维基百科等结构化数据NLP处理层:基于Transformer的</div> </li> <li><a href="/article/1892314959031889920.htm" title="vue播放m3u8视频" target="_blank">vue播放m3u8视频</a> <span class="text-muted">zmyalh</span> <a class="tag" taget="_blank" href="/search/html%E8%A7%86%E9%A2%91video/1.htm">html视频video</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>这里封装成组件先安装插件npmivue-video-player-S//版本"^5.0.2"npmivideojs-flash-S//播放rtmpnpmivideojs-contrib-hls-S//播放m3u8父页面://传入视频地址videoUrl页面引入importvideosfrom"../../../components/videos/videos.vue";components:{vi</div> </li> <li><a href="/article/1892311807301840896.htm" title="python ffmpeg直播_FFmpeg+Nginx+Rtmp+HLS+Videojs搭建直播网站(理论与实战)" target="_blank">python ffmpeg直播_FFmpeg+Nginx+Rtmp+HLS+Videojs搭建直播网站(理论与实战)</a> <span class="text-muted">weixin_39565300</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ffmpeg%E7%9B%B4%E6%92%AD/1.htm">ffmpeg直播</a> <div>第1章直播原理与架构28分钟2节1-1直播原理与架构直播原理与架构「仅限付费用户」点击下载“直播原理与架构.pdf”[14:53]开始学习1-2甜点:福优学苑--简历包装与面试技巧甜点:福优学苑--简历包装与面试技巧「仅限付费用户」点击下载“福优学苑--简历包装与面试技巧--51other.pdf”[13:36]开始学习第2章亲手搭建FFmpeg+Nginx直播网站1小时48分钟11节2-1直播引</div> </li> <li><a href="/article/1892301695560511488.htm" title="芯麦GC1808立体声ADC芯片解析:高性价比与全集成音频采集方案" target="_blank">芯麦GC1808立体声ADC芯片解析:高性价比与全集成音频采集方案</a> <span class="text-muted">青牛科技-Allen</span> <a class="tag" taget="_blank" href="/search/GLOBALCHIP/1.htm">GLOBALCHIP</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/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><a class="tag" taget="_blank" href="/search/%E6%94%B6%E5%BD%95%E6%9C%BA/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%AE%B6%E7%94%A8%E7%94%B5%E5%99%A8/1.htm">家用电器</a> <div>引言在直播设备、智能语音终端等新兴应用的推动下,高性能音频采集系统的需求持续增长。芯麦半导体推出的GC1808立体声音频模数转换器,凭借其全集成信号链设计和灵活的接口配置,为开发者提供了高性价比的音频前端解决方案。本文将从核心架构、关键技术特性及典型应用场景三个方面,深入解析这款芯片的设计亮点。一、GC1808核心特性概览全集成信号链内置64倍过采样率Δ-Σ调制器集成数字梳状滤波器(CombFil</div> </li> <li><a href="/article/1892300939293945856.htm" title="使用nginx+rtmp+ffmpeg实现桌面直播" target="_blank">使用nginx+rtmp+ffmpeg实现桌面直播</a> <span class="text-muted">handsomestWei</span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/rtmp/1.htm">rtmp</a><a class="tag" taget="_blank" href="/search/live%E7%9B%B4%E6%92%AD/1.htm">live直播</a><a class="tag" taget="_blank" href="/search/%E6%8E%A8%E6%B5%81/1.htm">推流</a><a class="tag" taget="_blank" href="/search/%E6%8B%89%E6%B5%81/1.htm">拉流</a> <div>使用nginx+rtmp+ffmpeg实现桌面直播流媒体服务器搭建dockerrundocker镜像基于添加了rtmp模块的nginx,和ffmpegdockerpullalfg/nginx-rtmpdockerrun-d-p1935:1935-p8080:80--name=nginx-rtmpalfg/nginx-rtmprtmp模块说明进入容器内部查看dockerps|grepalfg/ngi</div> </li> <li><a href="/article/1892193485797257216.htm" title="[总结] 音视频开发工程师之路" target="_blank">[总结] 音视频开发工程师之路</a> <span class="text-muted">二进制怪兽</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>前言音视频开发是一个涉及多个技术领域的复杂方向,涵盖了音频处理、视频渲染、编解码技术、流媒体传输等多个方面。以下是一个简要的学习路线指南,帮助你逐步掌握音视频开发的核心技能。基础知识计算机科学基础:掌握操作系统、计算机网络、数据结构和算法等基础知识。数学基础:了解傅里叶变换、线性代数、信号处理等数学知识,这些是音视频编-解码和处理的基石。编程语言:熟练掌握C/C++,这是音视频开发中最常用的语言;</div> </li> <li><a href="/article/1892191848873652224.htm" title="python获取抖音直播间用户/弹幕/评论/礼物信息(6月份sign最新版)" target="_blank">python获取抖音直播间用户/弹幕/评论/礼物信息(6月份sign最新版)</a> <span class="text-muted">阿福不是狗</span> <a class="tag" taget="_blank" href="/search/Python%E4%BD%BF%E7%94%A8%E6%80%BB%E7%BB%93/1.htm">Python使用总结</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">网络爬虫</a> <div>python获取抖音直播间用户/弹幕/评论/礼物信息(6月份sign最新版)这是一个用Python编写的抖音直播间信息获取工具。该服务的主要功能是获取抖音直播间的实时信息,包括:直播间进场用户:服务能够实时获取进入直播间的用户信息,包括用户ID、用户名等。弹幕信息:服务能够实时接收并解析直播间内的弹幕信息,让用户能够及时了解观众的实时反馈。礼物信息:服务能够实时获取观众送出的礼物信息,包括礼物名称</div> </li> <li><a href="/article/1892182520863191040.htm" title="寻找可接入正版音乐库的音乐API,可了解HIFIVE音乐开放平台!" target="_blank">寻找可接入正版音乐库的音乐API,可了解HIFIVE音乐开放平台!</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/apisdkapi%E6%96%87%E6%A1%A3%E9%9F%B3%E4%B9%90/1.htm">apisdkapi文档音乐</a> <div>HIFIVE音乐开放平台基于HIFIVE数百万正版音乐版权内容,为直播、短视频、工具应用、智能硬件等场景提供音乐解决方案。点击了解:(https://open.haifanwu.com/)HIFIVE音乐开放平台提供以下接入服务:服务服务描述获取音乐列表通过歌单获取音乐列表,通过关键词搜索获取音乐列表,通AI音乐推荐获取音乐列表音乐播放获取音乐试听版本,获取完整音乐文件AI剪辑结合AI推荐技术完成</div> </li> <li><a href="/article/1892154900490547200.htm" title="springboot java ffmpeg 视频压缩、提取视频帧图片、获取视频分辨率" target="_blank">springboot java ffmpeg 视频压缩、提取视频帧图片、获取视频分辨率</a> <span class="text-muted">因我你好久不见</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>用到的maven依赖:lombok依赖就不贴出来了org.bytedecoffmpeg-platform4.3.2-1.5.5org.apache.commonscommons-lang33.12.0cn.hutoolhutool-all5.5.2工具类:importcn.hutool.core.io.IoUtil;importlombok.extern.slf4j.Slf4j;importorg</div> </li> <li><a href="/article/1892139399546728448.htm" title="QT+FFmpeg如何使用GPU加速解码?" target="_blank">QT+FFmpeg如何使用GPU加速解码?</a> <span class="text-muted">bug菌¹</span> <a class="tag" taget="_blank" href="/search/%E5%85%A8%E6%A0%88Bug%E8%B0%83%E4%BC%98%28%E5%AE%9E%E6%88%98%E7%89%88%29/1.htm">全栈Bug调优(实战版)</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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a> <div>本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!全文目录:问题描述解决方案1.确保FFmpeg和CUDA的支持2.正确选择硬件解码器设置硬件解码器3.初始化CUDA硬件设备4.硬件解码流程解码帧并处理硬件帧5.检查FF</div> </li> <li><a href="/article/1892135234854514688.htm" title="ffmpeg音频命令(常用篇)" target="_blank">ffmpeg音频命令(常用篇)</a> <span class="text-muted">晓光尘梦</span> <a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96%E7%9F%A5%E8%AF%86%E7%82%B9%E5%AD%A6%E4%B9%A0/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> <div>写在前面使用ffmpeg的主要原因是工作需要,期间总是会涉及音频的采样率、音量啥的转换,音频的剪切与合成叠加。这是以前在别的平台发布的,整合一下丢在这,方便以后查阅。一、工作时涉及到的音频名词1、声道当人听到声音时,能对声源进行定位,那么通过在不同的位置设置声源,就可以造就出更好的听觉感受。声道越多的话,更能获得身临其境的听音体验,声音的环绕效果也会更加的真实。比如手机的单扬声器就是单声道,有双扬</div> </li> <li><a href="/article/1892125776690606080.htm" title="x86平台基于Qt+opengl优化ffmpeg软解码1080P视频渲染效率" target="_blank">x86平台基于Qt+opengl优化ffmpeg软解码1080P视频渲染效率</a> <span class="text-muted">zanglengyu</span> <a class="tag" taget="_blank" href="/search/Qt%E4%B8%8A%E4%BD%8D%E6%9C%BA%E5%BC%80%E5%8F%91/1.htm">Qt上位机开发</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>一般的在arm嵌入式平台,大多数板子都要硬解码硬件渲染的框架,使用即可。在x86下比较麻烦了。优化的思路一共有以下几个方面,1.软解码变成硬解码2.将YUV转QImage的操作转移到GPU3.QWidget渲染QImage变成opengGL渲染AVFrame这三点优化来说2与3是优化的效率是非常显著的。1的优化效果往往需要将硬解码的数据copy至CPU再使用2-3的优化。这样一来,解码效率提升了,</div> </li> <li><a href="/article/1892125523560165376.htm" title="FFmpeg 基本语法全面介绍" target="_blank">FFmpeg 基本语法全面介绍</a> <span class="text-muted">陈皮话梅糖@</span> <a class="tag" taget="_blank" href="/search/FFmpeg%E9%9F%B3%E8%A7%86%E9%A2%91%E9%AB%98%E9%98%B6%E6%8A%80%E6%9C%AF%E8%AE%B2%E8%A7%A3/1.htm">FFmpeg音视频高阶技术讲解</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>1.FFmpeg基本语法结构FFmpeg的命令行工具遵循以下基本语法结构:ffmpeg[全局选项]-i输入文件[输入选项][输出选项]输出文件语法说明:ffmpeg:命令行工具的名称。[全局选项]:适用于整个命令的选项(如日志级别、覆盖输出文件等)。-i输入文件:指定输入文件或流。[输入选项]</div> </li> <li><a href="/article/1892012637525438464.htm" title="如何高效使用Zoom视频会议软件:功能解析与操作指南" target="_blank">如何高效使用Zoom视频会议软件:功能解析与操作指南</a> <span class="text-muted">concisedistinct</span> <a class="tag" taget="_blank" href="/search/IT%E5%B7%A5%E5%85%B7/1.htm">IT工具</a><a class="tag" taget="_blank" href="/search/zoom/1.htm">zoom</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91/1.htm">视频</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6/1.htm">软件</a><a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E4%BC%9A%E8%AE%AE/1.htm">视频会议</a> <div>目录1.Zoom的基本功能介绍1.1视频会议1.2语音会议1.3屏幕共享1.4会议录制1.5聊天和文件共享1.6会议室和个人会议ID2.Zoom的使用方法2.1安装Zoom2.2创建和加入会议2.2.1创建会议2.2.2加入会议2.3会议管理2.3.1音视频控制2.3.2屏幕共享管理2.3.3分组讨论2.3.4录制管理3.Zoom的高级功能和技巧3.1虚拟背景3.2白板功能3.3多摄像头支持4.Z</div> </li> <li><a href="/article/1891962954203590656.htm" title="ffmpeg实现视频拼接,图片生成视频demo" target="_blank">ffmpeg实现视频拼接,图片生成视频demo</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> <div>利用ffmpeg实现图片生成视频,视频拼接,添加字幕等$img){//添加背景//$returnImg="backImg{$key}.jpg";//$output="output{$key}.mp4";//$returnImg=$this->addBack($img,$returnImg);$output="output0.mp4";$returnImg="backImg0.jpg";$time=</div> </li> <li><a href="/article/1891924230933639168.htm" title="FFmpeg 源码编译安装" target="_blank">FFmpeg 源码编译安装</a> <span class="text-muted">coolhuhu~</span> <a class="tag" taget="_blank" href="/search/%E8%AF%AD%E9%9F%B3/1.htm">语音</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>参考:https://trac.ffmpeg.org/wiki/CompilationGuide/UbuntuLinux(Ubuntu)下载FFmpeg源码,并将其解压,这里我将它放在~/ffmpeg_source目录下;cd~/ffmpeg_sourceswget-Offmpeg-snapshot.tar.bz2https://ffmpeg.org/releases/ffmpeg-snapsho</div> </li> <li><a href="/article/1891883471547199488.htm" title="免登录H5快手商城系统/抖音小店商城全开源运营版本" target="_blank">免登录H5快手商城系统/抖音小店商城全开源运营版本</a> <span class="text-muted">云深不知处㊣</span> <a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81%E4%B8%93%E5%8C%BA/1.htm">源码专区</a><a class="tag" taget="_blank" href="/search/%E5%85%8D%E7%99%BB%E5%BD%95%E5%95%86%E5%9F%8E%E6%BA%90%E7%A0%81/1.htm">免登录商城源码</a> <div>内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍最近因为直播需要然后在互站花500买了一套仿抖音的商城系统,感觉确实还可以,反正都买了所以就分享给有需要的人以下是互站那边的网站介绍可以了看一下,还是很不错的1、无需登录直接可以购买商品2、独立后台支持分站3、修复已知问题完美运营4、支持对接第三方支付:易支付、码支付、虎皮椒等。二、效果展示1.部分代码代码如下(</div> </li> <li><a href="/article/1891838920451223552.htm" title="ffmpeg源码分析:avformat_open_input()" target="_blank">ffmpeg源码分析:avformat_open_input()</a> <span class="text-muted">风雨兼程8023</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> <div>目录一、avformat_alloc_context()二、init_input()2.1av_probe_input_format2()2.2av_probe_input_buffer2()2.3io_open三、read_header()本文简单分析FFmpeg中一个常用的函数:avformat_open_input()。该函数用于打开多媒体数据并且获得一些相关的信息。它的声明位于libavf</div> </li> <li><a href="/article/1891838793548361728.htm" title="FFMpeg 源码分析 (3)avformat_open_input()" target="_blank">FFMpeg 源码分析 (3)avformat_open_input()</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> <div>这个函数主要用来打开媒体资源。完成媒体格式的探测和获取相关的媒体信息的工作。函数完成定义如下:intavformat_open_input(AVFormatContext**ps,constchar*filename,AVInputFormat*fmt,AVDictionary**options){AVFormatContext*s=*ps;inti,ret=0;AVDictionary*tmp=</div> </li> <li><a href="/article/1891836519912632320.htm" title="深入解析 iOS 视频录制(一):录制管理核心MWRecordingController 类的设计与实现" target="_blank">深入解析 iOS 视频录制(一):录制管理核心MWRecordingController 类的设计与实现</a> <span class="text-muted">胖虎1</span> <a class="tag" taget="_blank" href="/search/%E5%AA%92%E4%BD%93%E6%8D%95%E6%8D%89/1.htm">媒体捕捉</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/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%9F%B3%E8%A7%86%E9%A2%91%E5%BD%95%E5%88%B6/1.htm">音视频录制</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BD%95%E5%88%B6/1.htm">自定义录制</a><a class="tag" taget="_blank" href="/search/AVFoundation/1.htm">AVFoundation</a> <div>深入解析iOS视频录制(一):录制管理核心MWRecordingController类的设计与实现深入解析iOS视频录制(二):自定义UI的实现深入解析iOS视频录制(三):完整录制流程的实现与整合引言在iOS应用开发中,视频录制功能越来越常见,尤其是在直播、短视频和社交应用中,用户经常需要录制高质量的视频内容。为了实现这个功能,我们不仅需要处理视频的输入和输出,还要控制摄像头的切换、录制的开始与</div> </li> <li><a href="/article/1891834877720981504.htm" title="FFMPEG源码分析:avformat_open_input()(媒体打开函数)" target="_blank">FFMPEG源码分析:avformat_open_input()(媒体打开函数)</a> <span class="text-muted">sunshineywz</span> <a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>本文分析了FFMPEG中的媒体打开函数avformat_open_input()//参数ps包含一切媒体相关的上下文结构,有它就有了一切,本函数如果打开媒体成功,//会返回一个AVFormatContext的实例.//参数filename是媒体文件名或URL.//参数fmt是要打开的媒体格式的操作结构,因为是读,所以是inputFormat.此处可以//传入一个调用者定义的inputFormat,</div> </li> <li><a href="/article/1891833867464142848.htm" title="iOS 中使用 FFmpeg 的高级功能 - 滤镜(Filters)" target="_blank">iOS 中使用 FFmpeg 的高级功能 - 滤镜(Filters)</a> <span class="text-muted">陈皮话梅糖@</span> <a class="tag" taget="_blank" href="/search/FFmpeg%E9%9F%B3%E8%A7%86%E9%A2%91%E9%AB%98%E9%98%B6%E6%8A%80%E6%9C%AF%E8%AE%B2%E8%A7%A3/1.htm">FFmpeg音视频高阶技术讲解</a><a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>FFmpeg提供了强大的滤镜功能,可以对音视频进行各种处理,例如裁剪、缩放、添加水印、调整颜色、添加特效等。1.FFmpeg滤镜基础知识1.1什么是滤镜(Filters)?滤镜是FFmpeg提供的一种功能,用于对音视频流进行处理。滤镜链(FilterChain)是多个滤镜的组合,按顺序对输入流进行处理。滤镜图(FilterGraph)是一个复杂的滤镜链,可以包含多个输入和输出。1.2常见的滤镜滤镜</div> </li> <li><a href="/article/1891830336220884992.htm" title="ffmpeg configure 研究2:分析屏幕输出及文件输出的具体过程" target="_blank">ffmpeg configure 研究2:分析屏幕输出及文件输出的具体过程</a> <span class="text-muted">hjjdebug</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/config/1.htm">config</a><a class="tag" taget="_blank" href="/search/configure/1.htm">configure</a><a class="tag" taget="_blank" href="/search/%E5%8F%98%E9%87%8F/1.htm">变量</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a> <div>author:hjjdebugdate:2025年02月17日星期一16:57:55CSTdescription:ffmpegconfigure研究2分析屏幕输出及文件输出的具体过程文章目录0.执行./configure命令1.sed:can'tread信息是从哪里来的?1.1find_filters_extern()1.2find_things_extern()2.屏幕输出信息的来源2.1,查找</div> </li> <li><a href="/article/1891829323032227840.htm" title="ffmpeg源码简析(五)编码——avformat_alloc_output_context2(),avcodec_encode_video2()" target="_blank">ffmpeg源码简析(五)编码——avformat_alloc_output_context2(),avcodec_encode_video2()</a> <span class="text-muted">小码哥_WS</span> <a class="tag" taget="_blank" href="/search/%E6%B5%81%E5%AA%92%E4%BD%93-%E7%9B%B4%E6%92%AD-%E7%BC%96%E8%A7%A3%E7%A0%81/1.htm">流媒体-直播-编解码</a><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/%E7%BC%96%E7%A0%81/1.htm">编码</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81/1.htm">源码</a> <div>1.avformat_alloc_output_context2()在基于FFmpeg的视音频编码器程序中,该函数通常是第一个调用的函数(除了组件注册函数av_register_all())。avformat_alloc_output_context2()函数可以初始化一个用于输出的AVFormatContext结构体。它的声明位于libavformat\avformat.h,如下所示。intav</div> </li> <li><a href="/article/1891826423874777088.htm" title="FFmpeg源码:av_strlcpy函数分析" target="_blank">FFmpeg源码:av_strlcpy函数分析</a> <span class="text-muted">崔杰城</span> <a class="tag" taget="_blank" href="/search/FFmpeg%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/1.htm">FFmpeg源码分析</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>一、引言在C/C++编程中经常会用到strcpy这个字符串复制函数。strcpy是C/C++中的一个标准函数,可以把含有'\0'结束符的字符串复制到另一个地址空间。但是strcpy不会检查目标数组dst的大小是否足以容纳源字符串src,如果目标数组太小,将会导致缓冲区溢出。针对该问题很多C/C++开源库都会选择自己实现strcpy函数来保证安全性。而FFmpeg自定义了av_strlcpy函数,在</div> </li> <li><a href="/article/1891785497869611008.htm" title="如何自建obs服务器,使用 Nginx+OBS 搭建rmtp直播服务器并进行直播" target="_blank">如何自建obs服务器,使用 Nginx+OBS 搭建rmtp直播服务器并进行直播</a> <span class="text-muted">卓相</span> <a class="tag" taget="_blank" href="/search/%E5%A6%82%E4%BD%95%E8%87%AA%E5%BB%BAobs%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">如何自建obs服务器</a> <div>目录简介和安装配置OBS推流运行拉流完成简介和安装Nginx本身是一个非常出色的HTTP服务器,OBS(OpenBroadcasterSoftware)是一个免费且开源的,全平台支持的视频录制和直播软件。这两个东西通过一个nginx的模块nginx-rtmp-module组合在一起,即可以搭建一个功能流媒体服务器。这个流媒体服务器可以支持RTMP和HLS(LiveHttpStream)。FFmpe</div> </li> <li><a href="/article/47.htm" title="jdk tomcat 环境变量配置" target="_blank">jdk tomcat 环境变量配置</a> <span class="text-muted">Array_06</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a> <div>Win7 下如何配置java环境变量 1。准备jdk包,win7系统,tomcat安装包(均上网下载即可) 2。进行对jdk的安装,尽量为默认路径(但要记住啊!!以防以后配置用。。。) 3。分别配置高级环境变量。   电脑-->右击属性-->高级环境变量-->环境变量。 分别配置 : path    &nbs</div> </li> <li><a href="/article/174.htm" title="Spring调SDK包报java.lang.NoSuchFieldError错误" target="_blank">Spring调SDK包报java.lang.NoSuchFieldError错误</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>        在工作中调另一个系统的SDK包,出现如下java.lang.NoSuchFieldError错误。 org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.l</div> </li> <li><a href="/article/301.htm" title="LeetCode[位运算] - #136 数组中的单一数" target="_blank">LeetCode[位运算] - #136 数组中的单一数</a> <span class="text-muted">Cwind</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%A2%98%E8%A7%A3/1.htm">题解</a><a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a><a class="tag" taget="_blank" href="/search/LeetCode/1.htm">LeetCode</a><a class="tag" taget="_blank" href="/search/Algorithm/1.htm">Algorithm</a> <div>原题链接:#136 Single Number 要求: 给定一个整型数组,其中除了一个元素之外,每个元素都出现两次。找出这个元素 注意:算法的时间复杂度应为O(n),最好不使用额外的内存空间 难度:中等 分析: 题目限定了线性的时间复杂度,同时不使用额外的空间,即要求只遍历数组一遍得出结果。由于异或运算 n XOR n = 0, n XOR 0 = n,故将数组中的每个元素进</div> </li> <li><a href="/article/428.htm" title="qq登陆界面开发" target="_blank">qq登陆界面开发</a> <span class="text-muted">15700786134</span> <a class="tag" taget="_blank" href="/search/qq/1.htm">qq</a> <div>今天我们来开发一个qq登陆界面,首先写一个界面程序,一个界面首先是一个Frame对象,即是一个窗体。然后在这个窗体上放置其他组件。代码如下: public class First {         public void initul(){        jf=ne</div> </li> <li><a href="/article/555.htm" title="Linux的程序包管理器RPM" target="_blank">Linux的程序包管理器RPM</a> <span class="text-muted">被触发</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>在早期我们使用源代码的方式来安装软件时,都需要先把源程序代码编译成可执行的二进制安装程序,然后进行安装。这就意味着每次安装软件都需要经过预处理-->编译-->汇编-->链接-->生成安装文件--> 安装,这个复杂而艰辛的过程。为简化安装步骤,便于广大用户的安装部署程序,程序提供商就在特定的系统上面编译好相关程序的安装文件并进行打包,提供给大家下载,我们只需要根据自己的</div> </li> <li><a href="/article/682.htm" title="socket通信遇到EOFException" target="_blank">socket通信遇到EOFException</a> <span class="text-muted">肆无忌惮_</span> <a class="tag" taget="_blank" href="/search/EOFException/1.htm">EOFException</a> <div>java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:</div> </li> <li><a href="/article/809.htm" title="基于spring的web项目定时操作" target="_blank">基于spring的web项目定时操作</a> <span class="text-muted">知了ing</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a> <div>废话不多说,直接上代码,很简单 配置一下项目启动就行 1,web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="h</div> </li> <li><a href="/article/936.htm" title="树形结构的数据库表Schema设计" target="_blank">树形结构的数据库表Schema设计</a> <span class="text-muted">矮蛋蛋</span> <a class="tag" taget="_blank" href="/search/schema/1.htm">schema</a> <div>原文地址: http://blog.csdn.net/MONKEY_D_MENG/article/details/6647488     程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数据库,都是以二维表的形式记录存储数据信息,</div> </li> <li><a href="/article/1063.htm" title="maven将jar包和源码一起打包到本地仓库" target="_blank">maven将jar包和源码一起打包到本地仓库</a> <span class="text-muted">alleni123</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>http://stackoverflow.com/questions/4031987/how-to-upload-sources-to-local-maven-repository <project> ... <build> <plugins> <plugin> <groupI</div> </li> <li><a href="/article/1190.htm" title="java IO操作 与 File 获取文件或文件夹的大小,可读,等属性!!!" target="_blank">java IO操作 与 File 获取文件或文件夹的大小,可读,等属性!!!</a> <span class="text-muted">百合不是茶</span> <div>类 File File是指文件和目录路径名的抽象表示形式。 1,何为文件: 标准文件(txt doc mp3...) 目录文件(文件夹) 虚拟内存文件   2,File类中有可以创建文件的 createNewFile()方法,在创建新文件的时候需要try{} catch(){}因为可能会抛出异常;也有可以判断文件是否是一个标准文件的方法isFile();这些防抖都</div> </li> <li><a href="/article/1317.htm" title="Spring注入有继承关系的类(2)" target="_blank">Spring注入有继承关系的类(2)</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>被注入类的父类有相应的属性,Spring可以直接注入相应的属性,如下所例:1.AClass类 package com.bijian.spring.test4; public class AClass { private String a; private String b; public String getA() { retu</div> </li> <li><a href="/article/1444.htm" title="30岁转型期你能否成为成功人士" target="_blank">30岁转型期你能否成为成功人士</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E6%88%90%E9%95%BF/1.htm">成长</a><a class="tag" taget="_blank" href="/search/%E5%8A%B1%E5%BF%97/1.htm">励志</a> <div>        很多人由于年轻时走了弯路,到了30岁一事无成,这样的例子大有人在。但同样也有一些人,整个职业生涯都发展得很优秀,到了30岁已经成为职场的精英阶层。由于做猎头的原因,我们接触很多30岁左右的经理人,发现他们在职业发展道路上往往有很多致命的问题。在30岁之前,他们的职业生涯表现很优秀,但从30岁到40岁这一段,很多人</div> </li> <li><a href="/article/1571.htm" title="【Velocity四】Velocity与Java互操作" target="_blank">【Velocity四】Velocity与Java互操作</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/velocity/1.htm">velocity</a> <div>Velocity出现的目的用于简化基于MVC的web应用开发,用于替代JSP标签技术,那么Velocity如何访问Java代码.本篇继续以Velocity三http://bit1129.iteye.com/blog/2106142中的例子为基础,      POJO    package com.tom.servlets; public</div> </li> <li><a href="/article/1698.htm" title="【Hive十一】Hive数据倾斜优化" target="_blank">【Hive十一】Hive数据倾斜优化</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a> <div>什么是Hive数据倾斜问题   操作:join,group by,count distinct 现象:任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成;查看未完成的子任务,可以看到本地读写数据量积累非常大,通常超过10GB可以认定为发生数据倾斜。 原因:key分布不均匀 倾斜度衡量:平均记录数超过50w且</div> </li> <li><a href="/article/1825.htm" title="在nginx中集成lua脚本:添加自定义Http头,封IP等" target="_blank">在nginx中集成lua脚本:添加自定义Http头,封IP等</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+lua+csrf/1.htm">nginx lua csrf</a> <div>Lua是一个可以嵌入到Nginx配置文件中的动态脚本语言,从而可以在Nginx请求处理的任何阶段执行各种Lua代码。刚开始我们只是用Lua 把请求路由到后端服务器,但是它对我们架构的作用超出了我们的预期。下面就讲讲我们所做的工作。 强制搜索引擎只索引mixlr.com Google把子域名当作完全独立的网站,我们不希望爬虫抓取子域名的页面,降低我们的Page rank。 location /{</div> </li> <li><a href="/article/1952.htm" title="java-3.求子数组的最大和" target="_blank">java-3.求子数组的最大和</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>package beautyOfCoding; public class MaxSubArraySum { /** * 3.求子数组的最大和 题目描述: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1, -2, 3, 10, -4,</div> </li> <li><a href="/article/2079.htm" title="Netty源码学习-FileRegion" target="_blank">Netty源码学习-FileRegion</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/netty/1.htm">netty</a> <div>今天看org.jboss.netty.example.http.file.HttpStaticFileServerHandler.java 可以直接往channel里面写入一个FileRegion对象,而不需要相应的encoder: //pipeline(没有诸如“FileRegionEncoder”的handler): public ChannelPipeline ge</div> </li> <li><a href="/article/2206.htm" title="使用ZeroClipboard解决跨浏览器复制到剪贴板的问题" target="_blank">使用ZeroClipboard解决跨浏览器复制到剪贴板的问题</a> <span class="text-muted">cngolon</span> <a class="tag" taget="_blank" href="/search/%E8%B7%A8%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">跨浏览器</a><a class="tag" taget="_blank" href="/search/%E5%A4%8D%E5%88%B6%E5%88%B0%E7%B2%98%E8%B4%B4%E6%9D%BF/1.htm">复制到粘贴板</a><a class="tag" taget="_blank" href="/search/Zero+Clipboard/1.htm">Zero Clipboard</a> <div>Zero Clipboard的实现原理 Zero Clipboard 利用透明的Flash让其漂浮在复制按钮之上,这样其实点击的不是按钮而是 Flash ,这样将需要的内容传入Flash,再通过Flash的复制功能把传入的内容复制到剪贴板。 Zero Clipboard的安装方法 首先需要下载 Zero Clipboard的压缩包,解压后把文件夹中两个文件:ZeroClipboard.js </div> </li> <li><a href="/article/2333.htm" title="单例模式" target="_blank">单例模式</a> <span class="text-muted">cuishikuan</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a> <div>第一种(懒汉,线程不安全): public class Singleton {   2     private static Singleton instance;   3     pri</div> </li> <li><a href="/article/2460.htm" title="spring+websocket的使用" target="_blank">spring+websocket的使用</a> <span class="text-muted">dalan_123</span> <div>一、spring配置文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.or</div> </li> <li><a href="/article/2587.htm" title="细节问题:ZEROFILL的用法范围。" target="_blank">细节问题:ZEROFILL的用法范围。</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 1、zerofill把月份中的一位数字比如1,2,3等加前导0 mysql> CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL,    -> day</div> </li> <li><a href="/article/2714.htm" title="Android开发10——Activity的跳转与传值" target="_blank">Android开发10——Activity的跳转与传值</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Android%E5%BC%80%E5%8F%91/1.htm">Android开发</a> <div>Activity跳转与传值,主要是通过Intent类,Intent的作用是激活组件和附带数据。   一、Activity跳转 方法一Intent intent = new Intent(A.this, B.class); startActivity(intent)   方法二Intent intent = new Intent();intent.setCla</div> </li> <li><a href="/article/2841.htm" title="jdbc 得到表结构、主键" target="_blank">jdbc 得到表结构、主键</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/jdbc+%E5%BE%97%E5%88%B0%E8%A1%A8%E7%BB%93%E6%9E%84%E3%80%81%E4%B8%BB%E9%94%AE/1.htm">jdbc 得到表结构、主键</a> <div>转自博客:http://blog.csdn.net/ocean1010/article/details/7266042 假设有个con DatabaseMetaData dbmd = con.getMetaData(); rs = dbmd.getColumns(con.getCatalog(), schema, tableName, null); rs.getSt</div> </li> <li><a href="/article/2968.htm" title="Android 应用程序开关GPS" target="_blank">Android 应用程序开关GPS</a> <span class="text-muted">gqdy365</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>要在应用程序中操作GPS开关需要权限: <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> 但在配置文件中添加此权限之后会报错,无法再eclipse里面正常编译,怎么办? 1、方法一:将项目放到Android源码中编译; 2、方法二:网上有人说cl</div> </li> <li><a href="/article/3095.htm" title="Windows上调试MapReduce" target="_blank">Windows上调试MapReduce</a> <span class="text-muted">zhiquanliu</span> <a class="tag" taget="_blank" href="/search/mapreduce/1.htm">mapreduce</a> <div>1.下载hadoop2x-eclipse-plugin https://github.com/winghc/hadoop2x-eclipse-plugin.git 把 hadoop2.6.0-eclipse-plugin.jar 放到eclipse plugin 目录中。 2.下载 hadoop2.6_x64_.zip http://dl.iteye.com/topics/download/d2b</div> </li> <li><a href="/article/3222.htm" title="如何看待一些知名博客推广软文的行为?" target="_blank">如何看待一些知名博客推广软文的行为?</a> <span class="text-muted">justjavac</span> <a class="tag" taget="_blank" href="/search/%E5%8D%9A%E5%AE%A2/1.htm">博客</a> <div>本文来自我在知乎上的一个回答:http://www.zhihu.com/question/23431810/answer/24588621 互联网上的两种典型心态: 当初求种像条狗,如今撸完嫌人丑 当初搜贴像条犬,如今读完嫌人软 你为啥感觉不舒服呢? 难道非得要作者把自己的劳动成果免费给你用,你才舒服? 就如同 Google 关闭了 Gooled Reader,那是</div> </li> <li><a href="/article/3349.htm" title="sql优化总结" target="_blank">sql优化总结</a> <span class="text-muted">macroli</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>为了是自己对sql优化有更好的原则性,在这里做一下总结,个人原则如有不对请多多指教。谢谢!   要知道一个简单的sql语句执行效率,就要有查看方式,一遍更好的进行优化。   一、简单的统计语句执行时间 declare @d datetime ---定义一个datetime的变量set @d=getdate() ---获取查询语句开始前的时间select user_id</div> </li> <li><a href="/article/3476.htm" title="Linux Oracle中常遇到的一些问题及命令总结" target="_blank">Linux Oracle中常遇到的一些问题及命令总结</a> <span class="text-muted">超声波</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>1.linux更改主机名   (1)#hostname oracledb    临时修改主机名 (2) vi /etc/sysconfig/network   修改hostname (3) vi /etc/hosts        修改IP对应的主机名   2.linux重启oracle实例及监听的各种方法 (注意操作的顺序应该是先监听,后数据库实例) &nbs</div> </li> <li><a href="/article/3603.htm" title="hive函数大全及使用示例" target="_blank">hive函数大全及使用示例</a> <span class="text-muted">superlxw1234</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hive%E5%87%BD%E6%95%B0/1.htm">hive函数</a> <div>  具体说明及示例参 见附件文档。     文档目录:   目录 一、关系运算: 4 1. 等值比较: = 4 2. 不等值比较: <> 4 3. 小于比较: < 4 4. 小于等于比较: <= 4 5. 大于比较: > 5 6. 大于等于比较: >= 5 7. 空值判断: IS NULL 5</div> </li> <li><a href="/article/3730.htm" title="Spring 4.2新特性-使用@Order调整配置类加载顺序" target="_blank">Spring 4.2新特性-使用@Order调整配置类加载顺序</a> <span class="text-muted">wiselyman</span> <a class="tag" taget="_blank" href="/search/spring+4/1.htm">spring 4</a> <div>4.1 @Order Spring 4.2 利用@Order控制配置类的加载顺序 4.2 演示 两个演示bean package com.wisely.spring4_2.order; public class Demo1Service { } package com.wisely.spring4_2.order; public class</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>