1. linux C语言的头文件对应Windows下的头文件是哪些
linux和windows平台下,能够对应的头文件就是符合C11标准的头文件。其他的头文件不仅和平台有关系,还和平台下的编译环境有关,很难画上等号的。
C语言符合标准的头文件.
#include <assert.h> //设定插入点
#include <ctype.h> //字符处理
#include <errno.h> //定义错误码
#include <float.h> //浮点数处理
#include <fstream.h> //文件输入/输出
#include <iomanip.h> //参数化输入/输出
#include <iostream.h> //数据流输入/输出
#include <limits.h> //定义各种数据类型最值常量
#include <locale.h> //定义本地化函数
#include <math.h> //定义数学函数
#include <stdio.h> //定义输入/输出函数
#include <stdlib.h> //定义杂项函数及内存分配函数
#include <string.h> //字符串处理
#include <strstrea.h> //基于数组的输入/输出
#include <time.h> //定义关于时间的函数
#include <wchar.h> //宽字符处理及输入/输出
#include <wctype.h> //宽字符分类
linux常用头文件如下:
POSIX标准定义的头文件
<dirent.h> 目录项
<fcntl.h> 文件控制
<fnmatch.h> 文件名匹配类型
<glob.h> 路径名模式匹配类型
<grp.h> 组文件
<netdb.h> 网络数据库操作
<pwd.h> 口令文件
<regex.h> 正则表达式
<tar.h> TAR归档值
<termios.h> 终端I/O
<unistd.h> 符号常量
<utime.h> 文件时间
<wordexp.h> 字符扩展类型
-------------------------
<arpa/inet.h> INTERNET定义
<net/if.h> 套接字本地接口
<netinet/in.h> INTERNET地址族
<netinet/tcp.h> 传输控制协议定义
-------------------------
<sys/mman.h> 内存管理声明
<sys/select.h> Select函数
<sys/socket.h> 套接字借口
<sys/stat.h> 文件状态
<sys/times.h> 进程时间
<sys/types.h> 基本系统数据类型
<sys/un.h> UNIX域套接字定义
<sys/utsname.h> 系统名
<sys/wait.h> 进程控制
------------------------------
POSIX定义的XSI扩展头文件
<cpio.h> cpio归档值
<dlfcn.h> 动态链接
<fmtmsg.h> 消息显示结构
<ftw.h> 文件树漫游
<iconv.h> 代码集转换使用程序
<langinfo.h> 语言信息常量
<libgen.h> 模式匹配函数定义
<monetary.h> 货币类型
<ndbm.h> 数据库操作
<nl_types.h> 消息类别
<poll.h> 轮询函数
<search.h> 搜索表
<strings.h> 字符串操作
<syslog.h> 系统出错日志记录
<ucontext.h> 用户上下文
<ulimit.h> 用户限制
<utmpx.h> 用户帐户数据库
-----------------------------
<sys/ipc.h> IPC(命名管道)
<sys/msg.h> 消息队列
<sys/resource.h>资源操作
<sys/sem.h> 信号量
<sys/shm.h> 共享存储
<sys/statvfs.h> 文件系统信息
<sys/time.h> 时间类型
<sys/timeb.h> 附加的日期和时间定义
<sys/uio.h> 矢量I/O操作
------------------------------
POSIX定义的可选头文件
<aio.h> 异步I/O
<mqueue.h> 消息队列
<pthread.h> 线程
<sched.h> 执行调度
<semaphore.h> 信号量
<spawn.h> 实时spawn接口
<stropts.h> XSI STREAMS接口
<trace.h> 事件跟踪
2. LIUNX的历史
到http://www.xsblog.com/user1/271/archives/2005/640.shtml看看吧,很详细的。
UNIX这个名字早已被众多用户所熟知。作为一个操作系统,它以其独特的魅力----即开放性、可移植性、和多用户多任务等特点,不仅赢得了广大用户的喜爱,同时也受到许多计算机厂商的青睐。
Unix操作系统的历史漫长而曲折,它的第一个版本是1969年由KeThompson在AT&T贝尔实验室实现的,运行在一台 DECPDP-7计算机上。这个版本实现了一个文件系统、一个命令解释器(shell)和一些简单的文件工具。Ken和他的伙伴们使用GE系统来为 PDP -7进行交叉编译,很快写好了汇编器,使系统有了自支持的能力。这个系统已基本成型,其文件系统与现在的文件系统相似,它使用i结点,有特殊文件类型支持目录和设备,而且可以同时支持两个用户。
与当时的一个名为MULTICS(MULTiplexed Information and Computing System)的操作系统相比,UNIX显得异常短小精悍,它曾被玩笑地称作"UNICS",代表 UNiplexed Information and Computing System. 有人称 MULTICS 代表 "Many Unneccessarily Large Tables In Core Simulataneously",而UNIX则是裁减了的 MULTICS,不久,UNICS变成了UNIX而且被流传下来。
1970年,UNIX被移植到PDP-11/20上,这需要很大的工作量,因为整个系统全是用汇编语言编写的。
C语言的诞生给系统设计带来了新的契机, Ken Thompson和Dennis Ritchie使用C语言对整个系统进行了再加工和编写,使得Unix能够很容易的移植到其他硬件的计算机上。从那以后,Unix系统开始了令人瞩目的发展。由于此时AT&T还没有把Unix作为它的正式商品,因此研究人员只是在实验室内部使用并完善它。正是由于Unix是被作为研究项目,其他科研机构和大学的计算机研究人员也希望能得到这个系统,以便进行自己的研究。AT&T以分发许可证的方法,对Unix仅仅收取很少的费用,大学和研究机构就能获得Unix的源代码以进行研究。Unix的源代码被散发到各个大学,一方面使得科研人员能够根据需要改进系统,或者将其移植到其他的硬件环境中去,另一方面培养了懂得Unix使用和编程的大量的学生,这使得Unix的普及更为广泛。
由于操作系统的开发相当困难,只有少数的计算机厂商,如IBM、Digital等大型公司,才拥有自己的操作系统,而其他众多生产计算机的硬件厂商则采用别人开发的操作系统。因为Unix不需要太多的花费,因此很多厂商就选择了Unix作为他们生产的计算机使用的操作系统。他们把Unix移植到自己的硬件环境下,而不必从头开发一个操作系统。
到了70年代中后期,在Unix发展到了版本6之后,AT&T认识到了Unix的价值,成立了Unix系统实验室(Unix System Lab,USL)来继续发展Unix。因此AT&T一方面继续发展内部使用的Unix版本7,一方面由USL开发对外正式发行的Unix版本,同时AT&T也宣布对Unix产品拥有所有权。几乎在同时,加州大学伯克利分校计算机系统研究小组(CSRG)使用 Unix对操作系统进行研究,因此他们的研究成果就反映在他们使用的Unix中。他们对Unix的改进相当多,增加了很多当时非常先进的特性,包括更好的内存管理,快速且健壮的文件系统等,大部分原有的源代码都被重新写过,以支持这些新特性。很多其他Unix使用者,包括其他大学和商业机构,都希望能得到 CSRG改进的Unix系统。因此CSRG中的研究人员把他们的Unix组成一个完整的Unix系统——BSD Unix (Berkeley Software Distribution),向外发行。
到此,UNIX就有了一个大的分支,分为AT&T UNIX 和 BSD Unix,现代的Unix版本大部分都是这两个版本的衍生产品。
Linux是一种操作系统
1991年8月,芬兰的一个学生在comp.os.minix新闻组贴上了以下这段话:
你好,所有使用minix的人-我正在为386(486)AT做一个免费的操作系统(只是为了爱好,不会象gnu那样很大很专业).
这名学生就是LinusTorvalds,而他所说的'爱好'就变成我们今天知道的Linux.
Linux引起黑客们(hacker)的注意,通过计算机网络加入了Linux的内核开发,Linux倾向于成为一个黑客的系统----直到今天,在Linux社区里内核的开发被认为是真正的编程.由于一批高水平黑客的加入,使Linux发展迅猛.
作为一个具备所有特性的类似POSIX的操作系统,Linux并非仅由Linus一人开发,而是由全世界几百个程序员共同开发的.有趣的是这个巨大的全世界的开发活动不是很协调.当然,Linus为内核定了调子,但Linux并不只是内核.没有一个管理组织;一个俄罗斯学生得到一块新的主板,就写了驱动程序支持这块主板.马里兰的一个系统管理员需要备份软件,就写一个,并把它传给任何需要的人.好象总是在正确的时间发生正确的事.
到1993年底94年初,Linux1.0终于诞生了!Linux1.0已经是一个功能完备的操作系统,而且内核写得紧凑高效,可以充分发挥硬件的性能,在4M内存的80386机器上也表现得非常好,至今人们还在津津乐道于此,不过自从2.1.xx系列的内核Linux开始走高端的路子----硬件的发展太快了,但是Linux不会失去它的本色.Linux具有良好的兼容性和可移植性,大约在1.3版本之后,开始向其他硬件平台上移植,包括号称最快的CPU---DigitalAlpha(至少目前主频是最高的).所以不要总把Linux与低档硬件平台联系到一块,Linux发展到今天,这是一个误区,它只是将硬件的性能充分发挥出来而已,Linux必将从低端应用横扫到高端应用!
在Linux的发展历程上还有一件重要的事:Linux加入GNU并遵循公共版权许可证(GPL).此举大大加强了GNU和Linux,几乎所有应用的GNU库/软件都移植到Linux,完善并提高了Linux的实用性,而GNU有了一个根基,我现在也搞不清楚到底是GNULinux呢还是基于Linux的GNU.:-)更重要的是遵循公共版权许可证,在继承自由软件的精神的前提下,不再排斥对自由软件的商业行为(如把自由软件打包以光盘形式出售),不排斥商家对自由软件进一步开发,不排斥在Linux上开发商业软件.
另一个有趣的事是你可不花钱就得到Linux.你只要有时间并愿意下载,你就可以免费得到大多数软件.
为了使Linux变的容易使用,Linux也有了许多发布版本,发布版实际上就是一整套完整的程序组合。现在已经有许多不同的Linux发行版和各自的版本号,为了不产生混淆,我们先解释一些常提到的术语。
当我们提到的Linux时,一般是指"RealLinux",即内核,是所有UNIX操作系统的“心脏”。但光有linux并不能成为一个可用的操作系统。还需要许多软件包,编译器,程序库文件,Xwindow系统等等。因为组合方式不同,面向用户对象不同,所以这就是为什么有许多不同的Linux发行版的原因。
各地出现了很多的Linux发行版,如Slackware,Redhat,Suse,TurboLinux,OpenLinux等十多种,而且还在增加,注意,严格来说,你不能说"RedhatLinux""SuseLinux""SlackwareLinux"等等,Linux主要指操作系统内核,对所有发行版内核原代码都是一样的(但集成的内核版本可能因发行时间不同而有所不同).
越来越多的公司在Linux上开发商业软件或把其他Unix平台的软件移植到Linux上来,如今很多IT业界的大腕IBM,Intel,Oracle,Infomix,Sysbase,Corel,Netscape,CA,Novell等都宣布支持Linux!商家的加盟弥补了纯自由软件的不足和发展障碍,Linux迅速普及到广大计算机爱好者,并且进入商业应用,正是打破某些公司垄断文化圈的希望所在!!
Linux是爱好者们通过Internet协同开发出来的,当然它的网络功能十分强大,比如你可以通过ftp,nfs等来安装Linux,用它来做网关等等.随着Linux的发展衍生出来的应用恐怕出乎Linus本人最初的预料,如有人用它来做路由器,有人来做嵌入式系统,有人来做实时性系统......常有新手问Linux能做什么,其实它不象那些中看不中用的操作系统,不在于你用它能干什么,而在于你想干什么!
3. SUSE Linux 11下glibc依赖问题
0.以下在系统CentOS 6.3 x86_64上操作
1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的:
[cpp]view plain
[ghui@StuOSbin]$pwd
/var/VMdisks/cross/mingw32/bin
[ghui@StuOSbin]$ls
lreleaseQtCore4.dllQtNetwork4.dllQtSql4.dllQtXml4.dll
mocQtDeclarative4.dllQtOpenGL4.dllQtSvg4.dllrcc
phonon4.dllQtGui4.dllQtScript4.dllQtTest4.dlluic
qmakeQtMultimedia4.dllQtScriptTools4.dllQtWebKit4.dll
[ghui@StuOSbin]$./qmake
./qmake:/lib64/libc.so.6:version`GLIBC_2.14'notfound(requiredby./qmake)
2.查看系统glibc支持的版本:
[cpp]view plain
[ghui@StuOSbin]$strings/lib64/libc.so.6|grepGLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
[cpp]view plain
[ghui@StuOSbin]$rpm-qa|grepglibc
glibc-static-2.12-1.80.el6_3.6.x86_64
glibc-headers-2.12-1.80.el6_3.6.x86_64
glibc-common-2.12-1.80.el6_3.6.x86_64
glibc-devel-2.12-1.80.el6_3.6.x86_64
glibc-static-2.12-1.80.el6_3.6.i686
glibc-devel-2.12-1.80.el6_3.6.i686
glibc-2.12-1.80.el6_3.6.i686
glibc-2.12-1.80.el6_3.6.x86_64
3.可以看到最高只支持2.12版本,所以考虑编译解决这个问题:
a. 到下载最新版本,我这里下载了glibc-2.14.tar.xz这个版本,解压到任意目录准备编译
b.这里解压到/var/VMdisks/glibc-2.14/
[cpp]view plain
[ghui@StuOSbin]$cd/var/VMdisks/glibc-2.14/
[[email protected]]$pwd
/var/VMdisks/glibc-2.14
[[email protected]]$ls
abilistconfig.h.inintlREADME.libm
abi-tagsconfig.logioresolv
aclocal.m4config.make.inlibc-abisresource
aoutconfigurelibidnrt
argpconfigure.inlibioRules
assertconformLICENSESscripts
autom4te.cacheCONFORMANCElocalesetjmp
bitsCOPYINGlocaledatashadow
BUGSCOPYING.LIBloginshlib-versions
buildcppflags-iterator.mkmachsignal
CANCEL-FCT-WAIVEcryptMakeconfigsocket
CANCEL-FILE-WAIVEcsuMakefilesoft-fp
catgetsctypeMakefile.instdio-common
ChangeLogdebugMakerulesstdlib
ChangeLog.1direntmallocstreams
ChangeLog.10dlfcnmanualstring
ChangeLog.11elfmathsunrpc
ChangeLog.12extra-lib.mkmiscsysdeps
ChangeLog.13extra-moles.mkNAMESPACEsysvipc
ChangeLog.14FAQNEWStermios
ChangeLog.15FAQ.innistest-skeleton.c
ChangeLog.16gmonNOTEStime
ChangeLog.17gnulibnptltimezone
ChangeLog.2grpnptl_dbtls.make.c
ChangeLog.3gshadownscdversion.h
ChangeLog.4hesiodnssVersions.def
ChangeLog.5hurdo-iterator.mkwcsmbs
ChangeLog.6iconvpowctype
ChangeLog.7iconvdataposixWUR-REPORT
ChangeLog.8includePROJECTS
ChangeLog.9inetpwd
confINSTALLREADME
c.在glibc源码目录建立构建目录,并cd进入构建目录
[cpp]view plain
[[email protected]]$mkdirbuild
[cpp]view plain
[[email protected]]$cdbuild
d.运行configure配置,make && sudo make install
[cpp]view plain
[ghui@StuOSbuild]$../configure--prefix=/opt/glibc-2.14
[ghui@StuOSbuild]$make-j4
[ghui@StuOSbuild]$sudomakeinstall
[sudo]passwordforghui:
4.临时修改环境变量
[cpp]view plain
[ghui@StuOSbin]$exportLD_LIBRARY_PATH=/opt/glibc-2.14/lib:$LD_LIBRARY_PATH
[cpp]view plain
[[email protected]]$cd/var/VMdisks/cross/mingw32/bin/
[cpp]view plain
[ghui@StuOSbin]$./qmake
Usage:./qmake[mode][options][files]
QMakehastwomodes,
someheuristics,.Normallyyou
shouldn'tneedtospecifyamode,
modeforqmake,
...
此时运行正常,问题解决。
By ghui
00:10 - 2013-01-04
4. windows与linux 头文件对照
1.linux和windows平台下,能够对应的头文件就是符合C11标准的头文件。其他的头文件不仅和平台有关系,还和平台下的编译环境有关,很难画上等号的。
2.C语言符合标准的头文件
#include <assert.h> //设定插入点
#include <ctype.h> //字符处理
#include <errno.h> //定义错误码
#include <float.h> //浮点数处理
#include <fstream.h> //文件输入/输出
#include <iomanip.h> //参数化输入/输出
#include <iostream.h> //数据流输入/输出
#include <limits.h> //定义各种数据类型最值常量
#include <locale.h> //定义本地化函数
#include <math.h> //定义数学函数
#include <stdio.h> //定义输入/输出函数
#include <stdlib.h> //定义杂项函数及内存分配函数
#include <string.h> //字符串处理
#include <strstrea.h> //基于数组的输入/输出
#include <time.h> //定义关于时间的函数
#include <wchar.h> //宽字符处理及输入/输出
#include <wctype.h> //宽字符分类
3.linux常用头文件如下:
POSIX标准定义的头文件
<dirent.h> 目录项
<fcntl.h> 文件控制
<fnmatch.h> 文件名匹配类型
<glob.h> 路径名模式匹配类型
<grp.h> 组文件
<netdb.h> 网络数据库操作
<pwd.h> 口令文件
<regex.h> 正则表达式
<tar.h> TAR归档值
<termios.h> 终端I/O
<unistd.h> 符号常量
<utime.h> 文件时间
<wordexp.h> 字符扩展类型
-------------------------
<arpa/inet.h> INTERNET定义
<net/if.h> 套接字本地接口
<netinet/in.h> INTERNET地址族
<netinet/tcp.h> 传输控制协议定义
-------------------------
<sys/mman.h> 内存管理声明
<sys/select.h> Select函数
<sys/socket.h> 套接字借口
<sys/stat.h> 文件状态
<sys/times.h> 进程时间
<sys/types.h> 基本系统数据类型
<sys/un.h> UNIX域套接字定义
<sys/utsname.h> 系统名
<sys/wait.h> 进程控制
------------------------------
POSIX定义的XSI扩展头文件
<cpio.h> cpio归档值
<dlfcn.h> 动态链接
<fmtmsg.h> 消息显示结构
<ftw.h> 文件树漫游
<iconv.h> 代码集转换使用程序
<langinfo.h> 语言信息常量
<libgen.h> 模式匹配函数定义
<monetary.h> 货币类型
<ndbm.h> 数据库操作
<nl_types.h> 消息类别
<poll.h> 轮询函数
<search.h> 搜索表
<strings.h> 字符串操作
<syslog.h> 系统出错日志记录
<ucontext.h> 用户上下文
<ulimit.h> 用户限制
<utmpx.h> 用户帐户数据库
-----------------------------
<sys/ipc.h> IPC(命名管道)
<sys/msg.h> 消息队列
<sys/resource.h>资源操作
<sys/sem.h> 信号量
<sys/shm.h> 共享存储
<sys/statvfs.h> 文件系统信息
<sys/time.h> 时间类型
<sys/timeb.h> 附加的日期和时间定义
<sys/uio.h> 矢量I/O操作
------------------------------
POSIX定义的可选头文件
<aio.h> 异步I/O
<mqueue.h> 消息队列
<pthread.h> 线程
<sched.h> 执行调度
<semaphore.h> 信号量
<spawn.h> 实时spawn接口
<stropts.h> XSI STREAMS接口
<trace.h> 事件跟踪
5. 如何为一个直播流配置转码功能
对硬件和驱动的要求
Wowza Transcoder 只能在64位的Windows和Linux系统上运行。此外也不支持Mac OS X
系统。
Wowza Transcoder在64位的Windows Server 上运行时, 系统必须先具备以下功能:
.NET Framework 3.5.1
Desktop Experience
硬件加速
Wowza Transcoder
支持Windows 和 LinuxIntel系统上的Quick Sync 和 NVIDIA NVENC 加速编码以及Windows系统上的NVIDIA CUDA
加速编码。 下面的文章介绍了关于这些技术的更多硬件要求:
Server
specifications for Intel Quick Sync acceleration
Intel
Quick Sync acceleration on Linux
Server
specifications for NVIDIA NVENC and NVIDIA CUDA acceleration
NVIDIA
NVENC accelerated encoding on Linux
注意:
你应该在尝试硬件加速转码技术之前,先使用默认的MainConcept软件转码技术。MainConcept软件使用任何硬件加速功能。关于如何调试硬件编码的更多信息,请阅读如何验证Wowza
Transcoder正在使用哪一种编码技术。
在较新版本的Windows系统上,当Wowza Media Server作为系统服务运行时,由于Session 0
Isolation的安全原因,Intel Quick Sync 和 NVIDIA CUDA
硬件加速功能可能无法使用。要了解更多关于如何解决这个问题,请阅读作为Windows系统服务运行时,Transcoder插件如何使用硬件加速功能。
当使用Windows远程桌面时, Quick Sync 加速可能无法使用。
支持的音视频编码格式
为了将输入流(被称作"channels")进行转码或转换为多个不同输出码率的输出流,Wowza
Transcoder 插件提供了很多功能,它支持以下音视品编码格式:
输入流:
视频解码: H.264, MPEG-2, MPEG-4 Part 2
音频解码: AAC, MP3, MPEG-1 Layer 1/2, Speex, G.711 (μ-law and
A-law)
输出流:
视频编码: H.264, H.263v2
音频编码: AAC
注意:
对于mp3格式的音频,系统支持以下采样率: 48000, 44100, and 32000
Instream CEA-608 隐藏字幕(closed caption)可以通过Wowza Transcoder 插件采用Apple HLS
流媒体被传送给基于iOS的终端设备。要了解更多信息,请阅读如何为HLS流媒体配置隐藏字幕(closed captioning)。
当使用硬件加速特性时,不支持H.263 视频输出。
关于Transcoder模版
Wowza Transcoder
使用一个模版系统来为输出流创建转码后的输出流,这个模版可以控制各种编码参数。在[install-dir]/transcoder/templates目录下有三个默认的模版文件,基本满足了常规的转码要求:
transrate.xml, transcode.xml, 以及 audioonly.xml。
要了解更多关于个性化的的转码模版,请阅读模版的配置.
Wowza
Transcoder 模版系统提供一个将多个输出流组合在一个逻辑组的方法(被称作 Stream Name
Groups)。可以用ngrp:前缀来引用这个逻辑组以实现码率自适应。
Server.license 的配置(Wowza Media Server Perpetual Edition)
Wowza Media
Server和增值插件的授权码(license key) (包括Wowza Transcoder
插件)被存储在[install-dir]/conf/Server.license。
%WMSCONFIG_HOME%\conf\Server.license
- Windows
/Library/WowzaMediaServer/conf/Server.license
- Mac OS X
/usr/local/WowzaMediaServer/conf/Server.license
-
Linux/Unix
试用、日租、月租模式的授权只需要一个license key,但是永久授权模式需要多个license
key。
使用增值插件时,用文本编辑器打开Server.license文件,在每一个新行输入一个新的license
key。当服务被重启后,新的license将会生效。
由于多个授权码是叠加的,因此在添加一个新的授权码时,去保留文件中原有的授权码,然后在新的一行填写新的授权码。多个授权码在文件中的前后顺序是无关紧要的。
授权码的前5位和后5位字符将显示在控制台的输出中信息。
下面是一个Server.license
文件的示例,包括一个永久授权的Wowza Media Server 授权码、两个Wowza Transcoder 插件授权码以及一个Wowza nDVR
插件授权码:
SVRP3-LaGpC-ZrTD9-F4Y3S-a9bR2-h5t3C
TRN23-Ry6qe-4mT8J-yKj2W-4N5sH-2Td3a
TRN13-y9Gj2-kneqT-2zjHp-GadzB-N6fwa
DVRA3-k3r3R-nzxCB-ypjs5-Sk3y9-ahFdF
Application.xml的配置
建立一个直播应用,然后对Application.xml文件进行一些配置以使用Wowza
Transcoder插件,请按下面进行:
创建一个应用的目录[install-dir]/applications/live.
创建一个配置目录[install-dir]/conf/live
,将[install-dir]/conf/Application.xml 文件拷贝到这个新目录下
用文本编辑器打开这个新拷贝的Application.xml 文件,然后做如下改动(有些设置可能已经配好了):
将Streams/StreamType 设置为:
Code:
<StreamType>live</StreamType>
将HTTPStreamers 设置为:
Code:
<HTTPStreamers>cupertinostreaming,smoothstreaming,sanjosestreaming</HTTPStreamers>
将Streams/LiveStreamPacketizers 设置为:
Code:
<LiveStreamPacketizers>cupertinostreamingpacketizer,smoothstreamingpacketizer,sanjosestreamingpacketizer</LiveStreamPacketizers>
将RTP/Authentication/PlayMethod 设置为:
Code:
<PlayMethod>none</PlayMethod>
将Transcoder/LiveStreamTranscoder 设置为:
Code:
<LiveStreamTranscoder>transcoder</LiveStreamTranscoder>
如果输入流是H.264视频编码AAC 或 MP3
音频编码,你希望创建多个不同码率的输出流,以实现码率自适应,请将Transcoder/Templates 设置为:
Code:
<Templates>${SourceStreamName}.xml,transrate.xml</Templates>
如果输入流是MPEG-2
或 MPEG-4 Part 2 视频编码,你希望转码为H.264 和 AAC,以面向Wowza支持的例如Adobe
Flash播放器、Apple iOS 设备和Microsoft Silverlight的播放器技术, 请将Transcoder/Templates
设置为:
Code:
<Templates>${SourceStreamName}.xml,transcode.xml</Templates>
注意:
当使用transcode.xml时,同样也支持多码率自适应。
如果你希望转码的输入流时SHOUTcast 或 Icecast MP3
媒体流,请在MediaCaster/Properties 中添加下面的属性以配置Wowza Media Server
在每个包中发送一个MP3 帧:
Code:
<Property>
<Name>shoutcastMP3GroupCount</Name>
<Value>1</Value>
<Type>Integer</Type>
</Property>
(只针对基于RTSP/RTP的编码器),用文本编辑器打开[install-dir]/conf/publish.password文件,添加一个用户名和密码来控制对RTSP/RTP
推流的访问。 下面是一个例子,用户名为myuser,密码为mypassword)。
Code:
# Publish password file (format [username][space][password])
# username password
myuser mypassword
启动 Wowza Media Server.
模版的配置
如果你使用系统自带的transrate.xml 或 transcode.xml 模版文件,
转码后的输出流将使用下面的stream names:
[stream-name]_360p: Main Profile stream
[stream-name]_160p: Baseline Profile stream
ngrp:[stream-name]_all: 面向Apple HTTP Live Streaming (cupertino)、
Microsoft Smooth Streaming以及 Adobe HTTP Dynamic Streaming
(sanjose)的码率自适应
[stream-name] 是输入到Wowza Media
Server的输入流。例如,一个输入是myStream,
那么转码后的输出流就是myStream_360p、myStream_160p以及
ngrp:myStream_all。
转码的工作机制很简单。推送到live应用的所有输入流将被采用在[install-dir]/conf/[application]/Application.xml文件Transcoder/Templates中设置的转码模版文件中的参数来转码。
你可以根据需要配置多个转码后的输出流。
让我们仔细看以下转码模版中的配置。下面是随Wowza Media
Server安装后自带的transrate.xml模版文件:
Code:
<!-- Example template for transrate, procing four new streams at different bitrates. Resultant streams can be played back indivially or as a group. source, 360p and 160p encode blocks are enabled through the Enable property, other examples are not enabled. Add additional encode blocks to your template as needed. -->
<Root>
<Transcode>
<Encodes>
<!-- Example Encode block for source, not required unless Member of StreamNameGroup. -->
<Encode>
<Enable>true</Enable>
<Name>source</Name>
<StreamName>mp4:${SourceStreamName}_source</StreamName>
<Video>
<!-- H.264, H.263, PassThru, Disable -->
<Codec>PassThru</Codec>
<Bitrate>${SourceVideoBitrate}</Bitrate>
<Parameters>
</Parameters>
</Video>
<Audio>
<!-- AAC, PassThru, Disable -->
<Codec>PassThru</Codec>
<Bitrate>${SourceAudioBitrate}</Bitrate>
<Parameters>
</Parameters>
</Audio>
<Properties>
</Properties>
</Encode>
<!-- Setup for 720p, high bandwith, main profile for desktop or set-top box -->
<Encode>
<Enable>false</Enable>
<Name>720p</Name>
<StreamName>mp4:${SourceStreamName}_720p</StreamName>
<Video>
<!-- H.264, H.263, PassThru, Disable -->
<Codec>H.264</Codec>
<!-- default, CUDA, QuickSync, NVENC -->
<Transcoder>default</Transcoder>
<GPUID>-1</GPUID>
<FrameSize>
<!-- letterbox, fit-width, fit-height, crop, stretch, match-source -->
<FitMode>fit-height</FitMode>
<Width>1280</Width>
<Height>720</Height>
<!-- <Crop>0,0,0,0</Crop> -->
<!-- <SourceRectangle>0,0,320,240</SourceRectangle> -->
</FrameSize>
<!-- baseline, main, high -->
<Profile>main</Profile>
<Bitrate>1300000</Bitrate>