一、openRTSP編譯運行
a)windows下編譯運行
還是以mediaServer作為服務端,openRTSP作為客戶端
b)Linux下編譯運行
轉自http://kuafu80.blog.163.com/blog/static/122647180201372654556863/
1: 編譯
(1): ./genMakefiles linux
(2): make
2: 服務器環境
服務器端是一個支持RTSP server的H.264的攝像頭;
3: 運行 openRTSP
./openRTSP -d 20 -f 20 -w 640 -h 480 -b 400000 "rtsp://192.168.2.239/id=0"
或 ./openRTSP -f 20 -w 640 -h 480 -b 400000 "rtsp://192.168.2.239/id=0"
參數解釋; -d 20 --->程序運行時間,如果沒有程序持續從服務器獲取視頻;
-f 20 ----> 幀率
-w 640 -h 480 -----> 幀分辨率
-b 400000 ---->碼率
4: 如果不修改playCommon.cpp的
代碼,openRTSP將獲取的視頻數據通過stdout直接打印到屏幕
5: 如果是自己取裸碼流,則可以調用SPS相關的函數,將H264的幀信息告訴解碼器,否則無法解碼
unsigned int num=1;
SPropRecord * sps = parseSPropParameterSets(subsession->fmtp_spropparametersets(),num);
fileSink = H264VideoFileSink::createNew(*env, outFileName,
subsession->fmtp_spropparametersets(),
fileSinkBufferSize, oneFilePerFrame);
struct timeval tv={0,0};
unsigned char start_code[4] = {0x00, 0x00, 0x00, 0x01};
fileSink-> addData(start_code, 4, tv);
fileSink->addData(sps[0].sPropBytes,sps[0].sPropLength,tv);
delete[] sps;
6: 稍微修改代碼讓openRTSP只錄視頻,且保存到指定的文件
streamURL = argv[1];
// add by Andy_xi
createReceivers = True; // 保存視頻
outputAVIFile = False; //因為是H264
videoOnly = True;
singleMedium = "video"; //只要視頻
//<------end
7: 調試記錄
啟動openRTSP后,一定的看到SDP信息中的SPS信息,否則解碼器可能不能解碼
a=fmtp:106 profile-level-id=42001E;sprop-parameter-sets=Z0KAKNoB4AiXlQ==,aM48gA==;packetization-mode=0
只要有這個信息,用file 命令看生成h264文件顯示如下:
new.h264: JVT NAL sequence, H.264 video, baseline @ L 40