live555 是一個很有用的多媒體串流程式庫, 其中包含了許多有用的 source code, 例如: 他實做了 RTP/RTCP/RTSP/SIP 串流的接收與傳送, 一些有名的多媒體串流播放器如: VLC 或 MPlayer, 都是使用這個 library 做串流的處理.
所以呢..... 如果想要搞清楚這些串流是怎麼一回事, 最好把 source code 拿回來編譯一下.
你可以在下面拿到 live media 專案的 source code
http://www.live555.com/liveMedia/
因為原來介紹的編譯方法, 已經不適用於 Visual Studio 2005 了, 所以 Steve 先生, 提出了他的解決方案, 你可以在下面的 blog 得到相關的編譯知識.
http://letsgoustc.spaces.live.com/blog/cns!89AD27DFB5E249BA!167.entry
為了怕他的 blog 掛掉, 或者是文章刪除, 所以我這裡複製了一份他的作法, 並根據 live.2008.09.02.tar.gz 這個版本, 做了必要的修正. (如果不做修正, 則會編譯失敗)
如果你按照下面的作法, 應該能夠安安靜靜並且非常順利地編譯完成.
請注意版本
1. liveMedia 版本為 live.2008.09.02
2. Visual Studio 2005
Step 1. 設定編譯器位置
打開 win32config 檔案, 修改 "TOOLS32 = ..." 為 你的 Visual Studio 2005 VC 的位置
ex:
"TOOLS32 = C:\Program Files\Microsoft Visual Studio 8\VC"
Step 2. 修正錯誤的檔名
a. 把 win32config 裡面的
"LINK_OPTS_0 = $(linkdebug) msvicrt.lib" 改成
"LINK_OPTS_0 = $(linkdebug) msvcrt.lib"
Step 3. 建立 Makefile
直接執行 genWindowsMakefiles.cmd
<下面這部分不用作了>
4. Modify liveMedia/RTSPOverHTTPServer.cpp to add the following code:
#include <string.h>
#if defined(__WIN32__) || defined(_WIN32)
#define snprintf _snprintf
#endif
Step 4: 修改程式碼 (下面是 Jing 的修正)
1. 修改 /group/Groupsock.cpp
#if (defined(__WIN32__) || defined(_WIN32)) && !defined(__MINGW32__)
#include <strstrea.h>
改為
#if (defined(__WIN32__) || defined(_WIN32)) && !defined(__MINGW32__)
#include <strstream>
2. 修改 /group/NetInterface.cpp 第 26 行
#include <strstrea.h> 改為 #include <strstream>
Step 5. 新增 Makefile 設定
a. 打開 groupsock/Makefile.head
b. 修改
"INCLUDES = -Iinclude -I../UsageEnvironment/include"
成為
"INCLUDES = -Iinclude -I../UsageEnvironment/include -DNO_STRSTREAM".
Step 6. 建立 build.bat 命令批次檔
把下面的文件內容, 存成 build.bat 檔, 存放在 live 目錄底下
-----------------------------------------------------------------------------------
call "C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"
cd liveMedia
nmake /B -f liveMedia.mak
cd ../groupsock
nmake /B -f groupsock.mak
cd ../UsageEnvironment
nmake /B -f UsageEnvironment.mak
cd ../BasicUsageEnvironment
nmake /B -f BasicUsageEnvironment.mak
cd ../testProgs
nmake /B -f testProgs.mak
cd ../mediaServer
nmake /B -f mediaServer.mak
-----------------------------------------------------------------------------------
Step 7. 開始編譯
執行 build.bat
測試與驗證: 你可以在 live\testPogs 裡面找到有名的 openRTSP.exe
接者你就可以把他改成你想要的軟体元件, 例如: DirectShow RTSP source filter
Enjoy.
by Jing
延伸閱讀
井兄您好:
回覆刪除照著你文章中的步驟執行,很順利的編譯了一個新的live555執行檔,相當感謝。
但是我在使用上出現了幾個問題,不知你可否撥空回答:
1、編譯完成後的執行檔,將其複製到其他的電腦或其他的資料夾,就不能使用了,會出現下面的錯誤訊息[這個應用程式無法啟動,因為找不到MSVCR80.dll,重新安裝應用程式可能可以解決這個問題。]
上網找尋相關資料後,發現去下載msvcr80.dll放置在C:\WINDOWS\system32是可以解決這個錯誤訊息,但是又會出現[應用程式正常初始(0x80000003)失敗。請按一下[確定]終止應用程式]這個訊息在網路上就找不到答案了。不知道井兄是否有遇過,或者知道怎麼解決。
2、另外,我在使用編譯完成的live555的時候,只能播放*.ts的檔案,如果要播放如*.mpg等其他格式的檔案,我都必須要將副檔名改為.ts才可以播放,不知道井兄是否有遇過這類的問題,或者知道怎麼解決,謝謝。
井兄您好:
回覆刪除關於我上面問的第一個問題,我已經找到解決方法了,如果"live555MediaServer.exe"要移動到其他資料夾的話,要連同"live555MediaServer.exe.manifest"這個檔案一起移動就不會出現這個問題了,在這裡與您分享。
很高興你解決了問題, 更高興的是你也把心得與我分享. 謝謝
回覆刪除您好:請問要如何改成DirectShow RTSP source filter,可以稍微敘述一下嗎,謝謝。
回覆刪除SourceFilter 方面, WindowsSDK 有範例可以參考
回覆刪除1. PushSourceFilter:
我的是放在這裡:
C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\Multimedia\DirectShow\Filters\PushSource
2. Async
檔案位置範例: C:\Program Files\Microsoft SDKs\Windows\v6.0\Samples\Multimedia\DirectShow\Filters\Async
Windows SDK 下載:
http://www.google.com.tw/search?hl=zh-TW&client=firefox-a&rls=org.mozilla%3Azh-TW%3Aofficial&hs=vKC&q=windows+sdk&btnG=%E6%90%9C%E5%B0%8B&meta=&aq=f&oq=書籍:
1. Programming Microsoft DirectShow for Digital Video and Television (Pro-Developer)
http://www.amazon.com/Programming-Microsoft-DirectShow-Television-Pro-Developer/dp/07356182162. Fundamentals of Audio and Video Programming for Games (Pro-Developer)
http://www.amazon.com/Fundamentals-Audio-Video-Programming-Pro-Developer/dp/073561945X希望對你有幫助. ^_^
謝謝您的回應
回覆刪除我想另外問個問題
在directshow filter裡可以用MFC的class嗎?
我想寫一個socket class 繼承CAsyncSocket。 我試是不行,不知道可行嗎
謝謝
你好:
回覆刪除因為被要求在WindowsMobile上做一個rtsp player
經過一些 survey 之後決定使用live555這個lib
想請教一下, 要如何將 live555 移植到WindowsMobile下面呢?
有甚麼是需要修改的地方嗎?
期待您的回覆
謝謝
Dennis
因為我沒有用過 Windows Mobile, 我沒有在上面編譯的經驗. 所以我無法提供給你有價值的資訊. 很抱歉.
回覆刪除感謝您的回覆
回覆刪除我已經移植成功了~~
不好意思,可否請問一下,關於這篇文章內提到的=>
回覆刪除Step 4: 修改程式碼 (下面是 Jing 的修正)
1. 修改 /group/Groupsock.cpp 這部份,
我找不到可以修改的檔案,在下載的Live555 Source Code內,找不到group這個資料夾...不曉得是否有其它解決方法,請指點迷津,非常感謝~~謝謝!!!