live555 源码分析:简介
live555 是一個 C++ 開發的流媒體項目,它主要由幾個用于多媒體流的庫組成,其官方網站地址為 http://www.live555.com/。live555 使用開放的標準協議 (RTP/RTCP,RTSP,SIP),方便與其它標準的流媒體組件互操作。這些庫可以為 Unix-like(包括 Linux 和 Mac OS X),Windows,和 QNX (及其它 POSIX 兼容系統)等系統進行編譯,它們可以被用于構建流媒體應用。除了庫之外,live555 還包含了兩個流媒體應用程序 “LIVE555 Media Server” 和 “LIVE555 Proxy Server“,它們都是 RTSP 服務器應用程序。
live555 的庫可以被用于處理 MPEG,H.265,H.264,H.263+,DV 或 JPEG 視頻,及多種音頻格式。它們還可以非常簡單地進行擴展,以支持其它的音頻或視頻編解碼格式,并可以被用于構建基本的 RTSP?或?SIP?客戶端和服務器。
源碼下載及編譯
live555 的源代碼是開放的,可以方便地供所有音視頻開發研究愛好者學習研究,或者針對自己實際的項目進行擴展。其源碼下載地址為 http://www.live555.com/liveMedia/public/ :
其中 live555-latest.tar.gz 為最新版源碼,live.2017.07.18.tar.gz 為最近一個正式的版本的源碼。除了源碼之外,live555 還提供了許多用于開發測試的音視頻文件,如 264 目錄下的是原始 H.264 碼流測試文件, 265 目錄下的是原始 H.265 碼流測試文件等。
這里使用 live555 的最新版本源碼,live555-latest.tar.gz,使用的操作系統為 64 位的 Ubuntu 16.04 版。下載源碼,然后通過如下命令解壓縮:
hanpfei0306@ThundeRobot:/media/data/osprojects$ tar xf live555-latest.tar.gz hanpfei0306@ThundeRobot:/media/data/osprojects$ cd live可以通過如下命令編譯 live555:
hanpfei0306@ThundeRobot:/media/data/osprojects/live$ ./genMakefiles linux-64bit hanpfei0306@ThundeRobot:/media/data/osprojects/live$ make cd liveMedia ; make make[1]: Entering directory '/media/data/osprojects/live/liveMedia' c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -m64 -fPIC -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 Media.cpp c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -m64 -fPIC -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 MediaSource.cpp c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -m64 -fPIC -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 FramedSource.cpp . . . . . .其中 genMakefiles 腳本用于產生 Makefile 文件,它需要一個操作系統版本的版本號作為參數,該腳本文件的內容如下:
#!/bin/sh usage() {echo "Usage: $0 <os-platform>"exit 1 }if [ $# -ne 1 ] thenusage $* fiplatform=$1 subdirs="liveMedia groupsock UsageEnvironment BasicUsageEnvironment testProgs mediaServer proxyServer"for subdir in $subdirs do/bin/rm -f $subdir/Makefilecat $subdir/Makefile.head config.$platform $subdir/Makefile.tail > $subdir/Makefilechmod a-w $subdir/Makefile done/bin/rm -f Makefile cat Makefile.head config.$1 Makefile.tail > Makefile chmod a-w Makefile這個腳本就是把各個目錄下的多個文件預先定義的 Makefile 內容文件合并起來,產生最終的 Makefile 文件。每個文件夾下面都預定義了平臺相關的配置文件,如,在項目根目錄下:
hanpfei0306@ThundeRobot:/media/data/osprojects/live$ ls | grep config config.aix config.alpha config.armeb-uclibc config.armlinux config.avr32-linux config.bfin-linux-uclibc config.bfin-uclinux config.bsplinux config.cris-axis-linux-gnu config.cygwin config.cygwin-for-vlc config.freebsd config.iphoneos config.iphone-simulator config.irix config.linux config.linux-64bit config.linux-gdb config.linux-with-shared-libraries config.macosx config.macosx-32bit config.macosx-before-version-10.4 config.mingw config.openbsd config.qnx4 config.solaris-32bit config.solaris-64bit config.sunos config.uClinux提供給 genMakefiles 腳本的操作系統版本的版本號參數,需要與這些配置文件中,要編譯的目標操作系統對應的那個配置文件的后綴名匹配。編譯完成后,由各個庫產生 .a 文件,各個庫及各個應用程序的目標文件都位于它們自己的目錄中。
媒體服務應用程序的可執行文件位于 live/mediaServer/live555MediaServer。
使用 live555MediaServer 提供流媒體服務
live555 中的流媒體服務器應用程序 live555MediaServer 可以非常方便地用來提供流媒體服務。在存放流媒體文件的目錄下執行 live555MediaServer:
$ ./live555MediaServer然后就可以通過如下格式的 URL 播放流媒體文件了:
rtsp://10.240.248.20:8554/<filename>其中 <filename> 為執行 live555MediaServer 命令的目錄下的流媒體文件,IP 地址為主機的 IP 地址。
live555MediaServer 程序運行起來之后,可以使用播放器軟件,如 VLC Media Player 和 ffplay 播放流媒體內容。如:
$ ffplay rtsp://10.240.248.20:8000/raw_h264_stream.264如果只是想玩一下 live555MediaServer 的話,還可以直接下載它的編譯好的二進制文件,地址。
live555 源碼結構
接著來看 live555 的源碼結構。首先為 live555 創建一個 Eclipse 的 C++ Project,方法為選擇菜單欄的 File -> New -> C++ Project,彈出如下對話框:
Project Name: 一欄輸入工程名字,這里用 live555;反選 Use default location,然后在 Location: 一欄中輸入 live555 源碼的路徑;在 Project type: 下選擇 Makefile project -> Empty Project;在 Toolchains: 下選擇 Linux GCC。
然后點擊右下角的 Finish 按鈕,創建工程。live555 源碼結構如下:
live555 源碼主要由八個部分組成:UsageEnvironment,BasicUsageEnvironment,groupsock,liveMedia,mediaServer,proxyServer,testProgs,WindowsAudioInputDevice。
UsageEnvironment 和 BasicUsageEnvironment
UsageEnvironment 中的 “UsageEnvironment” 和 “TaskScheduler” 類用于調度延遲的事件,為異步的讀事件分配處理程序,以及輸出錯誤/警告消息。UsageEnvironment 中的 “HashTable” 類還為范型哈希表定義了接口,由其余的代碼使用。UsageEnvironment 中的都是抽象類;它們必須在實現中被繼承。這些子類可以利用它運行的環境的特定屬性,比如它的 GUI 和/或腳本環境。
BasicUsageEnvironment 庫則定義了 UsageEnvironment 中的類的一個具體實現,用于簡單的終端應用程序。讀取事件和延遲操作使用一個 select() 循環處理。
groupsock
這個庫中的類封裝了網絡接口和 sockets。特別是其中的 “Groupsock” 類封裝了一個 socket,用于發送(和/或接收)組播數據報。
liveMedia
這個庫是 live555 的核心所在。其中定義了一個類層次體系,以 “Medium” 為頂層基類,用于各種各樣的流媒體類型和編解碼。
mediaServer 和 proxyServer
mediaServer 目錄下的是 “LIVE555 Media Server”,它是一個完整的 RTSP 服務器應用程序。它可以把幾種媒體文件轉為流,如前面看到的,這些文件必須位于當前工作目錄。這些文件包括:
- MPEG TS 文件(文件后綴名為 “.ts”)
- Matroska?或?WebM?文件(文件后綴名為 “.mkv” 或 “.webm”)
- Ogg 文件(文件后綴名為 “.ogg”,”ogv” 或 “.opus”)
- MPEG-1 或 2 程序流文件(文件后綴名為 “.mpg”)
- MPEG-4 Video Elementary Stream 文件(文件后綴名為 “.m4e”)
- H.264 Video Elementary Stream 文件(文件后綴名為”.264”)
- H.265 Video Elementary Stream 文件(文件后綴名為”.265”)
- VOB 視頻+音頻文件(文件后綴名為”.vob”)
- DV 視頻文件(文件后綴名為”.dv”)
- MPEG-1 或 2 (包括 layer III - 比如 ‘MP3’) 音頻文件(文件后綴名為”.mp3”)
- WAV (PCM) 音頻文件(文件后綴名為”.wav”)
- AMR 音頻文件(文件后綴名為”.amr”)
- AC-3 音頻文件(文件后綴名為”.ac3”)
- AAC (ADTS 格式) 音頻文件(文件后綴名為”.aac”)
proxyServer 目錄下的是 “LIVE555 Proxy Server”,它是一個單播 RTSP 服務器,它為一個或多個 “后端” 單播或多播 RTSP/RTP 流扮演 “ 代理”的角色。
WindowsAudioInputDevice
這是 “liveMedia” 庫的 “AudioInputDevice” 抽象類的一個實現。它可以被 Windows 應用程序用于從輸入設備讀取 PCM 音頻采樣。
testProgs
這個目錄實現了一些簡單的程序,使用 “BasicUsageEnvironment” 來演示如何使用這些庫開發應用程序。其中除了包括用于測試庫的測試應用之外,還包括 “openRTSP” - 命令行的 RTSP 客戶端,”playSIP” - 命令行的 SIP 會話記錄器,”vobStreamer” - 網絡 DVD 播放器等工具。
Done。
總結
以上是生活随笔為你收集整理的live555 源码分析:简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用 ortp 发送原始 H.264 码
- 下一篇: live555 源码分析:基础设施