最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

iPhone直播流技术

IT圈 admin 59浏览 0评论

2024年2月6日发(作者:闳哲圣)

第I页

iPhone直播流技术

关键词:编码器 流转发 分段 流媒体

摘要:

随着通信业务的迅速发展,高端手机频繁推出。手机看电视被越来越多的人接受,手机电视(Mobile TV),就是利用具有操作系统和流媒体视频功能的智能手机以及现在支持HTTP或者RTSP的非智能机子都能观看电视的业务。现在主流手机以iPhone的ios操作系统,和支持Andriod系统的智能机为主。本文主要讨论iPhone手机进行直播过程,直播流的相关技术。

手机电视直播技术,即将电视直播信号接到编码设备,通过编码设备将直播频道的信号进行音视频编码,编码后的格式可以支持各手机适配的解码环境。并且通过编码设备将原有的SDI信号进行IP封装,使其可以再互联网中进行传输。遵照TCP、IP协议在互联网中对信号进行处理。并最终传递到流媒体服务器,通过流媒体服务器发布到互联网上,终端手机等设备通过链接流媒体地址进行直播流的播放。

第II页

目录

第一章 绪论 .................................................................................................................................... 1

1.1 iphone直播流技术概述 .................................................................................................... 1

1.2 HTTP live streaming架构 .................................................................................................... 1

第二章 服务器组件......................................................................................................................... 3

2.1 直播频道信号源接入 ........................................................................................................ 3

2.2 iPhone直播编码技术参数:............................................................................................. 4

2.3 iPhone输出设置 ................................................................................................................ 4

第三章 媒体流分段器 ..................................................................................................................... 5

3.1 播放列表文件 .................................................................................................................... 5

3.1.1标签介绍 .................................................................................................................. 6

3.1.2 实例......................................................................................................................... 7

3.2文件分段器 ......................................................................................................................... 8

第四章 分发组件............................................................................................................................. 9

4.1 Apache发布服务器设置 .................................................................................................... 9

4.1.1 安装Apache ........................................................................................................... 9

4.1.2 配置Apache ......................................................................................................... 10

第五章 客户端 .............................................................................................................................. 12

第六章 应用实际环境搭建 ........................................................................................................... 13

6.1 http live streaming结构 ................................................................................................... 13

6.2 服务器协同工作具体配置 .............................................................................................. 13

6.2.1 具体编码参数设置如下: ................................................................................... 14

6.2.2 Apache 发布服务器系统定制: .......................................................................... 14

6.2.3 直播数据流的接收 ............................................................................................... 17

参考文献 ........................................................................................................................................ 19

第1页

第一章 绪论

1.1 iphone直播流技术概述

手机电视直播,是三万融合的一个方面,现在已被大多数使用。手机电视直播技术也逐渐成熟起来。由于iPhone操作系统的独特性,iPhone手机直播技术异于其他系统。具有独特的一些技术流程。本文主要讨论一下iPhone直播过程中的一些相关技术实现过程。

目前较为常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西。HTTP它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流。

我们可以看看 HTTP Live Streaming 是怎么样工作的。平时的直播技术中,播放模式中必须等待整个文件下载完才行,在 HLS 技术中 Web 服务器向客户端提供接近实时的音视频流。但在使用的过程中是使用的标准的 HTTP 协议,所以这时,只要使用 HLS 的技术,就能在普通的 HTTP 的应用上直接提供点播和直播。

HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

1.2 HTTP live streaming架构

HTTP Live媒体流由三部分组成:服务器组件,分发组件和客户端。

第2页

服务器组件:负责将输入的媒体流进行数字编码,并且以适合发布的格式进行封装,然后准备发布。

分发组件:由标准的Web服务器组成,负责接受客户端的请求并将准备好的媒体内容和相关资源发送到客户端。对于大规模部署,Edge网络或者其他内容分发网络可能会被使用。

客户端:负责请求合适的媒体内容,下载媒体资源,并将媒体内容重新组装,以连续的媒体流形式展现给用户。在iOS 3.0及以后版本的设备,安装了QuickTime X及以后版本的桌面计算机中已经内置了客户端。

在一个典型的配置中,硬件编码器接受音频–视频输入,并使用MPEG-4编码,输出MPEG-2 TS流,然后被分段软件划分为一系列简短的时间段并保存为媒体文件。这些媒体文件部署在Web服务器上。分段软件同时还创建并维护包含这些媒体文件引用的索引文件。索引文件的URL在Web服务器上发布。客户端读取索引文件,然后按顺序向服务器请求媒体文件并无停顿的显示它们。

一个简单的HTTP Live媒体流配置示例如图1-1所示。

图 1-1 基本配置

上图中详细表述了实现http live streaming功能所需要的步骤。

视频采集 ->编码器 -> 流分割 -> 普通 web 服务(索引文件和视频文件)

-> 客户端

第3页

内容准备的过程大约二种,一是视频采集,编码器首先将摄像机实时采集的音视频数据压缩编码为符合特定标准的音视频基本流,也可以拿编码完了的文件,有一点必须保证,就是一定要使用H.264视频和AAC音频,因为发明这个的是苹果公司,只支持这个。然后给这些封装成成为符合MPEG-2(MPEG 2 TS、MPEG2 PS之所以使用这个,主要是因为声音和视频会交织在一起,也会有关键帧来让视频可以直接播放).

流分割部分在这个中,比起 RTSP 之类和普通点播的最大不同,就是他会给

MPEG-2 分割成很多个 ts 的文件。分割过程大多是按时间来切,根据国外的资料,建议切 10s 一个的文件,如果码流高可以 5 秒一次。在分割还有一点不同,就是这时流分割器会生成一个含有指向这些小TS文件指针的索引文件

所以这个文件也必须在 web 服务器上,不能少。每多 10s 时,就会多一个 ts 文件,所以索引也会根着修改成最新的几段视频。

最后,这些切分了的小的一系列的 ts 文件,放到普通的 web 服务器中就行了。这时在 CDN 中也是一样,因为请求这些文件会使用标准的 HTTP 协议。索引文件后缀是.m3u8 ,索引文件采用扩展的M3U播放列表格式,其实就一文本。

第二章 服务器组件

服务器要求一个媒体编码器,这可以是现有的硬件,然后还需要一个将编码好的媒体内容分段并保存成文件的方法,这可以是软件如Apple提供的媒体流分段器。

媒体编码器

媒体编码器从音频视频设备接收实时信息,进行编码和封装。编码应该是客户端设备支持的编码集合之一,例如视频的H.264和音频的HE-AAC。目前,支持的发布格式是音频和视频的MPEG-2 TS流,或者只有音频的MPEG基本流。

编码器在本地网络上将MPEG-2 TS流发布到媒体流分段器。

2.1 直播频道信号源接入

iPhone的信号来源可以由很多种方式,主要概括一下几个方面:

第4页

视频源输入可以是SDI、AV、ASI MPEG2、IP MPEG 2、IP H.264等。IP方式输入不需要采集卡,其它方式输入需要采集卡;

编码设备一般有两种实现方式:

1)通用服务器+采集卡+编码/转码软件+iPhone封包+流推送软件;

2)专用编码器(内置采集卡+编码/转码软件+ iPhone +流推送软件);

2.2 iPhone直播编码技术参数:

1)视频:Extreme H.264 Baseline编码(CBR),音频MPEG-2-AAC

2)总码率(视频码率+音频码率):384Kbps

3)视频码率: 352Kbps

4)音频码率: 32Kbps(单声道)

5)声道:立体声或混合声

6)视频宽:320

7)视频高:240

8)视频帧率:25帧每秒

9)视频宽高比: 4:3

10)象素宽高比: 1:1

11)音频采样率(Hz):不低于22000

2.3 iPhone输出设置

-2 TS格式UDP协议组播输出到网络中,供转发服务器以及监看服务器可以随时拉流使用。广联目前采取这种方式。

2.也可以直接采用iPhone协议 HTTP Live Streaming 方式输出到发布服务器中。这种方式减少中间环节,但是对于发布服务器的压力比较大,而且对于流监看环节的实施比较困难。对于直播频道数量比较少的网络,这种方式还是比较适用的。

第5页

第三章 媒体流分段器

媒体流分段器通常是一个软件,从本地网络读入TS流并将它分成一系列相等时间的媒体文件。即使每段都是一个单独的文件,从连续媒体流中生成的视频文件仍然可以被无缝的重构。

分段器同时会创建一个包含各媒体文件引用的索引文件。每当分段器完成一个新的媒体文件,索引文件就会被更新。索引文件被用来确认媒体文件的可用性和位置。分段器也可以加密每个媒体段并创建一个密钥文件。

媒体分段被保存为.ts文件(MPEG-2媒体流),索引文件被保存为.M3U8文件,这是保存MP3播放列表的.m3u格式的一种扩展。

3.1 播放列表文件

播放列表必须被扩展自M3U 播放列表文件[M3U]。本文件通过定义的其他标记,来扩展M3U 文件格式。

一个M3U 播放列表是一个文本文件,由单独的行组成。行是被一个LF 字符或被一个LF 字符跟随的一个CR字符来终止。每行是一个URI,一片空白,或被注释字符'#'开始。URI标识被播放的媒体文件。空白行会被忽略。

注释字符'#'开始的行是评论或标签。 标签是带‘#EXT’开始的。其他所有以'#'开始的行都是注释,应该被忽略。

扩展的M3U 文件格式定义了两个标签:EXTM3U 和EXTIN F。一个扩展的M3U

文件是通过第一行来区别于一个基本的M3U 文件的,这行必须 #EXTM3U。

EXTINF 是一个记录的标记,它描述了通过如下的URI 标识的媒体文件。每个媒体文件的URI必须由一个EXTINF 标记开始。它的格式是:

#EXTINF: </p><p style="text-indent: 2em;";>“时间”是一个整数,它指定的媒体文件的时间,以秒计。持续时间应该是四舍五入到最接近的整数。逗号后,该行的其余部分是媒体文件的标题。 </p><p style="text-indent: 2em;";>第6页 </p><p style="text-indent: 2em;";>3.1.1标签介绍 </p><p style="text-indent: 2em;";>这个文档定义了7个新的标签:EXT-X-TARGETDURATION,EXT-X-MEDIA-SEQUENCE,EXT-X-KEY,EXT-X-PROGRAM-DATE-TIME,EXT-X-ALLOW-CACHE,EXT-X-STREAM-INF,和EXT-X ENDLIST。 </p><p style="text-indent: 2em;";>-X-TARGETDURATION </p><p style="text-indent: 2em;";>EXT-X-TARGETDURATION 标签表示将被添加到主演示的下一个媒体文件的大致时间。它必须出现在播放列表文件中。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-TARGETDURATION:<seconds> </p><p style="text-indent: 2em;";>媒体文件的实际时间可能会略有不同目标时间。 </p><p style="text-indent: 2em;";>2.EXT-X-MEDIA-SEQUENCE </p><p style="text-indent: 2em;";>在播放列表中的每个媒体文件的URI 有一个独特的序列号。 一个URI 的序列号是等同于前面的URI 序列号加一。EXT-X-MEDIA-SQUENCE 标签指示了在一个播放列表中出现的第一个URI 的序列号。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-MEDIA-SQUENCE:<number> </p><p style="text-indent: 2em;";>如果该播放列表文件中不包含一个EXT-X-MEDIA-SQUENCE 标签,那么在播放列表中的第一个URI 的序列号应被认为是1。 </p><p style="text-indent: 2em;";>3. EXT-X-KEY </p><p style="text-indent: 2em;";>媒体文件可能被加密(encrypt)。EXT-X-KEY 标记提供必要的信息来解密(decrypt)它后面的媒体文件。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-KEY:METHOD=<method> [,URI ="<URI>"] </p><p style="text-indent: 2em;";>该METHOD 参数指定的加密方法。URI 参数,如果存在,指定如何获取key。 </p><p style="text-indent: 2em;";>一个新的EXT-X-KEY 取代任何先前的EXT-X-KEY。 </p><p style="text-indent: 2em;";>如果没有EXT-X-KEY 标记,那么媒体文件是不加密的。 </p><p style="text-indent: 2em;";>对于键(key)文件的格式,看第5节,同时第5.1节,第6.1.2节和第6.2.5节有关于媒体文件加密的其他信息。 </p><p style="text-indent: 2em;";>4.EXT-X-PROGRAM-DATE-TIME </p><p style="text-indent: 2em;";>EXT-X-PROGRAM-DATE-TIME 标记用一个决定的日期和/或时间指示了下一个媒体文件的开始。日期/时间表示是ISO/IEC 8601:2004 [ISO_8601]。例如: </p><p style="text-indent: 2em;";>#EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ss> </p><p style="text-indent: 2em;";>第7页 </p><p style="text-indent: 2em;";>5.EXT-X-ALLOW-CACHE </p><p style="text-indent: 2em;";>EXT-X-ALLOW-CACHE 标记,指明用户端是否可以缓存下载的媒体文件以供日后重播。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-ALLOW-CACHE:<YES|NO> </p><p style="text-indent: 2em;";>6.EXT-X-ENDLIST </p><p style="text-indent: 2em;";>的EXT-X-ENDLIST 标记,表示没有更多的媒体文件将被添加到播放列表文件。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-ENDLIST </p><p style="text-indent: 2em;";>7.EXT-X-STREAM-INF </p><p style="text-indent: 2em;";>EXT-X-STREAM-INF 标记,表明在播放列表文件中的下一个URI 标识为另一个播放列表文件。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-STREAM-INF:[attribute=value] [,attribute=value]*<URI> </p><p style="text-indent: 2em;";>以下属性被定义为EXT-X-STREAM-INF 标签: </p><p style="text-indent: 2em;";>BANDWIDTH=<n> </p><p style="text-indent: 2em;";>其中n 是一个近似的流比特率的上约束,表示为比特每秒。 </p><p style="text-indent: 2em;";>PROGRAM-ID=<i> </p><p style="text-indent: 2em;";>其中i 是一个数字,唯一标识在播放列表文件的范围内的一个特定的介绍。 </p><p style="text-indent: 2em;";>一个播放列表文件可能含有带有相同的PROGRAM-ID 的多个EXT-X-STREAM-INF 的URIs 来描述同样呈现的不同流。 </p><p style="text-indent: 2em;";>注意:因为索引文件格式是.m3u格式的扩展,并且系统也支持.mp3的音频文件,所以客户端也兼容传统的MP3播放列表。 </p><p style="text-indent: 2em;";>3.1.2 实例 </p><p style="text-indent: 2em;";>下面是一个非常简单的.M3U8文件示例,该示例包含三个未加密10秒钟媒体文件: </p><p style="text-indent: 2em;";>#EXTM3U </p><p style="text-indent: 2em;";>#EXT-X-MEDIA-SEQUENCE:0 </p><p style="text-indent: 2em;";>第8页 </p><p style="text-indent: 2em;";>#EXT-X-TARGETDURATION:10 </p><p style="text-indent: 2em;";>#EXTINF:10, </p><p style="text-indent: 2em;";>/#EXTINF:10, </p><p style="text-indent: 2em;";>/#EXTINF:10, </p><p style="text-indent: 2em;";>/#EXT-X-ENDLIST </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>索引文件可能会包含密钥文件的URL和可切换的索引文件以支持不同的带宽。 </p><p style="text-indent: 2em;";>3.2文件分段器 </p><p style="text-indent: 2em;";>如果您已经有媒体文件,且该媒体文件使用了支持的编解码器编码,您可以使用文件分段器来将它封装成MPEG媒体流并划分成相等长度的时间段(如果文件已经封装在MPEG-2 TS流中,文件分段器将会略过这步)。文件分段器允许您使用利用现有的视频和音频通过HTTP Live媒体流来提供视频点播。文件分段器完成媒体流分段器同样的任务,但是是以文件而不是媒体流为输入。 </p><p style="text-indent: 2em;";>利用medianstreamsegmenter获取ts流并进行分片的设置 </p><p style="text-indent: 2em;";>首先将软件默认安装在linux的/usr/bin下。 </p><p style="text-indent: 2em;";>具体使用方法: </p><p style="text-indent: 2em;";> /usr/bin/mediastreamsegmenter -s 3 -t 5 -D -f /usr/frank/stream </p><p style="text-indent: 2em;";>127.0.0.1:8000 </p><p style="text-indent: 2em;";>判断是否成功分片:如果终端显示 : Finalized 存储路径 file </p><p style="text-indent: 2em;";>,则说明分片成功了。 </p><p style="text-indent: 2em;";>第9页 </p><p style="text-indent: 2em;";>说明: </p><p style="text-indent: 2em;";>-s 3 设定index文件中记录几个分片。 </p><p style="text-indent: 2em;";>-t 5 设定多长时间(秒)产生一个分片,默认为10秒。 </p><p style="text-indent: 2em;";>-D 删除过期的分片文件 </p><p style="text-indent: 2em;";>-f /usr/frank/stream设置存储分片文件和index文件的文件夹 </p><p style="text-indent: 2em;";>127.0.0.1:8000 设置获取ts流的地址 </p><p style="text-indent: 2em;";>第四章 分发组件 </p><p style="text-indent: 2em;";>分发系统可以是一个Web服务器或者Web缓存系统,基于HTTP协议发布媒体文件和索引文件。不需要定制的服务器模块,只需要对Web服务器进行很少的配置。 </p><p style="text-indent: 2em;";>推荐的配置通常只限于指定.M3U8文件和.ts文件的MIME类型关联。 </p><p style="text-indent: 2em;";>文件扩展名 </p><p style="text-indent: 2em;";>MIME类型 </p><p style="text-indent: 2em;";>.M3U8 </p><p style="text-indent: 2em;";>application/x-mpegURL或者L </p><p style="text-indent: 2em;";>.ts video/MP2T </p><p style="text-indent: 2em;";>调整.M3U8文件的存活时间属性(Time-to-Live)对于下载流的Web缓存机制来说可能是必须的,因为这些文件会被频繁的覆盖,每个请求下载的应该是最新版本。 </p><p style="text-indent: 2em;";>4.1 Apache发布服务器设置 </p><p style="text-indent: 2em;";>4.1.1 安装Apache </p><p style="text-indent: 2em;";>下载地址:/ </p><p style="text-indent: 2em;";>1. 安装Apache </p><p style="text-indent: 2em;";># tar zxvf </p><p style="text-indent: 2em;";>第10页 </p><p style="text-indent: 2em;";># cd httpd-2.2.11 </p><p style="text-indent: 2em;";># ./configure --prefix=/usr/local/apache --enable-so </p><p style="text-indent: 2em;";>//编译时加上加载模块参数--enable-so </p><p style="text-indent: 2em;";># make </p><p style="text-indent: 2em;";># make install </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>2. 配置系统启动时自动启动Apache服务。 </p><p style="text-indent: 2em;";># vi /etc/rc.d/ </p><p style="text-indent: 2em;";> //在上加入一行/usr/local/apache/bin/apachectl –k </p><p style="text-indent: 2em;";>start。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>4.1.2 配置Apache </p><p style="text-indent: 2em;";>1. 修改文件 </p><p style="text-indent: 2em;";># vi /usr/local/apache/conf/ </p><p style="text-indent: 2em;";>1) 设置根目录的路径 </p><p style="text-indent: 2em;";>根目录是指Apache存放配置文件和日志文件的目录,配置参数为ServerRoot,默认位于“/usr/local/apache”。命令如下: </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>2) 设置监听IP地址及端口号 </p><p style="text-indent: 2em;";>默认侦听本机所有IP地址的TCP80端口,命令如下: </p><p style="text-indent: 2em;";>Listen 80 </p><p style="text-indent: 2em;";>第11页 </p><p style="text-indent: 2em;";>用户也可以按自己的需求,使用多个Listen语句在多个地址和端口上侦听客户端请求。比如: </p><p style="text-indent: 2em;";>Listen 192.168.99.9:80 </p><p style="text-indent: 2em;";>Linsten 172.16.0.20:8080 </p><p style="text-indent: 2em;";>3) 设置系统管理员E-mail </p><p style="text-indent: 2em;";>使用ServerAdmin参数设置管理员E-mail,比如管理员的Email地址为root@: </p><p style="text-indent: 2em;";># </p><p style="text-indent: 2em;";>ServerAdmin root@ </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>4) 设置服务器主机的名称 </p><p style="text-indent: 2em;";>参数ServerName用来设置服务器的主机名称,如果没有域名则填入服务器的IP地址,比如服务器的IP地址为192.168.99.9: </p><p style="text-indent: 2em;";># </p><p style="text-indent: 2em;";>ServerName 192.168.99.9 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>5) 设置主目录的路径 </p><p style="text-indent: 2em;";>用户可以使用参数DocumentRoot配置服务器主目录默认路径,比如,主目录路径为: </p><p style="text-indent: 2em;";>DocumentRoot “/usr/local/apache/htdocs” </p><p style="text-indent: 2em;";>主路径主要用来存放分片服务器的ts分片文件以及m3u8引导文件。例如我们在htdocs目录下建立文件夹iPhone31并将分片文件以及index.m3u8文件存在31文件夹中。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>6)测试: </p><p style="text-indent: 2em;";>打开浏览器,输入地址:192.168.99.9,可以打开站点了: </p><p style="text-indent: 2em;";>第12页 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>目前为止iPhone手机直播发布服务器就已经配置完成了。 </p><p style="text-indent: 2em;";>第五章 客户端 </p><p style="text-indent: 2em;";>客户端从获取索引文件开始,并基于URL来标识一个媒体流。索引文件指定了可用媒体文件的位置,解密的密钥,以及可切换的媒体流。对于选定的媒体流,客户端按顺序下载每个可用的媒体文件。每个文件包含媒体流的一个连续的段。一旦足够的数据下载完毕,客户端开始向用户播放重新组合的媒体流。 </p><p style="text-indent: 2em;";>客户端负责获取解密密钥,验证用户,或者按需要显示用户验证和解密媒体文件的用户界面。 </p><p style="text-indent: 2em;";>这个过程将一直重复直到遇到索引文件中的#EXT-X-ENDLIST标签。如果没有遇到#EXT-X-ENDLIST 标签,则认为该索引文件是正在进行的广播的一部分,客户端会周期性的重新加载新的索引文件。客户端会在更新后的索引文件中查找新的媒体文件以及加密密钥并将这些URL加到播放列表中。 </p><p style="text-indent: 2em;";>我们现在可以通过用手机或者VLC软件进行拉流测试。通过链接地址栏输入:http://192.168.99.9:80/iPhone/31/index.m3u8则可以播放我们存在这里的直播流文件。或者利用 </p><p style="text-indent: 2em;";>在iPhone终端的safari中输入此链接也可以进行播放。 </p><p style="text-indent: 2em;";>第13页 </p><p style="text-indent: 2em;";>第六章 应用实际环境搭建 </p><p style="text-indent: 2em;";>6.1 http live streaming结构 </p><p style="text-indent: 2em;";>HTTP自适应流技术是一种能够提高在IP网络上传输流式内容的视频体检质量技术。该技术使用基于HTTP的纯Web机制,由客户端应用程序按顺序请求组成媒体流的大小文件块序列。这种方法最重要的创新是对相同的视频内容提供多码率的备份,允许客户端播放器在这些不同码率之间动态、无缝的切换。而且切换过程中不需要服务器干预,由客户端负责实现如何选择最合适的备份。目前使用HTTP自适应流技术的主要有微软公司的Smooth Streaming、苹果公司提出的HTTP Live Streaming以及Adobe公司HTTP Dynamic Streaming技术。其中Smooth </p><p style="text-indent: 2em;";>Streaming必须使用微软公司的IIS服务器,而HTTP Live Streaming只需要普通的Web服务器。HTTP Dynamic Streaming比较特殊,使用基于HTTP协议的RTMP协议,要使用专门的服务器,支持音视频格式比较多。 </p><p style="text-indent: 2em;";>Envivio编码器是可以编码适配iPhone手机的直播流,因为envivio编码器可以输出http live Streaming协议,所以envivio编码器编码出的直播流可以直接发布到发布服务器,只需要将envivio编码器的部分协议模块装载如apache服务器的配置文件中便可以与apahce发布服务器可直接实现iPhone的直播流发布。因为iphone网络接入为NET方式接入,在进行iPhone手机电视直播时候,可以采取利用wifi接入的方式。Wifi则可以接受码率较高的直播流。为了达到这一目的,我们在利用envivio编码器进行直播编码的时候,可以将同一个频道同时编码出不同码率的多路流,采用码率自适应的方式,即可适配不同网络条件下观看手机电视获得更好体验。之前已经搭建过http live streaming直播环境。Apache发布服务器采用windows的操作系统来搭建。 </p><p style="text-indent: 2em;";>6.2 服务器协同工作具体配置 </p><p style="text-indent: 2em;";>需要用到envivio编码器一台,一台windows操作系统的服务器,一台装有VLC软件的终端PC机或者是iPhone手机终端。利用envivio编码器产生直播源,将直播信号接入envivio编码器,并按照iPhone手机电视直播编码参数进行编</p><p style="text-indent: 2em;";>第14页 </p><p style="text-indent: 2em;";>码参数的设置,为了获取更好的直播体验,我们采用了码率自适应的方式,在编码器端同时编码三种码率即384Kbps,256 Kbps,512 Kbps。 </p><p style="text-indent: 2em;";>6.2.1 具体编码参数设置如下: </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>音频统一采用32 Kbps的码率,采用44100HZ的采样率。输出采用了http </p><p style="text-indent: 2em;";>live streaming协议,输出的直播流直接进行了TS流文件切片,并将切片文件与生成的引导文件同时发布到设置的输出目录中。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>6.2.2 Apache 发布服务器系统定制: </p><p style="text-indent: 2em;";>首先将apache软件安装在此windows操作系统上。之后执行以下操作: </p><p style="text-indent: 2em;";>解压缩附件文件,并拷贝到C盘根目录,如:c:iliveTV. </p><p style="text-indent: 2em;";>进入:C:Program FilesApache Software FoundationApache2.2conf </p><p style="text-indent: 2em;";>目录,备份现有的文件,并用附件的文件替代以前的文件。 </p><p style="text-indent: 2em;";>重新启动Apache服务,使新的 文件生效. </p><p style="text-indent: 2em;";>新的的默认http端口为:8084,你可以更改文件,使其端口为你所需要的端口。更改地址:第46行 Listen 80 ,更改后需要重启Apache服务。 </p><p style="text-indent: 2em;";>检测该Apache服务是否正常,可以用IE登陆到如下地址: url = </p><p style="text-indent: 2em;";>localhost:80/, 如果你看到如下界面,则表示安装Apache服务成功,否则就需要检查相关配置。 </p><p style="text-indent: 2em;";>第15页 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>在C:Program FilesApache Software FoundationApache2.2htdocs 目录下,建立一个« iPhone 100»目录,用于接收4CasterC4打出的http TS 流。 </p><p style="text-indent: 2em;";>并确保该« iPhone100 »目录具有可写权限。 </p><p style="text-indent: 2em;";>在4CasterC4编码器上,配置如下发布点: </p><p style="text-indent: 2em;";><apache-IP-address>:80/iPhone/100 </p><p style="text-indent: 2em;";>(注意:需要在4CasterC4系统配置中,配置相应的Credentials,如下图:) </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>注:用户名及密码为PC登录的用户名及密码。 </p><p style="text-indent: 2em;";>启动4CasterC4的该Profile的编码业务,如果20秒内没有任何告警信息。说明编码器推送流成功。同时再检查一下« iPhone100 »目录,看是否用相应的文件生成。如下图: </p><p style="text-indent: 2em;";>第16页 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>可以看到当envivio编码器开始编码时候,在apache发布服务器的接收目录中,同时生成了01.m3u8, 02.m3u8, 03.m3u8, index.m3u8四个引导文件。内容分别如下: </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>三个引导文件分别引导三路直播流切片文件,即从编码器设置的三路编码参数生成。 </p><p style="text-indent: 2em;";>总引导文件内容包含三路直播流生成的三个m3u8文件,当终端连接此地址时候,根据网络环境情况,选取其中的某个m3u8文件进行播放。 </p><p style="text-indent: 2em;";>检测该内容是否可以能够用iPhone/iPad进行接收: </p><p style="text-indent: 2em;";>方法1 使用以太网连接以太Mac OS + Quicktime播放器或者是VLC2.0以上版本也可以接收http协议的直播流。 </p><p style="text-indent: 2em;";>方法2 使用iPhone/iPad 连接到同一网络的wifi系统内,使用Safari, 并键入如下地址:<apache-IP-address>:80/iPhone/100/index.m3u8 </p><p style="text-indent: 2em;";>第17页 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>6.2.3 直播数据流的接收 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>这里采用VLC2.0以上的版本进行测试,低于2.0的版本不支持http协议播放。在这里我们只需要打开VLC的网络串流,在地址栏输入:192.168.6.16/iPhone/100/index.m3u8这个地址点击播放就可以播放我们测试推出的直播流。一下为测试播放直播流时候得截图。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>为了便于分析对于所拉取直播流的相关媒体信息,利用VLC录制一段直播流: </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>第18页 </p><p style="text-indent: 2em;";>可以看到这里VLC所取流为所编码的最高码率512Kbps,加上网络开销会达到截图中的数据总量。因为我们应用PC机利用软件进行播放测试,网络条件比较好,所以会选择比较高的码率进行播放。若是在网络条件比较差的环境下进行播放,则会自动切换到384Kbps和256Kbps进行播放。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>第19页 </p><p style="text-indent: 2em;";>参考文献 </p><p style="text-indent: 2em;";>[1] 张顺利.移动流媒体业务在3G通信时代的应用.软件导刊,2009,(9);120-122 </p><p style="text-indent: 2em;";>[2] 谢希仁.计算机网络(第四版).北京:电子工业出版社,2003.380-381 </p><p style="text-indent: 2em;";>[3] 孙毅,林涛,林争辉.新一代视频编码标准H.264/AVC的特点及应用.广播电视信息,2006,12:67-68 </p><p style="text-indent: 2em;";>[4] Live ,Internet-Draft </p><p style="text-indent: 2em;";>draft-pantos-HTTP-live-streamming-05,2010 </p><p style="text-indent: 2em;";>[5] ISO/IEC 14496-10 and ITU-T Rec.H.264:Advanced video coding,2005 </p><p style="text-indent: 2em;";>[6] Thomas Schierl,Yago Sanchez de la Fuente,Ralf Globisch et ty-based </p><p style="text-indent: 2em;";>Media Delivery using SVC with RTP and HTTP edia Tools and </p><p style="text-indent: 2em;";>Applications,2010,49(3):457-476 </p><p><p><h2></h2></p></img></p> <p>2024年2月6日发(作者:闳哲圣)</p><p><h2></h2></p><p></img></p><p style="text-indent: 2em;";></p><p style="text-indent: 2em;";>第I页 </p><p style="text-indent: 2em;";>iPhone直播流技术 </p><p style="text-indent: 2em;";>关键词:编码器 流转发 分段 流媒体 </p><p style="text-indent: 2em;";>摘要: </p><p style="text-indent: 2em;";>随着通信业务的迅速发展,高端手机频繁推出。手机看电视被越来越多的人接受,手机电视(Mobile TV),就是利用具有操作系统和流媒体视频功能的智能手机以及现在支持HTTP或者RTSP的非智能机子都能观看电视的业务。现在主流手机以iPhone的ios操作系统,和支持Andriod系统的智能机为主。本文主要讨论iPhone手机进行直播过程,直播流的相关技术。 </p><p style="text-indent: 2em;";>手机电视直播技术,即将电视直播信号接到编码设备,通过编码设备将直播频道的信号进行音视频编码,编码后的格式可以支持各手机适配的解码环境。并且通过编码设备将原有的SDI信号进行IP封装,使其可以再互联网中进行传输。遵照TCP、IP协议在互联网中对信号进行处理。并最终传递到流媒体服务器,通过流媒体服务器发布到互联网上,终端手机等设备通过链接流媒体地址进行直播流的播放。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>第II页 </p><p style="text-indent: 2em;";>目录 </p><p style="text-indent: 2em;";>第一章 绪论 .................................................................................................................................... 1 </p><p style="text-indent: 2em;";>1.1 iphone直播流技术概述 .................................................................................................... 1 </p><p style="text-indent: 2em;";>1.2 HTTP live streaming架构 .................................................................................................... 1 </p><p style="text-indent: 2em;";>第二章 服务器组件......................................................................................................................... 3 </p><p style="text-indent: 2em;";>2.1 直播频道信号源接入 ........................................................................................................ 3 </p><p style="text-indent: 2em;";>2.2 iPhone直播编码技术参数:............................................................................................. 4 </p><p style="text-indent: 2em;";>2.3 iPhone输出设置 ................................................................................................................ 4 </p><p style="text-indent: 2em;";>第三章 媒体流分段器 ..................................................................................................................... 5 </p><p style="text-indent: 2em;";>3.1 播放列表文件 .................................................................................................................... 5 </p><p style="text-indent: 2em;";>3.1.1标签介绍 .................................................................................................................. 6 </p><p style="text-indent: 2em;";>3.1.2 实例......................................................................................................................... 7 </p><p style="text-indent: 2em;";>3.2文件分段器 ......................................................................................................................... 8 </p><p style="text-indent: 2em;";>第四章 分发组件............................................................................................................................. 9 </p><p style="text-indent: 2em;";>4.1 Apache发布服务器设置 .................................................................................................... 9 </p><p style="text-indent: 2em;";>4.1.1 安装Apache ........................................................................................................... 9 </p><p style="text-indent: 2em;";>4.1.2 配置Apache ......................................................................................................... 10 </p><p style="text-indent: 2em;";>第五章 客户端 .............................................................................................................................. 12 </p><p style="text-indent: 2em;";>第六章 应用实际环境搭建 ........................................................................................................... 13 </p><p style="text-indent: 2em;";>6.1 http live streaming结构 ................................................................................................... 13 </p><p style="text-indent: 2em;";>6.2 服务器协同工作具体配置 .............................................................................................. 13 </p><p style="text-indent: 2em;";>6.2.1 具体编码参数设置如下: ................................................................................... 14 </p><p style="text-indent: 2em;";>6.2.2 Apache 发布服务器系统定制: .......................................................................... 14 </p><p style="text-indent: 2em;";>6.2.3 直播数据流的接收 ............................................................................................... 17 </p><p style="text-indent: 2em;";>参考文献 ........................................................................................................................................ 19 </p><p style="text-indent: 2em;";>第1页 </p><p style="text-indent: 2em;";>第一章 绪论 </p><p style="text-indent: 2em;";>1.1 iphone直播流技术概述 </p><p style="text-indent: 2em;";>手机电视直播,是三万融合的一个方面,现在已被大多数使用。手机电视直播技术也逐渐成熟起来。由于iPhone操作系统的独特性,iPhone手机直播技术异于其他系统。具有独特的一些技术流程。本文主要讨论一下iPhone直播过程中的一些相关技术实现过程。 </p><p style="text-indent: 2em;";>目前较为常用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这二种基本是完全不同的东西。HTTP它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流。 </p><p style="text-indent: 2em;";>我们可以看看 HTTP Live Streaming 是怎么样工作的。平时的直播技术中,播放模式中必须等待整个文件下载完才行,在 HLS 技术中 Web 服务器向客户端提供接近实时的音视频流。但在使用的过程中是使用的标准的 HTTP 协议,所以这时,只要使用 HLS 的技术,就能在普通的 HTTP 的应用上直接提供点播和直播。 </p><p style="text-indent: 2em;";>HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体 网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。 </p><p style="text-indent: 2em;";>1.2 HTTP live streaming架构 </p><p style="text-indent: 2em;";>HTTP Live媒体流由三部分组成:服务器组件,分发组件和客户端。 </p><p style="text-indent: 2em;";>第2页 </p><p style="text-indent: 2em;";>服务器组件:负责将输入的媒体流进行数字编码,并且以适合发布的格式进行封装,然后准备发布。 </p><p style="text-indent: 2em;";>分发组件:由标准的Web服务器组成,负责接受客户端的请求并将准备好的媒体内容和相关资源发送到客户端。对于大规模部署,Edge网络或者其他内容分发网络可能会被使用。 </p><p style="text-indent: 2em;";>客户端:负责请求合适的媒体内容,下载媒体资源,并将媒体内容重新组装,以连续的媒体流形式展现给用户。在iOS 3.0及以后版本的设备,安装了QuickTime X及以后版本的桌面计算机中已经内置了客户端。 </p><p style="text-indent: 2em;";>在一个典型的配置中,硬件编码器接受音频–视频输入,并使用MPEG-4编码,输出MPEG-2 TS流,然后被分段软件划分为一系列简短的时间段并保存为媒体文件。这些媒体文件部署在Web服务器上。分段软件同时还创建并维护包含这些媒体文件引用的索引文件。索引文件的URL在Web服务器上发布。客户端读取索引文件,然后按顺序向服务器请求媒体文件并无停顿的显示它们。 </p><p style="text-indent: 2em;";>一个简单的HTTP Live媒体流配置示例如图1-1所示。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>图 1-1 基本配置 </p><p style="text-indent: 2em;";>上图中详细表述了实现http live streaming功能所需要的步骤。 </p><p style="text-indent: 2em;";>视频采集 ->编码器 -> 流分割 -> 普通 web 服务(索引文件和视频文件) </p><p style="text-indent: 2em;";>-> 客户端 </p><p style="text-indent: 2em;";>第3页 </p><p style="text-indent: 2em;";>内容准备的过程大约二种,一是视频采集,编码器首先将摄像机实时采集的音视频数据压缩编码为符合特定标准的音视频基本流,也可以拿编码完了的文件,有一点必须保证,就是一定要使用H.264视频和AAC音频,因为发明这个的是苹果公司,只支持这个。然后给这些封装成成为符合MPEG-2(MPEG 2 TS、MPEG2 PS之所以使用这个,主要是因为声音和视频会交织在一起,也会有关键帧来让视频可以直接播放). </p><p style="text-indent: 2em;";>流分割部分在这个中,比起 RTSP 之类和普通点播的最大不同,就是他会给 </p><p style="text-indent: 2em;";>MPEG-2 分割成很多个 ts 的文件。分割过程大多是按时间来切,根据国外的资料,建议切 10s 一个的文件,如果码流高可以 5 秒一次。在分割还有一点不同,就是这时流分割器会生成一个含有指向这些小TS文件指针的索引文件 </p><p style="text-indent: 2em;";>所以这个文件也必须在 web 服务器上,不能少。每多 10s 时,就会多一个 ts 文件,所以索引也会根着修改成最新的几段视频。 </p><p style="text-indent: 2em;";>最后,这些切分了的小的一系列的 ts 文件,放到普通的 web 服务器中就行了。这时在 CDN 中也是一样,因为请求这些文件会使用标准的 HTTP 协议。索引文件后缀是.m3u8 ,索引文件采用扩展的M3U播放列表格式,其实就一文本。 </p><p style="text-indent: 2em;";>第二章 服务器组件 </p><p style="text-indent: 2em;";>服务器要求一个媒体编码器,这可以是现有的硬件,然后还需要一个将编码好的媒体内容分段并保存成文件的方法,这可以是软件如Apple提供的媒体流分段器。 </p><p style="text-indent: 2em;";>媒体编码器 </p><p style="text-indent: 2em;";>媒体编码器从音频视频设备接收实时信息,进行编码和封装。编码应该是客户端设备支持的编码集合之一,例如视频的H.264和音频的HE-AAC。目前,支持的发布格式是音频和视频的MPEG-2 TS流,或者只有音频的MPEG基本流。 </p><p style="text-indent: 2em;";>编码器在本地网络上将MPEG-2 TS流发布到媒体流分段器。 </p><p style="text-indent: 2em;";>2.1 直播频道信号源接入 </p><p style="text-indent: 2em;";>iPhone的信号来源可以由很多种方式,主要概括一下几个方面: </p><p style="text-indent: 2em;";>第4页 </p><p style="text-indent: 2em;";>视频源输入可以是SDI、AV、ASI MPEG2、IP MPEG 2、IP H.264等。IP方式输入不需要采集卡,其它方式输入需要采集卡; </p><p style="text-indent: 2em;";>编码设备一般有两种实现方式: </p><p style="text-indent: 2em;";>1)通用服务器+采集卡+编码/转码软件+iPhone封包+流推送软件; </p><p style="text-indent: 2em;";>2)专用编码器(内置采集卡+编码/转码软件+ iPhone +流推送软件); </p><p style="text-indent: 2em;";>2.2 iPhone直播编码技术参数: </p><p style="text-indent: 2em;";>1)视频:Extreme H.264 Baseline编码(CBR),音频MPEG-2-AAC </p><p style="text-indent: 2em;";>2)总码率(视频码率+音频码率):384Kbps </p><p style="text-indent: 2em;";>3)视频码率: 352Kbps </p><p style="text-indent: 2em;";>4)音频码率: 32Kbps(单声道) </p><p style="text-indent: 2em;";>5)声道:立体声或混合声 </p><p style="text-indent: 2em;";>6)视频宽:320 </p><p style="text-indent: 2em;";>7)视频高:240 </p><p style="text-indent: 2em;";>8)视频帧率:25帧每秒 </p><p style="text-indent: 2em;";>9)视频宽高比: 4:3 </p><p style="text-indent: 2em;";>10)象素宽高比: 1:1 </p><p style="text-indent: 2em;";>11)音频采样率(Hz):不低于22000 </p><p style="text-indent: 2em;";>2.3 iPhone输出设置 </p><p style="text-indent: 2em;";>-2 TS格式UDP协议组播输出到网络中,供转发服务器以及监看服务器可以随时拉流使用。广联目前采取这种方式。 </p><p style="text-indent: 2em;";>2.也可以直接采用iPhone协议 HTTP Live Streaming 方式输出到发布服务器中。这种方式减少中间环节,但是对于发布服务器的压力比较大,而且对于流监看环节的实施比较困难。对于直播频道数量比较少的网络,这种方式还是比较适用的。 </p><p style="text-indent: 2em;";>第5页 </p><p style="text-indent: 2em;";>第三章 媒体流分段器 </p><p style="text-indent: 2em;";>媒体流分段器通常是一个软件,从本地网络读入TS流并将它分成一系列相等时间的媒体文件。即使每段都是一个单独的文件,从连续媒体流中生成的视频文件仍然可以被无缝的重构。 </p><p style="text-indent: 2em;";>分段器同时会创建一个包含各媒体文件引用的索引文件。每当分段器完成一个新的媒体文件,索引文件就会被更新。索引文件被用来确认媒体文件的可用性和位置。分段器也可以加密每个媒体段并创建一个密钥文件。 </p><p style="text-indent: 2em;";>媒体分段被保存为.ts文件(MPEG-2媒体流),索引文件被保存为.M3U8文件,这是保存MP3播放列表的.m3u格式的一种扩展。 </p><p style="text-indent: 2em;";>3.1 播放列表文件 </p><p style="text-indent: 2em;";>播放列表必须被扩展自M3U 播放列表文件[M3U]。本文件通过定义的其他标记,来扩展M3U 文件格式。 </p><p style="text-indent: 2em;";>一个M3U 播放列表是一个文本文件,由单独的行组成。行是被一个LF 字符或被一个LF 字符跟随的一个CR字符来终止。每行是一个URI,一片空白,或被注释字符'#'开始。URI标识被播放的媒体文件。空白行会被忽略。 </p><p style="text-indent: 2em;";>注释字符'#'开始的行是评论或标签。 标签是带‘#EXT’开始的。其他所有以'#'开始的行都是注释,应该被忽略。 </p><p style="text-indent: 2em;";>扩展的M3U 文件格式定义了两个标签:EXTM3U 和EXTIN F。一个扩展的M3U </p><p style="text-indent: 2em;";>文件是通过第一行来区别于一个基本的M3U 文件的,这行必须 #EXTM3U。 </p><p style="text-indent: 2em;";>EXTINF 是一个记录的标记,它描述了通过如下的URI 标识的媒体文件。每个媒体文件的URI必须由一个EXTINF 标记开始。它的格式是: </p><p style="text-indent: 2em;";>#EXTINF:<duration>,<TITLE> </p><p style="text-indent: 2em;";>“时间”是一个整数,它指定的媒体文件的时间,以秒计。持续时间应该是四舍五入到最接近的整数。逗号后,该行的其余部分是媒体文件的标题。 </p><p style="text-indent: 2em;";>第6页 </p><p style="text-indent: 2em;";>3.1.1标签介绍 </p><p style="text-indent: 2em;";>这个文档定义了7个新的标签:EXT-X-TARGETDURATION,EXT-X-MEDIA-SEQUENCE,EXT-X-KEY,EXT-X-PROGRAM-DATE-TIME,EXT-X-ALLOW-CACHE,EXT-X-STREAM-INF,和EXT-X ENDLIST。 </p><p style="text-indent: 2em;";>-X-TARGETDURATION </p><p style="text-indent: 2em;";>EXT-X-TARGETDURATION 标签表示将被添加到主演示的下一个媒体文件的大致时间。它必须出现在播放列表文件中。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-TARGETDURATION:<seconds> </p><p style="text-indent: 2em;";>媒体文件的实际时间可能会略有不同目标时间。 </p><p style="text-indent: 2em;";>2.EXT-X-MEDIA-SEQUENCE </p><p style="text-indent: 2em;";>在播放列表中的每个媒体文件的URI 有一个独特的序列号。 一个URI 的序列号是等同于前面的URI 序列号加一。EXT-X-MEDIA-SQUENCE 标签指示了在一个播放列表中出现的第一个URI 的序列号。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-MEDIA-SQUENCE:<number> </p><p style="text-indent: 2em;";>如果该播放列表文件中不包含一个EXT-X-MEDIA-SQUENCE 标签,那么在播放列表中的第一个URI 的序列号应被认为是1。 </p><p style="text-indent: 2em;";>3. EXT-X-KEY </p><p style="text-indent: 2em;";>媒体文件可能被加密(encrypt)。EXT-X-KEY 标记提供必要的信息来解密(decrypt)它后面的媒体文件。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-KEY:METHOD=<method> [,URI ="<URI>"] </p><p style="text-indent: 2em;";>该METHOD 参数指定的加密方法。URI 参数,如果存在,指定如何获取key。 </p><p style="text-indent: 2em;";>一个新的EXT-X-KEY 取代任何先前的EXT-X-KEY。 </p><p style="text-indent: 2em;";>如果没有EXT-X-KEY 标记,那么媒体文件是不加密的。 </p><p style="text-indent: 2em;";>对于键(key)文件的格式,看第5节,同时第5.1节,第6.1.2节和第6.2.5节有关于媒体文件加密的其他信息。 </p><p style="text-indent: 2em;";>4.EXT-X-PROGRAM-DATE-TIME </p><p style="text-indent: 2em;";>EXT-X-PROGRAM-DATE-TIME 标记用一个决定的日期和/或时间指示了下一个媒体文件的开始。日期/时间表示是ISO/IEC 8601:2004 [ISO_8601]。例如: </p><p style="text-indent: 2em;";>#EXT-X-PROGRAM-DATE-TIME:<YYYY-MM-DDThh:mm:ss> </p><p style="text-indent: 2em;";>第7页 </p><p style="text-indent: 2em;";>5.EXT-X-ALLOW-CACHE </p><p style="text-indent: 2em;";>EXT-X-ALLOW-CACHE 标记,指明用户端是否可以缓存下载的媒体文件以供日后重播。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-ALLOW-CACHE:<YES|NO> </p><p style="text-indent: 2em;";>6.EXT-X-ENDLIST </p><p style="text-indent: 2em;";>的EXT-X-ENDLIST 标记,表示没有更多的媒体文件将被添加到播放列表文件。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-ENDLIST </p><p style="text-indent: 2em;";>7.EXT-X-STREAM-INF </p><p style="text-indent: 2em;";>EXT-X-STREAM-INF 标记,表明在播放列表文件中的下一个URI 标识为另一个播放列表文件。它的格式是: </p><p style="text-indent: 2em;";>#EXT-X-STREAM-INF:[attribute=value] [,attribute=value]*<URI> </p><p style="text-indent: 2em;";>以下属性被定义为EXT-X-STREAM-INF 标签: </p><p style="text-indent: 2em;";>BANDWIDTH=<n> </p><p style="text-indent: 2em;";>其中n 是一个近似的流比特率的上约束,表示为比特每秒。 </p><p style="text-indent: 2em;";>PROGRAM-ID=<i> </p><p style="text-indent: 2em;";>其中i 是一个数字,唯一标识在播放列表文件的范围内的一个特定的介绍。 </p><p style="text-indent: 2em;";>一个播放列表文件可能含有带有相同的PROGRAM-ID 的多个EXT-X-STREAM-INF 的URIs 来描述同样呈现的不同流。 </p><p style="text-indent: 2em;";>注意:因为索引文件格式是.m3u格式的扩展,并且系统也支持.mp3的音频文件,所以客户端也兼容传统的MP3播放列表。 </p><p style="text-indent: 2em;";>3.1.2 实例 </p><p style="text-indent: 2em;";>下面是一个非常简单的.M3U8文件示例,该示例包含三个未加密10秒钟媒体文件: </p><p style="text-indent: 2em;";>#EXTM3U </p><p style="text-indent: 2em;";>#EXT-X-MEDIA-SEQUENCE:0 </p><p style="text-indent: 2em;";>第8页 </p><p style="text-indent: 2em;";>#EXT-X-TARGETDURATION:10 </p><p style="text-indent: 2em;";>#EXTINF:10, </p><p style="text-indent: 2em;";>/#EXTINF:10, </p><p style="text-indent: 2em;";>/#EXTINF:10, </p><p style="text-indent: 2em;";>/#EXT-X-ENDLIST </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>索引文件可能会包含密钥文件的URL和可切换的索引文件以支持不同的带宽。 </p><p style="text-indent: 2em;";>3.2文件分段器 </p><p style="text-indent: 2em;";>如果您已经有媒体文件,且该媒体文件使用了支持的编解码器编码,您可以使用文件分段器来将它封装成MPEG媒体流并划分成相等长度的时间段(如果文件已经封装在MPEG-2 TS流中,文件分段器将会略过这步)。文件分段器允许您使用利用现有的视频和音频通过HTTP Live媒体流来提供视频点播。文件分段器完成媒体流分段器同样的任务,但是是以文件而不是媒体流为输入。 </p><p style="text-indent: 2em;";>利用medianstreamsegmenter获取ts流并进行分片的设置 </p><p style="text-indent: 2em;";>首先将软件默认安装在linux的/usr/bin下。 </p><p style="text-indent: 2em;";>具体使用方法: </p><p style="text-indent: 2em;";> /usr/bin/mediastreamsegmenter -s 3 -t 5 -D -f /usr/frank/stream </p><p style="text-indent: 2em;";>127.0.0.1:8000 </p><p style="text-indent: 2em;";>判断是否成功分片:如果终端显示 : Finalized 存储路径 file </p><p style="text-indent: 2em;";>,则说明分片成功了。 </p><p style="text-indent: 2em;";>第9页 </p><p style="text-indent: 2em;";>说明: </p><p style="text-indent: 2em;";>-s 3 设定index文件中记录几个分片。 </p><p style="text-indent: 2em;";>-t 5 设定多长时间(秒)产生一个分片,默认为10秒。 </p><p style="text-indent: 2em;";>-D 删除过期的分片文件 </p><p style="text-indent: 2em;";>-f /usr/frank/stream设置存储分片文件和index文件的文件夹 </p><p style="text-indent: 2em;";>127.0.0.1:8000 设置获取ts流的地址 </p><p style="text-indent: 2em;";>第四章 分发组件 </p><p style="text-indent: 2em;";>分发系统可以是一个Web服务器或者Web缓存系统,基于HTTP协议发布媒体文件和索引文件。不需要定制的服务器模块,只需要对Web服务器进行很少的配置。 </p><p style="text-indent: 2em;";>推荐的配置通常只限于指定.M3U8文件和.ts文件的MIME类型关联。 </p><p style="text-indent: 2em;";>文件扩展名 </p><p style="text-indent: 2em;";>MIME类型 </p><p style="text-indent: 2em;";>.M3U8 </p><p style="text-indent: 2em;";>application/x-mpegURL或者L </p><p style="text-indent: 2em;";>.ts video/MP2T </p><p style="text-indent: 2em;";>调整.M3U8文件的存活时间属性(Time-to-Live)对于下载流的Web缓存机制来说可能是必须的,因为这些文件会被频繁的覆盖,每个请求下载的应该是最新版本。 </p><p style="text-indent: 2em;";>4.1 Apache发布服务器设置 </p><p style="text-indent: 2em;";>4.1.1 安装Apache </p><p style="text-indent: 2em;";>下载地址:/ </p><p style="text-indent: 2em;";>1. 安装Apache </p><p style="text-indent: 2em;";># tar zxvf </p><p style="text-indent: 2em;";>第10页 </p><p style="text-indent: 2em;";># cd httpd-2.2.11 </p><p style="text-indent: 2em;";># ./configure --prefix=/usr/local/apache --enable-so </p><p style="text-indent: 2em;";>//编译时加上加载模块参数--enable-so </p><p style="text-indent: 2em;";># make </p><p style="text-indent: 2em;";># make install </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>2. 配置系统启动时自动启动Apache服务。 </p><p style="text-indent: 2em;";># vi /etc/rc.d/ </p><p style="text-indent: 2em;";> //在上加入一行/usr/local/apache/bin/apachectl –k </p><p style="text-indent: 2em;";>start。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>4.1.2 配置Apache </p><p style="text-indent: 2em;";>1. 修改文件 </p><p style="text-indent: 2em;";># vi /usr/local/apache/conf/ </p><p style="text-indent: 2em;";>1) 设置根目录的路径 </p><p style="text-indent: 2em;";>根目录是指Apache存放配置文件和日志文件的目录,配置参数为ServerRoot,默认位于“/usr/local/apache”。命令如下: </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>2) 设置监听IP地址及端口号 </p><p style="text-indent: 2em;";>默认侦听本机所有IP地址的TCP80端口,命令如下: </p><p style="text-indent: 2em;";>Listen 80 </p><p style="text-indent: 2em;";>第11页 </p><p style="text-indent: 2em;";>用户也可以按自己的需求,使用多个Listen语句在多个地址和端口上侦听客户端请求。比如: </p><p style="text-indent: 2em;";>Listen 192.168.99.9:80 </p><p style="text-indent: 2em;";>Linsten 172.16.0.20:8080 </p><p style="text-indent: 2em;";>3) 设置系统管理员E-mail </p><p style="text-indent: 2em;";>使用ServerAdmin参数设置管理员E-mail,比如管理员的Email地址为root@: </p><p style="text-indent: 2em;";># </p><p style="text-indent: 2em;";>ServerAdmin root@ </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>4) 设置服务器主机的名称 </p><p style="text-indent: 2em;";>参数ServerName用来设置服务器的主机名称,如果没有域名则填入服务器的IP地址,比如服务器的IP地址为192.168.99.9: </p><p style="text-indent: 2em;";># </p><p style="text-indent: 2em;";>ServerName 192.168.99.9 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>5) 设置主目录的路径 </p><p style="text-indent: 2em;";>用户可以使用参数DocumentRoot配置服务器主目录默认路径,比如,主目录路径为: </p><p style="text-indent: 2em;";>DocumentRoot “/usr/local/apache/htdocs” </p><p style="text-indent: 2em;";>主路径主要用来存放分片服务器的ts分片文件以及m3u8引导文件。例如我们在htdocs目录下建立文件夹iPhone31并将分片文件以及index.m3u8文件存在31文件夹中。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>6)测试: </p><p style="text-indent: 2em;";>打开浏览器,输入地址:192.168.99.9,可以打开站点了: </p><p style="text-indent: 2em;";>第12页 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>目前为止iPhone手机直播发布服务器就已经配置完成了。 </p><p style="text-indent: 2em;";>第五章 客户端 </p><p style="text-indent: 2em;";>客户端从获取索引文件开始,并基于URL来标识一个媒体流。索引文件指定了可用媒体文件的位置,解密的密钥,以及可切换的媒体流。对于选定的媒体流,客户端按顺序下载每个可用的媒体文件。每个文件包含媒体流的一个连续的段。一旦足够的数据下载完毕,客户端开始向用户播放重新组合的媒体流。 </p><p style="text-indent: 2em;";>客户端负责获取解密密钥,验证用户,或者按需要显示用户验证和解密媒体文件的用户界面。 </p><p style="text-indent: 2em;";>这个过程将一直重复直到遇到索引文件中的#EXT-X-ENDLIST标签。如果没有遇到#EXT-X-ENDLIST 标签,则认为该索引文件是正在进行的广播的一部分,客户端会周期性的重新加载新的索引文件。客户端会在更新后的索引文件中查找新的媒体文件以及加密密钥并将这些URL加到播放列表中。 </p><p style="text-indent: 2em;";>我们现在可以通过用手机或者VLC软件进行拉流测试。通过链接地址栏输入:http://192.168.99.9:80/iPhone/31/index.m3u8则可以播放我们存在这里的直播流文件。或者利用 </p><p style="text-indent: 2em;";>在iPhone终端的safari中输入此链接也可以进行播放。 </p><p style="text-indent: 2em;";>第13页 </p><p style="text-indent: 2em;";>第六章 应用实际环境搭建 </p><p style="text-indent: 2em;";>6.1 http live streaming结构 </p><p style="text-indent: 2em;";>HTTP自适应流技术是一种能够提高在IP网络上传输流式内容的视频体检质量技术。该技术使用基于HTTP的纯Web机制,由客户端应用程序按顺序请求组成媒体流的大小文件块序列。这种方法最重要的创新是对相同的视频内容提供多码率的备份,允许客户端播放器在这些不同码率之间动态、无缝的切换。而且切换过程中不需要服务器干预,由客户端负责实现如何选择最合适的备份。目前使用HTTP自适应流技术的主要有微软公司的Smooth Streaming、苹果公司提出的HTTP Live Streaming以及Adobe公司HTTP Dynamic Streaming技术。其中Smooth </p><p style="text-indent: 2em;";>Streaming必须使用微软公司的IIS服务器,而HTTP Live Streaming只需要普通的Web服务器。HTTP Dynamic Streaming比较特殊,使用基于HTTP协议的RTMP协议,要使用专门的服务器,支持音视频格式比较多。 </p><p style="text-indent: 2em;";>Envivio编码器是可以编码适配iPhone手机的直播流,因为envivio编码器可以输出http live Streaming协议,所以envivio编码器编码出的直播流可以直接发布到发布服务器,只需要将envivio编码器的部分协议模块装载如apache服务器的配置文件中便可以与apahce发布服务器可直接实现iPhone的直播流发布。因为iphone网络接入为NET方式接入,在进行iPhone手机电视直播时候,可以采取利用wifi接入的方式。Wifi则可以接受码率较高的直播流。为了达到这一目的,我们在利用envivio编码器进行直播编码的时候,可以将同一个频道同时编码出不同码率的多路流,采用码率自适应的方式,即可适配不同网络条件下观看手机电视获得更好体验。之前已经搭建过http live streaming直播环境。Apache发布服务器采用windows的操作系统来搭建。 </p><p style="text-indent: 2em;";>6.2 服务器协同工作具体配置 </p><p style="text-indent: 2em;";>需要用到envivio编码器一台,一台windows操作系统的服务器,一台装有VLC软件的终端PC机或者是iPhone手机终端。利用envivio编码器产生直播源,将直播信号接入envivio编码器,并按照iPhone手机电视直播编码参数进行编</p><p style="text-indent: 2em;";>第14页 </p><p style="text-indent: 2em;";>码参数的设置,为了获取更好的直播体验,我们采用了码率自适应的方式,在编码器端同时编码三种码率即384Kbps,256 Kbps,512 Kbps。 </p><p style="text-indent: 2em;";>6.2.1 具体编码参数设置如下: </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>音频统一采用32 Kbps的码率,采用44100HZ的采样率。输出采用了http </p><p style="text-indent: 2em;";>live streaming协议,输出的直播流直接进行了TS流文件切片,并将切片文件与生成的引导文件同时发布到设置的输出目录中。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>6.2.2 Apache 发布服务器系统定制: </p><p style="text-indent: 2em;";>首先将apache软件安装在此windows操作系统上。之后执行以下操作: </p><p style="text-indent: 2em;";>解压缩附件文件,并拷贝到C盘根目录,如:c:iliveTV. </p><p style="text-indent: 2em;";>进入:C:Program FilesApache Software FoundationApache2.2conf </p><p style="text-indent: 2em;";>目录,备份现有的文件,并用附件的文件替代以前的文件。 </p><p style="text-indent: 2em;";>重新启动Apache服务,使新的 文件生效. </p><p style="text-indent: 2em;";>新的的默认http端口为:8084,你可以更改文件,使其端口为你所需要的端口。更改地址:第46行 Listen 80 ,更改后需要重启Apache服务。 </p><p style="text-indent: 2em;";>检测该Apache服务是否正常,可以用IE登陆到如下地址: url = </p><p style="text-indent: 2em;";>localhost:80/, 如果你看到如下界面,则表示安装Apache服务成功,否则就需要检查相关配置。 </p><p style="text-indent: 2em;";>第15页 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>在C:Program FilesApache Software FoundationApache2.2htdocs 目录下,建立一个« iPhone 100»目录,用于接收4CasterC4打出的http TS 流。 </p><p style="text-indent: 2em;";>并确保该« iPhone100 »目录具有可写权限。 </p><p style="text-indent: 2em;";>在4CasterC4编码器上,配置如下发布点: </p><p style="text-indent: 2em;";><apache-IP-address>:80/iPhone/100 </p><p style="text-indent: 2em;";>(注意:需要在4CasterC4系统配置中,配置相应的Credentials,如下图:) </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>注:用户名及密码为PC登录的用户名及密码。 </p><p style="text-indent: 2em;";>启动4CasterC4的该Profile的编码业务,如果20秒内没有任何告警信息。说明编码器推送流成功。同时再检查一下« iPhone100 »目录,看是否用相应的文件生成。如下图: </p><p style="text-indent: 2em;";>第16页 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>可以看到当envivio编码器开始编码时候,在apache发布服务器的接收目录中,同时生成了01.m3u8, 02.m3u8, 03.m3u8, index.m3u8四个引导文件。内容分别如下: </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>三个引导文件分别引导三路直播流切片文件,即从编码器设置的三路编码参数生成。 </p><p style="text-indent: 2em;";>总引导文件内容包含三路直播流生成的三个m3u8文件,当终端连接此地址时候,根据网络环境情况,选取其中的某个m3u8文件进行播放。 </p><p style="text-indent: 2em;";>检测该内容是否可以能够用iPhone/iPad进行接收: </p><p style="text-indent: 2em;";>方法1 使用以太网连接以太Mac OS + Quicktime播放器或者是VLC2.0以上版本也可以接收http协议的直播流。 </p><p style="text-indent: 2em;";>方法2 使用iPhone/iPad 连接到同一网络的wifi系统内,使用Safari, 并键入如下地址:<apache-IP-address>:80/iPhone/100/index.m3u8 </p><p style="text-indent: 2em;";>第17页 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>6.2.3 直播数据流的接收 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>这里采用VLC2.0以上的版本进行测试,低于2.0的版本不支持http协议播放。在这里我们只需要打开VLC的网络串流,在地址栏输入:192.168.6.16/iPhone/100/index.m3u8这个地址点击播放就可以播放我们测试推出的直播流。一下为测试播放直播流时候得截图。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>为了便于分析对于所拉取直播流的相关媒体信息,利用VLC录制一段直播流: </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>第18页 </p><p style="text-indent: 2em;";>可以看到这里VLC所取流为所编码的最高码率512Kbps,加上网络开销会达到截图中的数据总量。因为我们应用PC机利用软件进行播放测试,网络条件比较好,所以会选择比较高的码率进行播放。若是在网络条件比较差的环境下进行播放,则会自动切换到384Kbps和256Kbps进行播放。 </p><p style="text-indent: 2em;";> </p><p style="text-indent: 2em;";>第19页 </p><p style="text-indent: 2em;";>参考文献 </p><p style="text-indent: 2em;";>[1] 张顺利.移动流媒体业务在3G通信时代的应用.软件导刊,2009,(9);120-122 </p><p style="text-indent: 2em;";>[2] 谢希仁.计算机网络(第四版).北京:电子工业出版社,2003.380-381 </p><p style="text-indent: 2em;";>[3] 孙毅,林涛,林争辉.新一代视频编码标准H.264/AVC的特点及应用.广播电视信息,2006,12:67-68 </p><p style="text-indent: 2em;";>[4] Live ,Internet-Draft </p><p style="text-indent: 2em;";>draft-pantos-HTTP-live-streamming-05,2010 </p><p style="text-indent: 2em;";>[5] ISO/IEC 14496-10 and ITU-T Rec.H.264:Advanced video coding,2005 </p><p style="text-indent: 2em;";>[6] Thomas Schierl,Yago Sanchez de la Fuente,Ralf Globisch et ty-based </p><p style="text-indent: 2em;";>Media Delivery using SVC with RTP and HTTP edia Tools and </p><p style="text-indent: 2em;";>Applications,2010,49(3):457-476 </p><p><p><h2></h2></p></img></p> <!-- 附件 --> </article> <footer class="article-footer"> <div class="www-usbmi-com article-tags"> 继续浏览有关 <a href="/tag/127296.html" rel="tag">文件</a> <a href="/tag/95764.html" rel="tag">服务器</a> <a href="/tag/311719.html" rel="tag">直播</a> <a href="/tag/729705.html" rel="tag">媒体文件</a> 的文章 </div> <div class="www-usbmi-com share"> <h5>分享到 </h5> <div class="www-usbmi-com bdsharebuttonbox"> <a class="bds_weixin" rel="nofollow" data-cmd="weixin"></a> <a class="bds_tsina" rel="nofollow" data-cmd="tsina"></a> <a class="bds_sqq" rel="nofollow" data-cmd="sqq"></a> <a class="bds_qzone" rel="nofollow" data-cmd="qzone"></a> <a class="bds_youdao" rel="nofollow" data-cmd="youdao"></a> <a class="bds_baidu" rel="nofollow" data-cmd="baidu"></a> <a class="bds_douban" rel="nofollow" data-cmd="douban"></a> <a class="bds_bdhome" rel="nofollow" data-cmd="bdhome"></a> <a class="bds_fbook" rel="nofollow" data-cmd="fbook"></a> <a class="bds_twi" rel="nofollow" data-cmd="twi"></a> <a class="bds_more" rel="nofollow" data-cmd="more"></a> <a class="bds_count" rel="nofollow" data-cmd="count"></a> </div> <p> 转转请注明出处:<span>http://www.usbmi.com/quan/1707166986a1349970.html</span> </p> </div> </footer> <div class="www-usbmi-com relates"> <h3>与本文相关的文章</h3> <ul> <li><a href="/yejie/1743658506a2498867.html">【个人同步与备份】电脑(Windows)与手机平板(Android)之间文件同步</a></li> <li><a href="/yejie/1743661770a2499301.html">Windows 系统 DLL 文件下载</a></li> <li><a href="/yejie/1743680314a2501525.html">用EXCEL打开TXT文件的办法</a></li> <li><a href="/yejie/1743779959a2513493.html">实现windows和linux系统文件互传的最简便方法</a></li> <li><a href="/yejie/1743800827a2516267.html">mac电脑系统占了100多G如何找到没用的文件</a></li> <li><a href="/yejie/1743813740a2518003.html">ipynb文件过大打开浏览器崩溃解决方法</a></li> <li><a href="/yejie/1743813844a2518017.html">浏览器访问svn服务器文件,无法使用tortoise svn连接到svn,但可以通过Web浏览器连接...</a></li> <li><a href="/yejie/1743814347a2518083.html">SpringMVC 下载文件(直接在浏览器打开)</a></li> <li><a href="/yejie/1743814511a2518105.html">服务器开机自动启动Google浏览器,打开指定网页,并且全屏展示</a></li> <li><a href="/yejie/1743828788a2520020.html">xp计算机怎么搜素文件,windowsXP系统搜索功能查找文件与文件夹的具体步骤图解...</a></li> <li><a href="/yejie/1743860386a2524196.html">阿里云轻量应用服务器流量用完了怎么办?</a></li> <li><a href="/yejie/1743862032a2524418.html">元神一直显示连接服务器失败,原神连接服务器失败怎么办</a></li> <li><a href="/yejie/1743862302a2524455.html">python文件运行后被自动退出怎么办?</a></li> <li><a href="/yejie/1743862452a2524474.html">wifi服务器延迟高,网络延迟高怎么办(家里WIFI延迟高,教你几招搞定网络延迟)...</a></li> <li><a href="/yejie/1743862755a2524515.html">梦幻西游其他服务器显示重名,梦幻西游转区重名怎么办?梦幻西游转区重名改名要钱吗?...</a></li> <li><a href="/yejie/1743863435a2524604.html">无法发送超过2G的文件怎么办</a></li> <li><a href="/yejie/1743863932a2524662.html">一不小心给桌面粘贴了1280个文件怎么办?</a></li> <li><a href="/yejie/1743912416a2531123.html">vsCode 在windows环境编辑linux上的文件(SFTP)</a></li> <li><a href="/yejie/1743912971a2531191.html">Windows系统缺少找不到libusb0.dll文件的解决办法</a></li> <li><a href="/yejie/1743913015a2531199.html">Win11:系统属性,由于启动计算机时出现了页面文件配置问题,Windows 在你的计算机上创建了一个临时页面文件。</a></li> </ul> </div> <div id="respond" class="no_webshot"> <form action="/comment/create/1349970.html?safe_token=WAu78NVbJmx5l7LuETUs5fMrTdh5VJnPRJMwOuFQbrRI7dvrqe5f_2BIbSDzUvt725DWQNNLxuBxkeDsgqs_2FLEvA_3D_3D" method="post" id="commentform"> <div class="www-usbmi-com comt-title"> <span style="font-size: 16px;">发布评论</span> </div> <div class="www-usbmi-com comt"> <div class="www-usbmi-com comt-box"> <textarea placeholder="写点什么..." class="input-block-level comt-area" name="message" id="comment" cols="100%" rows="3" tabindex="1" onkeydown="if(event.ctrlKey&&event.keyCode==13){document.getElementById('submit').click();return false};"></textarea> <div class="www-usbmi-com comt-ctrl"> <button class="btn btn-primary pull-right" type="submit" name="submit" tabindex="5"> <i class="icon-ok-circle icon-white icon12"></i> 提交评论 </button> </div> </div> </div> </form> </div> <div id="postcomments"> <h3 id="comments"> 评论列表<b> (0)</b> </h3> <ol class="commentlist"> <li class="sn-empty">暂无评论</li> </ol> </div> </div> </div> <aside class="sidebar"> <div class="widget d_postlist"> <h3 class="widget_tit">热门推荐</h3> <ul> <li> <a href="/yejie/1740361685a2308486.html"> <!--<span class="thumbnail">--> <!--<img src="/view/img/nopic.png" alt="各大搜索引擎蜘蛛IP地址大全"/>--> <!--</span>--> <span class="text">各大搜索引擎蜘蛛IP地址大全</span> <span class="muted">1月前</span> <span class="muted">0评论</span> </a> </li> <li> <a href="/yejie/1740405821a2314031.html"> <!--<span class="thumbnail">--> <!--<img src="/view/img/nopic.png" alt="win32程序判断windows系统(是否为win7或是更高版本)"/>--> <!--</span>--> <span class="text">win32程序判断windows系统(是否为win7或是更高版本)</span> <span class="muted">1月前</span> <span class="muted">0评论</span> </a> </li> <li> <a href="/yejie/1740406718a2314141.html"> <!--<span class="thumbnail">--> <!--<img src="/view/img/nopic.png" alt="Windows7系统安装java 配置环境变量"/>--> <!--</span>--> <span class="text">Windows7系统安装java 配置环境变量</span> <span class="muted">1月前</span> <span class="muted">0评论</span> </a> </li> <li> <a href="/yejie/1740806790a2332925.html"> <!--<span class="thumbnail">--> <!--<img src="/view/img/nopic.png" alt="win7虚拟机VCMI无法自动安装驱动程序"/>--> <!--</span>--> <span class="text">win7虚拟机VCMI无法自动安装驱动程序</span> <span class="muted">1月前</span> <span class="muted">0评论</span> </a> </li> <li> <a href="/yejie/1741118686a2373314.html"> <!--<span class="thumbnail">--> <!--<img src="/view/img/nopic.png" alt="2024最新版IntelliJ IDEA安装教程(非常详细)从零基础入门到精通,看完这一篇就够了_idea2024"/>--> <!--</span>--> <span class="text">2024最新版IntelliJ IDEA安装教程(非常详细)从零基础入门到精通,看完这一篇就够了_idea2024</span> <span class="muted">1月前</span> <span class="muted">0评论</span> </a> </li> <li> <a href="/yejie/1742007165a2394897.html"> <!--<span class="thumbnail">--> <!--<img src="/view/img/nopic.png" alt="windows10子系统安装CentOS7"/>--> <!--</span>--> <span class="text">windows10子系统安装CentOS7</span> <span class="muted">1月前</span> <span class="muted">0评论</span> </a> </li> <li> <a href="/yejie/1742615817a2459633.html"> <!--<span class="thumbnail">--> <!--<img src="/view/img/nopic.png" alt="计算机共享文件打不开怎么办,能共享到文件夹但打不开共享文件怎么办"/>--> <!--</span>--> <span class="text">计算机共享文件打不开怎么办,能共享到文件夹但打不开共享文件怎么办</span> <span class="muted">25天前</span> <span class="muted">0评论</span> </a> </li> <li> <a href="/yejie/1743815893a2518288.html"> <!--<span class="thumbnail">--> <!--<img src="/view/img/nopic.png" alt="python实现打开网页后并且不用关闭网页就能自动刷新"/>--> <!--</span>--> <span class="text">python实现打开网页后并且不用关闭网页就能自动刷新</span> <span class="muted">11天前</span> <span class="muted">0评论</span> </a> </li> </ul> </div> <div class="widget d_tag"> <h3 class="widget_tit">热门标签</h3> <div class="d_tags"> <a href="/tag/800444.html">指的是 (3)</a> <a href="/tag/800442.html">科技有限公司 (3)</a> <a href="/tag/800370.html">之美 (3)</a> <a href="/tag/800332.html">一个函数 (3)</a> <a href="/tag/800327.html">莫慌 (3)</a> <a href="/tag/800310.html">我该 (3)</a> <a href="/tag/800307.html">行间 (3)</a> <a href="/tag/800295.html">preflight (3)</a> <a href="/tag/800266.html">mujoco (3)</a> <a href="/tag/800249.html">被背刺 (3)</a> <a href="/tag/800236.html">第四篇 (3)</a> <a href="/tag/800224.html">第六天 (3)</a> <a href="/tag/800163.html">park (3)</a> <a href="/tag/800162.html">必不可少 (3)</a> <a href="/tag/800154.html">家店 (3)</a> <a href="/tag/800132.html">一个月 (3)</a> <a href="/tag/800111.html">所见即所得 (3)</a> <a href="/tag/800064.html">appPython (3)</a> <a href="/tag/800057.html">TSForge (3)</a> <a href="/tag/800051.html">terminate (3)</a> </div> </div> <div class="widget widget_recent_entries"> <h3 class="widget_tit">近期文章</h3> <ul> <li> <a href="/www/1731299534a1879021.html">服务器前面灯一直闪烁什么原因</a> </li> <li> <a href="/www/1731299512a1879020.html">qq华夏端游什么时候开的服务器</a> </li> <li> <a href="/www/1731299508a1879019.html">监控机房的服务器是做什么用的</a> </li> <li> <a href="/www/1731299504a1879018.html">轻量云服务器可以干什么呢视频</a> </li> <li> <a href="/www/1731299497a1879017.html">服务器4u为什么叫4u</a> </li> <li> <a href="/yejie/1744044899a2548261.html">《操作系统真象还原》第一章——部署工作环境</a> </li> <li> <a href="/yejie/1744044730a2548239.html">网心云OECOEC-turbo刷机问题——刷机教程、救砖方法、技术要点及下载boot失败异常解决尝试</a> </li> <li> <a href="/yejie/1744044680a2548232.html">ESP32S3 -- Arduino</a> </li> <li> <a href="/yejie/1744044600a2548220.html">Ubuntu20.04双系统安装及CUDA,ROS等工具安装超完善版(持续更新中)</a> </li> <li> <a href="/yejie/1744044268a2548176.html">小白必读:西门子S7-200SMART 通信端口及连接方式</a> </li> <li> <a href="/tong/1688141062a228.html">手机处理器核心真的是越多越好吗?</a> </li> <li> <a href="/tong/1688141046a227.html">绿色信息通信技术实现节能减排任重道远</a> </li> <li> <a href="/tong/1688141030a226.html">多款恶意软件袭击手机:可屏蔽10086提醒短信</a> </li> <li> <a href="/tong/1688141014a225.html">智能手机行业软件化令大量企业遭淘汰</a> </li> <li> <a href="/tong/1688141004a224.html">中移动称WLAN认证无漏洞 所谓破解是内置账号</a> </li> <li> <a href="/ruanjian/1688171833a358.html">Android平台恶意软件缠身威胁增155%</a> </li> <li> <a href="/ruanjian/1688171803a357.html">与曾荫权蜡像合影成诈骗工具 骗60万人30亿资金</a> </li> <li> <a href="/ruanjian/1688171781a356.html">Google今日发布Android 4.0.4版本更新</a> </li> <li> <a href="/ruanjian/1688171755a355.html">客户关系管理软件(CRM)2012五大趋势</a> </li> <li> <a href="/ruanjian/1688171741a354.html">Android手机管理软件客户端耗电量对比</a> </li> <li> <a href="/yingjian/1688195137a418.html">平板电脑推荐:性价高便宜又好的OYOpad</a> </li> <li> <a href="/yingjian/1688195109a417.html">再次刷新DIO电脑配置极限 一体机i5+HD6670实测</a> </li> <li> <a href="/yingjian/1688195083a416.html">主板温度过高怎么办?小编支招来帮忙</a> </li> <li> <a href="/yingjian/1688195065a415.html">三访i-潘多拉CEO:同行非冤家技术革新仍是关键</a> </li> <li> <a href="/yingjian/1688195043a414.html">NEC研发可自由弯曲超薄电池 充电仅需30秒</a> </li> <li> <a href="/changshi/1700293782a942454.html">在VMware Workstation中创建一个虚拟软盘,并在Windows XP上使用</a> </li> <li> <a href="/changshi/1700293763a942452.html">微软服务器系统版本有几个,windows系统有几个版本</a> </li> <li> <a href="/changshi/1700293210a942419.html">【VMware】Windows系统启用共享文件夹</a> </li> <li> <a href="/changshi/1700292900a942406.html">windows查看系统证书</a> </li> <li> <a href="/changshi/1700291427a942332.html">xp桌面计算机在哪个文件夹,windows桌面文件路径 windows xp 桌面文件默认存放路径...</a> </li> <li> <a href="/weixiu/1700293733a942449.html">TCPIP的基础知识</a> </li> <li> <a href="/weixiu/1700293719a942448.html">Google关键词挖掘方法</a> </li> <li> <a href="/weixiu/1700293655a942443.html">水利部加快推进小型水库除险加固,大坝安全监测是重点</a> </li> <li> <a href="/weixiu/1700293641a942442.html">element 弹窗浏览器后退</a> </li> <li> <a href="/weixiu/1700293566a942436.html">计算机找不到MSVCR120.dll,MSVCR120.dll丢失的三种解决方法</a> </li> <li> <a href="/quan/1730917268a1861029.html">爱国者哥窑中国品牌的文化复兴</a> </li> <li> <a href="/quan/1730915900a1861021.html">惠普PageWide Managed MFP P77740z 管理型彩色页宽复合机说明书</a> </li> <li> <a href="/quan/1730915598a1861019.html">小巧而高能 HP Z240图形工作站的“黑科技”</a> </li> <li> <a href="/quan/1730914691a1861014.html">简析商业伦理视角下企业的社会责任</a> </li> <li> <a href="/quan/1730913922a1861009.html">惠普笔记本装XP操作系统详细说明</a> </li> </ul> </div> </aside> </section> <footer class="footer"> <div class="footer-inner"> <div class="copyright pull-left"> CopyRight © 2022 All Rights Reserved. Powered by <a href="/">USB迷 | 专注于互联网分享</a> <P><a target="_blank" rel="nofollow" href="https://beian.miit.gov.cn/" style="font-size: 12px;">沪ICP备2024057019号-10</a> </P> </div> </div> </footer> <script src="/view/template/d8/js/jquery.js?2.3.0"></script> </body> </html>