流媒体之HLS——综述(二)

[时间:2018-03] [状态:Open]
[关键词:流媒体,stream,HLS]

本文是上一篇的后续部分,链接如下:HLS协议综述

2 playlist(m3u8)介绍

HLS中的playlist是一个UTF-8编码的文本文件,其中包含了URL和描述性标签。一个常规的playlist如下所示:

#EXT-X-VERSION:3
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
 
# Old-style integer duration; avoid for newer clients.
#EXTINF:10,
http://media.example.com/segment0.ts
 
# New-style floating-point duration; use for modern clients.
#EXTINF:10.0,
http://media.example.com/segment1.ts
#EXTINF:9.5,
http://media.example.com/segment2.ts
#EXT-X-ENDLIST

其中以'#'打头的行都是标签,HLS标准规定对于标准中未定义的标签,可以直接忽略;也就是说'#'也可以作为注释行。这里说明下上面M3U8文件的构成:

  • #EXT-X-VERSION: 表示协议的版本号,而且每个M3U8中只能出现一次该标签。对于具体版本号的定义,可以参考标准的第7节。
  • #EXTM3U作为M3U文件的标识符,可以用于文件类型识别,这是必须的字段。
  • #EXT-X-TARGETDURATION:表示最长分片的时长,这是必须的字段。
  • #EXT-X-MEDIA-SEQUENCE:表示playlist文件中第一个分片的序列号(整数值)。如果M3U8文件中没有该字段,则playlist中第一个分片的序列号必须是0。
  • #EXTINF:,[]</code>表示下一个分片的时长。对于每个分片,必须有该字段。 对于<code>#EXT-X-VERSION</code>小于3的情况下,duration必须是整数;其他情况下duration可以是浮点数和整数。title是一个可选字段,仅用于增强可读性。</li> <li><code>#EXT-X-ENDLIST</code> 该字段表示分片结束,不会在playlist文件中添加新的分片。</li> </ul> <p>上面介绍的是最常见的playlist,还有一种playlist,仅包含播放节目列表信息,在HLS中称为master playlist。其示例如下:</p> <pre><code>#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000, RESOLUTION=720x480 http://example.com/low.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=2, BANDWIDTH=2560000,AVERAGE-BANDWIDTH=2000000, RESOLUTION=1080x720 http://example.com/mid.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=3, BANDWIDTH=7680000,AVERAGE-BANDWIDTH=6000000, RESOLUTION=1920x1080 http://example.com/high.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=4, BANDWIDTH=65000,CODECS="mp4a.40.5" http://example.com/audio-only.m3u8</code></pre> <p>其中包含的标签说明如下:<br><code>#EXT-X-STREAM-INF:<attribute-list></code>用于标识一个Variant Stream,这是由一系列的Redition组成的。该标签的属性列表中包含了Variant Stream的描述信息。例如:</p> <ul> <li><code>BANDWIDTH</code>表示Variant Stream中的峰值比特率,单位bits/s。</li> <li><code>AVERAGE-BANDWIDTH</code>表示Variant Stream中的平均比特率,单位bits/s。</li> <li><code>CODECS</code>包含Variant Stream中音视频编码格式相关的信息,比如上面的"mp4a.40.5"。</li> <li><code>RESOLUTION</code>包含Variant Stream中对应视频流的分辨率。</li> <li><code>FRAME-RATE</code>表示Variant Stream中的视频帧率。</li> </ul> <p>M3U8中还有一个标签需要关注下,<code>EXT-X-PLAYLIST-TYPE</code>。该标签只有两个值:EVENT、VOD。EVENT指的是分片工具只能在M3U8末尾添加新的分片的信息,但不能删除老的分片,通常比较适用于直播+录播的情况(既要提供给客户端点播功能,也要对实时场景进行录制,直播完成之后EVENT就自然退化为VOD)。但是对于M3U8中存在<code>#EXT-X-ENDLIST</code>标签时,可以忽略<code>EXT-X-PLAYLIST-TYPE</code>。<br> 还有一种情况,如果M3U8中不存在<code>#EXT-X-ENDLIST</code>以及<code>EXT-X-PLAYLIST-TYPE</code>标签,则服务器端可以任意更新playlist内容。</p> <p>到此我们基本介绍了完了M3U8的格式。</p> <h2 id="服务器端和客户端的主要实现逻辑">3 服务器端和客户端的主要实现逻辑</h2> <h3 id="hls之服务器端">HLS之服务器端</h3> <p>在第一部分介绍过,HLS的服务器端包括三个部分:转码器、分片器、分发端。对于VOD而言,这三个部分是可以独立工作的,并不需要太多的配合。但对于直播而言,三者需要密切配合,以保证直播的实时性和流畅度。典型的服务器端逻辑是这样的:</p> <ol> <li>将原始音视频数据或者多媒体素材通过转码器编码复用;</li> <li>将复用后的文件切片,并生成对应的M3U8(注意切片应该符合HLS规范);</li> <li>为每个切片生成对应的URL,并更新M3U8文件;</li> <li>直播需要实时更新Playlist对应的M3U8,点播生成完成之后服务器端不得修改Playlist</li> </ol> <h3 id="hls之客户端">HLS之客户端</h3> <p>从逻辑上来讲,HLS客户端更为简单。其典型处理逻辑如下:</p> <ol> <li>通过给定URI获取 Playlist。若是Master Playlist,客户端需选择一个Variant Stream来播放。</li> <li>客户端检查#EXT-X-VERSION版本是否满足。</li> <li>客户端应该忽略不可识别的 tags,忽略不可识别的属性键值对。</li> <li>加载Media Playlist file,并选择一个segment开始播放;</li> <li>播放完成一个segment之后,根据客户端当前的具体情况选择一个新的segment,并重复执行播放操作;</li> <li>对于直播,需要定期刷新Media Playlist file,并选择合适的segment播放。</li> </ol> <h2 id="码率切换的基本逻辑">4 码率切换的基本逻辑</h2> <p>从HLS协议的定义来看,所有的码率切换策略都是有客户端定义的。服务器端仅仅提供几种可供选择的码率。所以主要的码率切换逻辑也是在客户端完成。</p> <p>客户端判断是否切换的主要因素如下:</p> <ol> <li>设备实际下载速度</li> <li>设备运行情况(CPU、内存、以及屏幕分辨率)</li> </ol> <p>比较简单的客户端会直接根据实际下载速度和Variant Stream标称的码率做比较,如果满足就上切,不满足就下切。</p> <p>当然在实际切换时还需要考虑播放器的用户体验,最好做到平滑切换,用户没有直接的可见的播放卡顿。</p> <h2 id="常见的开源hls框架">5 常见的开源HLS框架</h2> <p>到目前为止,我所遇到的HLS播放框架主要有:ffmpeg中的HLS模块、AOSP中的HLS模块。当然在Mac或iOS中原生就支持HLS,不过没有源码。</p> <h2 id="总结">6 总结</h2> <p>后面的文章将中主要关注ffmpeg和AOSP中的HLS相关的实现。同时会给出一个基于ffmpeg搭建的HLS直播系统(本地文件模拟的直播源)。</p> <p>本文主要简单总结了HLS协议相关的基础知识,以及HLS服务器端和客户端的常规实现逻辑。仅供后续参考及查阅。</p> <h3 id="参考">参考</h3> <ol> <li>APPLE-HLS</li> <li>IETF-HTTP Live Streaming</li> <li>HLS 协议详解</li> </ol> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1305424348638646272"></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)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1900858656346402816.htm" title="laravel项目中使用FFMPeg 剪裁视频" target="_blank">laravel项目中使用FFMPeg 剪裁视频</a> <span class="text-muted">道系女孩~</span> <a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/laravel/1.htm">laravel</a> <div>#运行环境需安装的软件ffmpeg#安装的扩展pbmedia/laravel-ffmpeg:^8.3#扩展文档https://packagist.org/packages/pbmedia/laravel-ffmpeg#引入的类useFFMpeg\Coordinate\TimeCode;useFFMpeg\Format\Video\X264;useFFMpeg\Exception\RuntimeEx</div> </li> <li><a href="/article/1900798246930935808.htm" title="音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)" target="_blank">音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)</a> <span class="text-muted">崔杰城</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E6%8A%80%E6%9C%AF/1.htm">音视频技术</a><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/%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命令可以获取到SDP描述的RTP流的的音频压缩编码格式、音频压缩编码格式的profile、音频采样率、通道数信息:ffmpeg-protocol_whitelist"file,rtp,udp"-iXXX.sdp而由《音视频入门基础:RTP专题(17)——音频的SDP媒体描述》可以知道,SDP协议中,a=rtpmap属性和a=fmtp属性中的</div> </li> <li><a href="/article/1900732427114967040.htm" title="Qt+ffmpeg环境搭建" target="_blank">Qt+ffmpeg环境搭建</a> <span class="text-muted">技术不支持</span> <a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/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> <div>Qt+ffmpeg环境搭建各平台常见视频开发库举例:iOS:AVFoundationAudioUnitAndroid:MediaPlayer,MediaCodecWindows:DirectShowLinux:GStreamerFFmpeg库是一个跨平台的视频开发库,还有libVLC也是一个跨平台的视频开发库掌握了其中一个库,也能很快上手其它库,因为音视频解码的原理类似引入FFmpeg库有两种方式</div> </li> <li><a href="/article/1900727510031724544.htm" title="QT+FFmpeg+Windows开发环境搭建(加薪点)" target="_blank">QT+FFmpeg+Windows开发环境搭建(加薪点)</a> <span class="text-muted">Qt历险记</span> <a class="tag" taget="_blank" href="/search/Qt/1.htm">Qt</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E7%BA%A7%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88/1.htm">高级开发工程师</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a> <div>01、Windows环境搭建FFMPEG官网:http://ffmpeg.org/02、下载4.2.1版本源码源码:https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz203、下载4.2.1编译好的文件下载已经编译好的FFMPEG)(迅雷下载很快)网址:https://ffmpeg.zeranoe.com/builds/32位下载地址:</div> </li> <li><a href="/article/1900727510878973952.htm" title="Qt | Windows环境搭建ffmpeg" target="_blank">Qt | Windows环境搭建ffmpeg</a> <span class="text-muted">Qt历险记</span> <a class="tag" taget="_blank" href="/search/Qt/1.htm">Qt</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E7%BA%A7%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88/1.htm">高级开发工程师</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>点击上方"蓝字"关注我们FFMPEG官网>>>http://ffmpeg.org/【下载4.2.1版本源码】源码:https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2【下载4.2.1编译好的文件】下载已经编译好的FFMPEG网址:https://ffmpeg.zeranoe.com/builds/</div> </li> <li><a href="/article/1900524910644621312.htm" title="Python爬虫教程:如何通过接口批量下载视频封面(FFmpeg技术实现)" target="_blank">Python爬虫教程:如何通过接口批量下载视频封面(FFmpeg技术实现)</a> <span class="text-muted">Python爬虫项目</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/scrapy/1.htm">scrapy</a><a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a> <div>引言随着在线视频平台的蓬勃发展,视频封面作为视频内容的预览图,一直以来都是观众对视频的第一印象。在爬取视频资源时,很多开发者和研究者往往只关注视频本身,而忽略了视频封面。实际上,视频封面不仅能提供重要的信息(例如视频标题、主题或情感等),而且它们也能作为数据集中的重要属性,用于视频分类、推荐系统等应用。在这篇博客中,我们将深入探讨如何使用Python通过接口批量下载视频封面,利用FFmpeg等技术</div> </li> <li><a href="/article/1900483024760401920.htm" title="三分钟掌握音视频信息查询 | 在 Rust 中优雅地集成 FFmpeg" target="_blank">三分钟掌握音视频信息查询 | 在 Rust 中优雅地集成 FFmpeg</a> <span class="text-muted">Yeauty</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/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>前言在音视频处理领域,开发者常常需要获取媒体文件的详细信息,如时长、格式、元数据,以及音视频流的编码参数等。这些信息对于媒体管理、转码调度、播放控制等场景至关重要。然而,直接使用FFmpeg命令行工具或其原生API存在以下挑战:命令行工具的复杂性:FFmpeg的命令行参数众多且复杂,使用不当可能导致错误。例如,处理包含空格的文件名时,需要特别注意正确的转义和引用方式,否则可能导致无法识别文件名的问</div> </li> <li><a href="/article/1900443047003484160.htm" title="『FFmpeg学习笔记』MAC系统电脑安装FFmpeg以及使用" target="_blank">『FFmpeg学习笔记』MAC系统电脑安装FFmpeg以及使用</a> <span class="text-muted">AI大模型前沿研究</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E7%AC%94%E8%AE%B0/1.htm">大模型笔记</a><a class="tag" taget="_blank" href="/search/macos/1.htm">macos</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/M1/1.htm">M1</a> <div>MAC系统电脑安装FFmpeg文章目录一.安装FFmpeg1.1.MACbrew安装FFmpeg1.2.MAC官网下载FFmpeg压缩包1.3.Windows安装1.4.Linux安装二.FFmpeg的使用2.1.音频操作2.1.1.如果不转换,直接输出aac2.1.2.将音频输出为wav2.1.3.将aac转换为wav2.1.4.双声道分离2.1.5.使用FFmpeg将音频和视频合并2.2.字幕</div> </li> <li><a href="/article/1900239060463579136.htm" title="MPV Player(MPV播放器)" target="_blank">MPV Player(MPV播放器)</a> <span class="text-muted">fhfhgfdgdsgi1</span> <a class="tag" taget="_blank" href="/search/tornado/1.htm">tornado</a> <div>链接:https://pan.quark.cn/s/a6b4b644bb16MPVPlayer(MPV播放器)是mplayer2和MPlayer的一个分支,支持多种视频文件格式、音频和视频编解码器以及字幕类型。它通过FFmpeg提供硬件加速,支持VDPAU和VAAPI以及Windows上的DXVA2,以及VDA和VideoToolbox视频。mpv可以播放互联网广播流、视频流、“实时”应用各种音频</div> </li> <li><a href="/article/1900226077540806656.htm" title="【视频】ffmpeg、Nginx搭建RTMP、HLS服务器" target="_blank">【视频】ffmpeg、Nginx搭建RTMP、HLS服务器</a> <span class="text-muted">郭老二</span> <a class="tag" taget="_blank" href="/search/%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><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a> <div>1、源码安装Nginx1)源码下载因为要使用Nginx的模块nginx-rtmp-module,所以要下载nginx和nginx-rtmp-module的源码。下载地址:http://nginx.org/en/download.htmlhttps://github.com/arut/nginx-rtmp-module/tags2)解压、配置在同一个目录中解压nginx和nginx-rtmp-mod</div> </li> <li><a href="/article/1900013502286852096.htm" title="【视频】V4L2、ffmpeg、OpenCV中对YUV的定义" target="_blank">【视频】V4L2、ffmpeg、OpenCV中对YUV的定义</a> <span class="text-muted">郭老二</span> <a class="tag" taget="_blank" href="/search/%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><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/opencv/1.htm">opencv</a> <div>1、常见的YUV格式1.1YUV420每像素16位IMC1:YYYYYYYYVV--UU–IMC3:YYYYYYYYUU--VV–每像素12位I420:YYYYYYYYUUVV=>YUV420PYV12:YYYYYYYYVVUU=>YUV420PNV12:YYYYYYYYUVUV=>YUV420SP(最受欢迎格式)NV21:YYYYYYYYVUVU=>YUV420SPIMC2:YYYYYYYYYY</div> </li> <li><a href="/article/1900007189255352320.htm" title="msys2+mingw编译ffmpeg" target="_blank">msys2+mingw编译ffmpeg</a> <span class="text-muted">星火撩猿</span> <a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91%E9%9B%86/1.htm">音视频集</a><a class="tag" taget="_blank" href="/search/msys2/1.htm">msys2</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>MinGW安装ffmpeg下载ffmpeg源码源码下载编译安装ffmpeg./configure--prefix=/usr/local/ffmpeg(生成makefile文件)make-j4(多进程并行编译节省编译时间)makeinstall(安装到指定目录)</div> </li> <li><a href="/article/1900002649382645760.htm" title="利用Qt + OpenGL 渲染 YUV数据,播放视频 mac版" target="_blank">利用Qt + OpenGL 渲染 YUV数据,播放视频 mac版</a> <span class="text-muted">jake2012</span> <a class="tag" taget="_blank" href="/search/OpenGL/1.htm">OpenGL</a><a class="tag" taget="_blank" href="/search/Qt/1.htm">Qt</a><a class="tag" taget="_blank" href="/search/Qt/1.htm">Qt</a><a class="tag" taget="_blank" href="/search/3D/1.htm">3D</a><a class="tag" taget="_blank" href="/search/C%2FC%2B%2B/1.htm">C/C++</a> <div>最近利用Qt渲染YUV数据,折腾了很久,最开始使用FFmpeg将YUV数据转换成RGB数据后在用qt绘制,很快得到了成功,但是cpu占用率太大,最后放弃了。在这先感谢来自文章http://blog.csdn.net/su_vast/article/details/52214642的作者,使用他的代码我实现了Windows上的YUV数据渲染。但是移植到mac上渲染不出来,经过折腾及对OpenGL的了</div> </li> <li><a href="/article/1899991299533107200.htm" title="【GB28181】H265-Nalu的封装" target="_blank">【GB28181】H265-Nalu的封装</a> <span class="text-muted">gma999</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>概述通过国标摄像头拉流,ffmpeg解码可以得到如下日志信息[rtsp@0x55842ed950]videocodecsetto:hevc[rtp@0x55842b7cc0]Nodefaultwhitelistset[udp@0x55842bb400]Nodefaultwhitelistset[udp@0x55842bb400]endreceivebuffersizereportedis13107</div> </li> <li><a href="/article/1899930527100628992.htm" title="ffmpeg录制视频功能" target="_blank">ffmpeg录制视频功能</a> <span class="text-muted">菜菜求佬带</span> <a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>本文目录1.环境配置2.ffmpeg编解码的主要逻辑:3.捕获屏幕帧与写入输出文件4.释放资源在录制结束时,释放所有分配的资源。5.自定义I/O上下文6.对于ACC编码器注意事项1.环境配置下载并安装FFmpeg库在Windows上从FFmpeg官方网站下载预编译的FFmpeg库:解压下载的文件,并记下解压后的路径。FFmpeg下载(windows版本)_libijkffmpeg.so32位下载-</div> </li> <li><a href="/article/1899924473428111360.htm" title="Qt/C++音视频开发09-ffmpeg内核音视频同步" target="_blank">Qt/C++音视频开发09-ffmpeg内核音视频同步</a> <span class="text-muted">feiyangqingyun</span> <a class="tag" taget="_blank" href="/search/Qt%2FC%2B%2B%E9%9F%B3%E8%A7%86%E9%A2%91%E5%BC%80%E5%8F%91/1.htm">Qt/C++音视频开发</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a> <div>一、前言用ffmpeg来做音视频同步,个人认为这个是ffmpeg基础处理中最难的一个,无数人就卡在这里,怎么也不准,本人也是尝试过网上各种demo,基本上都是渣渣,要么仅仅支持极其少量的视频文件比如收到的数据包是一帧视频一帧音频的,要么根本没法同步歪七八糟的,要么进度跳过去直接蹦蹦蹦崩溃的,其实最完美的音视频同步处理demo就是ffplay,我亲测过几十种各种各样的音视频本地文件,数十种视频流文件</div> </li> <li><a href="/article/1899921697675472896.htm" title="Qt通过FFmpeg打开RTSP并截图一帧作为背景" target="_blank">Qt通过FFmpeg打开RTSP并截图一帧作为背景</a> <span class="text-muted">美丽的欣情</span> <a class="tag" taget="_blank" href="/search/Qt/1.htm">Qt</a><a class="tag" taget="_blank" href="/search/FFmpeg/1.htm">FFmpeg</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>该代码基于Qt和FFmpeg实现了从RTSP视频流中截取一帧图像,并将其渲染到QWidget作为背景图。整个实现流程分为Qt界面构建、FFmpeg解码RTSP流、视频帧转换和QImage显示四个主要部分。首先,RtspImageWidget继承自QWidget,在其构造函数中创建了一个QLabel,用于显示截取的图像,并将其添加到QVBoxLayout进行布局管理。loadRtspFrame()方</div> </li> <li><a href="/article/1899919425910403072.htm" title="Easyliev在线视频分享平台项目总结——SpringBoot、Mybatis、Redis、ElasticSearch、FFmpeg" target="_blank">Easyliev在线视频分享平台项目总结——SpringBoot、Mybatis、Redis、ElasticSearch、FFmpeg</a> <span class="text-muted">周小闯</span> <a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E6%80%BB%E7%BB%93/1.htm">项目总结</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/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a> <div>EasyLive项目总结登陆注册获取图片验证码captchat插件base编码(图片,用于前端展示)checkCodeKey验证码标识(用于匹配redis缓存,校验验证码)redis缓存保存验证码缓存用于登录注册校验(checkCodeKey为标识)注册校验验证码根据前端传递的checkCodeKey,在Redis缓存中查找验证码并进行比较注册昵称是否被使用邮箱是否被使用清除Redis中的验证码缓</div> </li> <li><a href="/article/1899637298438402048.htm" title="FFmpeg入门:最简单的音频播放器" target="_blank">FFmpeg入门:最简单的音频播放器</a> <span class="text-muted">_多拉不懂A梦</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入门:最简单的音频播放器欢迎大家来到FFmpeg入门的第二章,今天只做一个最简单的FFmpeg音频播放器;同样,话不多说,先上流程图流程图以上流程和视频播放器的解码过程基本上是一致的;不同点在于SDL的渲染方式。下面我会重点说一下这个部分SDL音频渲染音频渲染的方式和视频不太一样的,我们对于音频的播放速度其实是根据采样率定义的(音频的采样率==视频的帧率),在初始化的时候SDL播放器就</div> </li> <li><a href="/article/1899588126679035904.htm" title="【FFmpeg】AVpacket中解析出Nalu" target="_blank">【FFmpeg】AVpacket中解析出Nalu</a> <span class="text-muted">gma999</span> <a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>概述项目中遇到的一个难题,即需要从RTSP流地址中解析出来Nalu,然后对Nalu进行封包发送到GB28181平台。本文仅仅总结如何利用FFmpeg库中的函数通过AVpacket解析出来Nalu的可行性以及方法。如果是非嵌入式设备,也可以自己搭建一个小型RTSP服务器来实现,其中各种功能也可以自行控制,后面文章再进行总结源码分析可行性分析FFmpeg库中没有找到直接解析出来的Nalu的方法,如果无</div> </li> <li><a href="/article/1899390361990656000.htm" title="ffplay 使用文档介绍" target="_blank">ffplay 使用文档介绍</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/ffplay/1.htm">ffplay</a><a class="tag" taget="_blank" href="/search/%E6%92%AD%E6%94%BE%E5%99%A8/1.htm">播放器</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/%E7%9B%B4%E6%92%AD/1.htm">直播</a><a class="tag" taget="_blank" href="/search/%E8%BD%AC%E7%A0%81/1.htm">转码</a> <div>ffplayffplay是一个简单的媒体播放器,它是FFmpeg项目的一部分。FFmpeg是一个广泛使用的多媒体框架,能够解码、编码、转码、复用、解复用、流化、过滤和播放几乎所有类型的媒体文件。ffplay主要用于测试和调试,因为它提供了一个命令行界面,可以方便地查看媒体文件的详细信息,如视频帧、音频波形等。它支持多种视频和音频格式,并且可以实时显示解码过程中的统计信息。使用文档原文地址:http</div> </li> <li><a href="/article/1899384433081905152.htm" title="opencv借助ffmpeg读取sdp文件进行rtp拉流 20231019" target="_blank">opencv借助ffmpeg读取sdp文件进行rtp拉流 20231019</a> <span class="text-muted">诗筱涵</span> <a class="tag" taget="_blank" href="/search/rtsp/1.htm">rtsp</a><a class="tag" taget="_blank" href="/search/%E7%94%A8%E7%AE%80%E5%8D%95%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0%E5%8A%9F%E8%83%BD/1.htm">用简单代码实现功能</a><a class="tag" taget="_blank" href="/search/OpenCV/1.htm">OpenCV</a><a class="tag" taget="_blank" href="/search/rtp/1.htm">rtp</a> <div>20231019ffmpeg装起来很快编译命令g++rtp_ffmpeg_test.cpp-ooutput$(pkg-config--libsopencv4)代码如下#include#include#include#includeusingnamespacestd;usingnamespacecv;intmain(intargc,char**argv){cout>frame;if(frame.em</div> </li> <li><a href="/article/1899373704400400384.htm" title="SOPHON SDK解码视频流的常见调试方法" target="_blank">SOPHON SDK解码视频流的常见调试方法</a> <span class="text-muted">算能开发者社区</span> <a class="tag" taget="_blank" href="/search/SOPHON/1.htm">SOPHON</a><a class="tag" taget="_blank" href="/search/SDK%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98/1.htm">SDK常见问题</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>SOPHONSDK解码视频流的常见调试方法1.rtsp连接测试2.判断rtsp是否正常工作3.确认解码器是否能正常工作:(url为文件名或者rtsp连接地址)4.确认解码器和vpp的OpenCV接口是否正常工作5.解码不正确或者无法解码的最终调试手段1.rtsp连接测试ffmpeg-rtsp_transporttcp-iurl-frawvideo-y/dev/null或者ffmpeg-rtsp_t</div> </li> <li><a href="/article/1899298678879875072.htm" title="视频生成缩略图" target="_blank">视频生成缩略图</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>视频生成缩略图最近有个需求,视频上传之后在列表和详情页需要展示缩略图使用ffmpeg首先引入jar包org.bytedecojavacpp1.4.3org.bytedecojavacv1.4.3org.bytedeco.javacpp-presetsffmpeg-platform4.0.2-1.4.3代码如下publicStringgetThumbnails(StringvideoFilePath</div> </li> <li><a href="/article/1899298677621583872.htm" title="xuggle操作视频" target="_blank">xuggle操作视频</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>xuggle操作视频有个需求是要读取视频的宽高,找到了Xuggle和FFmpeg两种方式,FFmpeg很强大,但是我并不需要那些功能,所以使用了轻量一点的Xuggle引入依赖xugglexuggle-xuggler5.4可能maven仓库中没有该依赖,可以下载后放到本地仓库或私服xuggle-xuggler-5.4.jar或者可以使用org.boofcvxuggler0.23该依赖中包含有xugg</div> </li> <li><a href="/article/1899073201502220288.htm" title="使用jcodec库,访问网络视频提取封面图片上传至oss" target="_blank">使用jcodec库,访问网络视频提取封面图片上传至oss</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/%E4%BC%A0%E5%AA%92/1.htm">传媒</a> <div>注释部分为FFmpeg(确实方便但依赖太大,不想用)packagecom.zuodou.upload;importcom.aliyun.oss.OSS;importcom.aliyun.oss.model.ObjectMetadata;importcom.aliyun.oss.model.PutObjectRequest;importcom.zuodou.oss.OssProperties;//i</div> </li> <li><a href="/article/1898739190930141184.htm" title="FFplay 7.0 文档" target="_blank">FFplay 7.0 文档</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/7.0%E6%96%87%E6%A1%A3/1.htm">7.0文档</a><a class="tag" taget="_blank" href="/search/ffplay/1.htm">ffplay</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a> <div>ffplay文档1.概要ffplay[options][input_url]2.描述FFplay是一个非常简单且可移植的媒体播放器,使用FFmpeg库和SDL库。它主要用作各种FFmpegAPI的测试平台。3.选项如果没有特别说明,所有数值选项都接受一个表示数字的字符串作为输入,该字符串可以后跟SI单位前缀之一,例如:‘K’、‘M’或‘G’。如果在SI单位前缀后附加‘i’,则整个前缀将被解释为二进</div> </li> <li><a href="/article/1898656074140020736.htm" title="H5之webcoekt播放JPEG图片流" target="_blank">H5之webcoekt播放JPEG图片流</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E8%A7%86%E9%A2%91%E5%A4%84%E7%90%86html5/1.htm">视频处理html5</a> <div>一、简介既然webcoekt是基于tcp连接的,理论上讲所有的浏览器是可以私有协议处理二进制的,如果我们需要播放视频,我们可以将视频数据在后端解码后直接将图片推送到webcoekt前端,然后前端通过websocket接收图片然后将图片显示到img或canvas中即可,当然这个是我自己设想的,也是应该可以做的到了,做到如下需要以下技术支持:后端直接ffmpeg转码为jpeg图片流后端定制播放协议包括</div> </li> <li><a href="/article/1898521581097906176.htm" title="常见开源许可证" target="_blank">常见开源许可证</a> <span class="text-muted">WwwwwH_PLUS</span> <a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Software/1.htm">Software</a><a class="tag" taget="_blank" href="/search/Engineering/1.htm">Engineering</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a> <div>常见开源许可证许可证允许商业使用是否必须开源适用场景MIT✅是❌否最宽松,适合开源库(如OCCT相关项目)GPL✅是✅必须强制开源,适合Linux、GNU项目LGPL✅是☑️仅限修改核心部分适用于动态库(如Qt、FFmpeg)Apache2.0✅是❌否允许专利权,适合企业(如Google)BSD3-Clause✅是❌否类似MIT,但限制广告使用</div> </li> <li><a href="/article/1898174152729227264.htm" title="OSG开发笔记(三十二):深入理解相机视口、制作支持与主视图同步变换旋转的相机HUD" target="_blank">OSG开发笔记(三十二):深入理解相机视口、制作支持与主视图同步变换旋转的相机HUD</a> <span class="text-muted">长沙红胖子Qt(技术Q群4597637)</span> <a class="tag" taget="_blank" href="/search/Qt%E5%BC%80%E5%8F%91/1.htm">Qt开发</a><a class="tag" taget="_blank" href="/search/OSG%E4%B8%89%E7%BB%B4%E5%BC%80%E5%8F%91/1.htm">OSG三维开发</a><a class="tag" taget="_blank" href="/search/Qt/1.htm">Qt</a><a class="tag" taget="_blank" href="/search/OSG/1.htm">OSG</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E7%BB%B4%E5%BC%80%E5%8F%91/1.htm">三维开发</a><a class="tag" taget="_blank" href="/search/HUD%E7%9B%B8%E6%9C%BA/1.htm">HUD相机</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E6%99%AFHUD%E6%97%8B%E8%BD%AC%E5%9D%90%E6%A0%87/1.htm">前景HUD旋转坐标</a> <div>若该文为原创文章,未经允许不得转载本文章博客地址:https://blog.csdn.net/qq21497936/article/details/143852695各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更</div> </li> <li><a href="/article/106.htm" title="书其实只有三类" target="_blank">书其实只有三类</a> <span class="text-muted">西蜀石兰</span> <a class="tag" taget="_blank" href="/search/%E7%B1%BB/1.htm">类</a> <div>一个人一辈子其实只读三种书,知识类、技能类、修心类。 知识类的书可以让我们活得更明白。类似十万个为什么这种书籍,我一直不太乐意去读,因为单纯的知识是没法做事的,就像知道地球转速是多少一样(我肯定不知道),这种所谓的知识,除非用到,普通人掌握了完全是一种负担,维基百科能找到的东西,为什么去记忆? 知识类的书,每个方面都涉及些,让自己显得不那么没文化,仅此而已。社会认为的学识渊博,肯定不是站在</div> </li> <li><a href="/article/233.htm" title="《TCP/IP 详解,卷1:协议》学习笔记、吐槽及其他" target="_blank">《TCP/IP 详解,卷1:协议》学习笔记、吐槽及其他</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/tcp/1.htm">tcp</a> <div>《TCP/IP 详解,卷1:协议》是经典,但不适合初学者。它更像是一本字典,适合学过网络的人温习和查阅一些记不清的概念。 这本书,我看的版本是机械工业出版社、范建华等译的。这本书在我看来,翻译得一般,甚至有明显的错误。如果英文熟练,看原版更好: http://pcvr.nl/tcpip/ 下面是我的一些笔记,包括我看书时有疑问的地方,也有对该书的吐槽,有不对的地方请指正: 1.</div> </li> <li><a href="/article/360.htm" title="Linux—— 静态IP跟动态IP设置" target="_blank">Linux—— 静态IP跟动态IP设置</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/IP/1.htm">IP</a> <div>一.在终端输入 vi /etc/sysconfig/network-scripts/ifcfg-eth0 静态ip模板如下: DEVICE="eth0" #网卡名称 BOOTPROTO="static" #静态IP(必须) HWADDR="00:0C:29:B5:65:CA" #网卡mac地址 IPV6INIT=&q</div> </li> <li><a href="/article/487.htm" title="Informatica update strategy transformation" target="_blank">Informatica update strategy transformation</a> <span class="text-muted">18289753290</span> <div>更新策略组件: 标记你的数据进入target里面做什么操作,一般会和lookup配合使用,有时候用0,1,1代表 forward  rejected rows被选中,rejected row是输出在错误文件里,不想看到reject输出,将错误输出到文件,因为有时候数据库原因导致某些column不能update,reject就会output到错误文件里面供查看,在workflow的</div> </li> <li><a href="/article/614.htm" title="使用Scrapy时出现虽然队列里有很多Request但是却不下载,造成假死状态" target="_blank">使用Scrapy时出现虽然队列里有很多Request但是却不下载,造成假死状态</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/request/1.htm">request</a> <div>现象就是: 程序运行一段时间,可能是几十分钟或者几个小时,然后后台日志里面就不出现下载页面的信息,一直显示上一分钟抓取了0个网页的信息。 刚开始已经猜到是某些下载线程没有正常执行回调方法引起程序一直以为线程还未下载完成,但是水平有限研究源码未果。 经过不停的google终于发现一个有价值的信息,是给twisted提出的一个bugfix 连接地址如下http://twistedmatrix.</div> </li> <li><a href="/article/741.htm" title="利用预测分析技术来进行辅助医疗" target="_blank">利用预测分析技术来进行辅助医疗</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/%E5%8C%BB%E7%96%97/1.htm">医疗</a> <div>2014年,克利夫兰诊所(Cleveland Clinic)想要更有效地控制其手术中心做膝关节置换手术的费用。整个系统每年大约进行2600例此类手术,所以,即使降低很少一部分成本,都可以为诊 所和病人节约大量的资金。为了找到适合的解决方案,供应商将视野投向了预测分析技术和工具,但其分析团队还必须花时间向医生解释基于数据的治疗方案意味着 什么。  克利夫兰诊所负责企业信息管理和分析的医疗</div> </li> <li><a href="/article/868.htm" title="java 线程(一):基础篇" target="_blank">java 线程(一):基础篇</a> <span class="text-muted">DavidIsOK</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a> <div>                                                        &nbs</div> </li> <li><a href="/article/995.htm" title="Tomcat服务器框架之Servlet开发分析" target="_blank">Tomcat服务器框架之Servlet开发分析</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>最近使用Tomcat做web服务器,使用Servlet技术做开发时,对Tomcat的框架的简易分析: 疑问: 为什么我们在继承HttpServlet类之后,覆盖doGet(HttpServletRequest req, HttpServetResponse rep)方法后,该方法会自动被Tomcat服务器调用,doGet方法的参数有谁传递过来?怎样传递? 分析之我见: doGet方法的</div> </li> <li><a href="/article/1122.htm" title="揭秘玖富的粉丝营销之谜 与小米粉丝社区类似" target="_blank">揭秘玖富的粉丝营销之谜 与小米粉丝社区类似</a> <span class="text-muted">aoyouzi</span> <a class="tag" taget="_blank" href="/search/%E6%8F%AD%E7%A7%98%E7%8E%96%E5%AF%8C%E7%9A%84%E7%B2%89%E4%B8%9D%E8%90%A5%E9%94%80%E4%B9%8B%E8%B0%9C/1.htm">揭秘玖富的粉丝营销之谜</a> <div>玖富旗下悟空理财凭借着一个微信公众号上线当天成交量即破百万,第七天成交量单日破了1000万;第23天时,累计成交量超1个亿……至今成立不到10个月,粉丝已经超过500万,月交易额突破10亿,而玖富平台目前的总用户数也已经超过了1800万,位居P2P平台第一位。很多互联网金融创业者慕名前来学习效仿,但是却鲜有成功者,玖富的粉丝营销对外至今仍然是个谜。     近日,一直坚持微信粉丝营销</div> </li> <li><a href="/article/1249.htm" title="Java web的会话跟踪技术" target="_blank">Java web的会话跟踪技术</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/url%E4%BC%9A%E8%AF%9D/1.htm">url会话</a><a class="tag" taget="_blank" href="/search/Cookie%E4%BC%9A%E8%AF%9D/1.htm">Cookie会话</a><a class="tag" taget="_blank" href="/search/Seession%E4%BC%9A%E8%AF%9D/1.htm">Seession会话</a><a class="tag" taget="_blank" href="/search/Java+Web/1.htm">Java Web</a><a class="tag" taget="_blank" href="/search/%E9%9A%90%E8%97%8F%E5%9F%9F%E4%BC%9A%E8%AF%9D/1.htm">隐藏域会话</a> <div>会话跟踪主要是用在用户页面点击不同的页面时,需要用到的技术点   会话:多次请求与响应的过程     1,url地址传递参数,实现页面跟踪技术          格式:传一个参数的 url?名=值     传两个参数的 url?名=值 &名=值   关键代码</div> </li> <li><a href="/article/1376.htm" title="web.xml之Servlet配置" target="_blank">web.xml之Servlet配置</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/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/Servlet%E9%85%8D%E7%BD%AE/1.htm">Servlet配置</a> <div>定义: <servlet> <servlet-name>myservlet</servlet-name> <servlet-class>com.myapp.controller.MyFirstServlet</servlet-class> <init-param> <param-name></div> </li> <li><a href="/article/1503.htm" title="利用svnsync实现SVN同步备份" target="_blank">利用svnsync实现SVN同步备份</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E6%AD%A5/1.htm">同步</a><a class="tag" taget="_blank" href="/search/E000022/1.htm">E000022</a><a class="tag" taget="_blank" href="/search/svnsync/1.htm">svnsync</a><a class="tag" taget="_blank" href="/search/%E9%95%9C%E5%83%8F/1.htm">镜像</a> <div>1. 在备份SVN服务器上建立版本库    svnadmin create test 2. 创建pre-revprop-change文件     cd test/hooks/     cp pre-revprop-change.tmpl pre-revprop-change 3. 修改pre-revprop-</div> </li> <li><a href="/article/1630.htm" title="【分布式数据一致性三】MongoDB读写一致性" target="_blank">【分布式数据一致性三】MongoDB读写一致性</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>本系列文章结合MongoDB,探讨分布式数据库的数据一致性,这个系列文章包括: 数据一致性概述与CAP 最终一致性(Eventually Consistency) 网络分裂(Network Partition)问题 多数据中心(Multi Data Center) 多个写者(Multi Writer)最终一致性 一致性图表(Consistency Chart) 数据</div> </li> <li><a href="/article/1757.htm" title="Anychart图表组件-Flash图转IMG普通图的方法" target="_blank">Anychart图表组件-Flash图转IMG普通图的方法</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/Flash/1.htm">Flash</a> <div>问题背景:项目使用的是Anychart图表组件,渲染出来的图是Flash的,往往一个页面有时候会有多个flash图,而需求是让我们做一个打印预览和打印功能,让多个Flash图在一个页面上打印出来。   那么我们打印预览的思路是获取页面的body元素,然后在打印预览界面通过$("body").append(html)的形式显示预览效果,结果让人大跌眼镜:Flash是</div> </li> <li><a href="/article/1884.htm" title="Window 80端口被占用 WHY?" target="_blank">Window 80端口被占用 WHY?</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/%E7%AB%AF%E5%8F%A3%E5%8D%A0%E7%94%A8/1.htm">端口占用</a><a class="tag" taget="_blank" href="/search/window/1.htm">window</a> <div>平时在启动一些可能使用80端口软件的时候,会提示80端口已经被其他软件占用,那一般又会有那些软件占用这些端口呢?    下面坐下总结:         1、web服务器是最经常见的占用80端口的,例如:tomcat , apache  , IIS , Php等等;         2</div> </li> <li><a href="/article/2011.htm" title="编程之美-数组的最大值和最小值-分治法(两种形式)" target="_blank">编程之美-数组的最大值和最小值-分治法(两种形式)</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.Arrays; public class MinMaxInArray { /** * 编程之美 数组的最大值和最小值 分治法 * 两种形式 */ public static void main(String[] args) { int[] t={11,23,34,4,6,7,8,1,2,23}; int[] </div> </li> <li><a href="/article/2138.htm" title="Perl正则表达式" target="_blank">Perl正则表达式</a> <span class="text-muted">chenbowen00</span> <a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/perl/1.htm">perl</a> <div>首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是: 匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m) 替换:s/<pattern>;/<replacement>;/ 转化:tr/<pattern>;/<replacemnt>;</div> </li> <li><a href="/article/2265.htm" title="[宇宙与天文]行星议会是否具有本行星大气层以外的权力呢?" target="_blank">[宇宙与天文]行星议会是否具有本行星大气层以外的权力呢?</a> <span class="text-muted">comsci</span> <div>       举个例子: 地球,地球上由200多个国家选举出一个代表地球联合体的议会,那么现在地球联合体遇到一个问题,地球这颗星球上面的矿产资源快要采掘完了....那么地球议会全体投票,一致通过一项带有法律性质的议案,既批准地球上的国家用各种技术手段在地球以外开采矿产资源和其它资源........    &</div> </li> <li><a href="/article/2392.htm" title="Oracle Profile 使用详解" target="_blank">Oracle Profile 使用详解</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/profile/1.htm">profile</a><a class="tag" taget="_blank" href="/search/%E8%B5%84%E6%BA%90%E9%99%90%E5%88%B6/1.htm">资源限制</a> <div>Oracle Profile 使用详解 转 一、目的: Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。 二、条件: 创建profile必须要有CREATE PROFIL</div> </li> <li><a href="/article/2519.htm" title="How HipChat Stores And Indexes Billions Of Messages Using ElasticSearch & Redis" target="_blank">How HipChat Stores And Indexes Billions Of Messages Using ElasticSearch & Redis</a> <span class="text-muted">dengkane</span> <a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/Lucene/1.htm">Lucene</a> <div>This article is from an interview with Zuhaib Siddique, a production engineer at HipChat, makers of group chat and IM for teams. HipChat started in an unusual space, one you might not </div> </li> <li><a href="/article/2646.htm" title="循环小示例,菲波拉契序列,循环解一元二次方程以及switch示例程序" target="_blank">循环小示例,菲波拉契序列,循环解一元二次方程以及switch示例程序</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div># include <stdio.h> int main(void) { int n; int i; int f1, f2, f3; f1 = 1; f2 = 1; printf("请输入您需要求的想的序列:"); scanf("%d", &n); for (i=3; i<n; i</div> </li> <li><a href="/article/2773.htm" title="macbook的lamp环境" target="_blank">macbook的lamp环境</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/lamp/1.htm">lamp</a> <div>  sudo vim /etc/apache2/httpd.conf   /Library/WebServer/Documents 是默认的网站根目录   重启Mac上的Apache服务   这个命令很早以前就查过了,但是每次使用的时候还是要在网上查: 停止服务:sudo /usr/sbin/apachectl stop 开启服务:s</div> </li> <li><a href="/article/2900.htm" title="java ArrayList源码 下" target="_blank">java ArrayList源码 下</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/ArrayList%E6%BA%90%E7%A0%81/1.htm">ArrayList源码</a> <div>版本 jdk-7u71-windows-x64   JavaSE7 ArrayList源码上:http://flyouwith.iteye.com/blog/2166890     /** * 从这个列表中移除所有c中包含元素 */ public boolean removeAll(Collection<?> c) {</div> </li> <li><a href="/article/3027.htm" title="Spring Security(08)——intercept-url配置" target="_blank">Spring Security(08)——intercept-url配置</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/intercept-url/1.htm">intercept-url</a><a class="tag" taget="_blank" href="/search/%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90/1.htm">访问权限</a><a class="tag" taget="_blank" href="/search/%E8%AE%BF%E9%97%AE%E5%8D%8F%E8%AE%AE/1.htm">访问协议</a><a class="tag" taget="_blank" href="/search/%E8%AF%B7%E6%B1%82%E6%96%B9%E6%B3%95/1.htm">请求方法</a> <div>intercept-url配置 目录 1.1     指定拦截的url 1.2     指定访问权限 1.3     指定访问协议 1.4     指定请求方法   1.1   &n</div> </li> <li><a href="/article/3154.htm" title="Linux环境下的oracle安装" target="_blank">Linux环境下的oracle安装</a> <span class="text-muted">jayung</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>linux系统下的oracle安装 本文档是Linux(redhat6.x、centos6.x、redhat7.x) 64位操作系统安装Oracle 11g(Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production),本文基于各种网络资料精心整理而成,共享给有需要的朋友。如有问题可联系:QQ:52-7</div> </li> <li><a href="/article/3281.htm" title="hotspot虚拟机" target="_blank">hotspot虚拟机</a> <span class="text-muted">leichenlei</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/HotSpot/1.htm">HotSpot</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%A1%A3/1.htm">文档</a> <div>JVM参数  http://docs.oracle.com/javase/6/docs/technotes/guides/vm/index.html   JVM工具 http://docs.oracle.com/javase/6/docs/technotes/tools/index.html   JVM垃圾回收 http://www.oracle.com</div> </li> <li><a href="/article/3408.htm" title="读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活”" target="_blank">读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活”</a> <span class="text-muted">noaighost</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活” 眼里的Node.JS 初初接触node是一年前的事,那时候年少不更事。还在纠结什么语言可以编写出牛逼的程序,想必每个码农都会经历这个月经性的问题:微信用什么语言写的?facebook为什么推荐系统这么智能,用什么语言写的?dota2的外挂这么牛逼,用什么语言写的?……用什么语言写这句话,困扰人也是阻碍</div> </li> <li><a href="/article/3535.htm" title="快速开发Android应用" target="_blank">快速开发Android应用</a> <span class="text-muted">rensanning</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>Android应用开发过程中,经常会遇到很多常见的类似问题,解决这些问题需要花时间,其实很多问题已经有了成熟的解决方案,比如很多第三方的开源lib,参考 Android Libraries 和 Android UI/UX Libraries。 编码越少,Bug越少,效率自然会高。 但可能由于 根本没听说过、听说过但没用过、特殊原因不能用、自己已经有了解决方案等等原因,这些成熟的解决</div> </li> <li><a href="/article/3662.htm" title="理解Java中的弱引用" target="_blank">理解Java中的弱引用</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div> 不久之前,我 面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,“嗯,是不是垃圾回收有关的?”,我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述。   然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经验和高学历背景的应聘者中,居然只有两个人知道弱引用的存在,但是在这两个人之中只有一个人真正了</div> </li> <li><a href="/article/3789.htm" title="关于<c:out value=""/>标签输出html标签" target="_blank">关于<c:out value=""/>标签输出html标签</a> <span class="text-muted">xshdch</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a> <div>http://back-888888.iteye.com/blog/1181202 关于<c:out value=""/>标签的使用,其中有一个属性是escapeXml默认是true(将html标签当做转移字符,直接显示不在浏览器上面进行解析),当设置escapeXml属性值为false的时候就是不过滤xml,这样就能在浏览器上解析html标签, &nb</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>