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>