목차
1. LIVE555 다운로드
busyman@busyman:~/play/bmNVR$ mkdir lib
busyman@busyman:~/play/bmNVR$ cd lib/
busyman@busyman:~/play/bmNVR/lib$ ls
busyman@busyman:~/play/bmNVR/lib$ mkdir LIVE555
busyman@busyman:~/play/bmNVR/lib$ cd LIVE555/
busyman@busyman:~/play/bmNVR/lib/LIVE555$ wget http://www.live555.com/liveMedia/public/live.2023.07.24.tar.gz
--2023-08-12 09:40:33-- http://www.live555.com/liveMedia/public/live.2023.07.24.tar.gz
Resolving www.live555.com (www.live555.com)... 52.8.240.222
Connecting to www.live555.com (www.live555.com)|52.8.240.222|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 689051 (673K) [application/x-gzip]
Saving to: ‘live.2023.07.24.tar.gz’
live.2023.07.24.tar.gz 100%[==================================================================================================================>] 672.90K 752KB/s in 0.9s
2023-08-12 09:40:36 (752 KB/s) - ‘live.2023.07.24.tar.gz’ saved [689051/689051]
2. LIVE555 빌드 준비 (./genMakefiles linux)
busyman@busyman:~/play/bmNVR/lib/LIVE555$ tar vfxz live.2023.07.24.tar.gz
live/
live/liveMedia/
live/groupsock/
live/UsageEnvironment/
live/BasicUsageEnvironment/
live/testProgs/
# 중략
live/liveMedia/include/MIKEY.hh
live/liveMedia/include/SRTPCryptographicContext.hh
live/liveMedia/include/HMAC_SHA1.hh
live/liveMedia/include/HMAC_hash.hh
busyman@busyman:~/play/bmNVR/lib/LIVE555$
busyman@busyman:~/play/bmNVR/lib/LIVE555$
busyman@busyman:~/play/bmNVR/lib/LIVE555$ cd live/
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$ ls
BasicUsageEnvironment config.cris-axis-linux-gnu config.linux config.macosx-catalina config.uClinux genWindowsMakefiles.cmd proxyServer
config.armeb-uclibc config.cygwin config.linux-64bit config.macosx-no-openssl configure groupsock README
config.armlinux config.cygwin-for-vlc config.linux-gdb config.mingw COPYING hlsProxy testProgs
config.avr32-linux config.freebsd config.linux-gdb-sanitize config.openbsd COPYING.LESSER liveMedia UsageEnvironment
config.bfin-linux-uclibc config.freebsd-no-openssl config.linux-no-openssl config.qnx4 fix-makefile Makefile.head win32config
config.bfin-uclinux config.iphoneos config.linux-with-shared-libraries config.solaris-32bit genMakefiles Makefile.tail win32config.Borland
config.bsplinux config.iphone-simulator config.macosx-bigsur config.solaris-64bit genWindowsMakefiles mediaServer WindowsAudioInputDevice
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$ ./genMakefiles linux
3. LIVE555 빌드
1) 빌드는 make 명령으로 간단히 할 수 있다.
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$ make
# 중략
c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 BasicUsageEnvironment.cpp
c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 BasicTaskScheduler0.cpp
c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 BasicTaskScheduler.cpp
BasicTaskScheduler.cpp: In member function ‘virtual void BasicTaskScheduler::SingleStep(unsigned int)’:
BasicTaskScheduler.cpp:191:40: error: ‘struct std::atomic_flag’ has no member named ‘test’
if (fTriggersAwaitingHandling[i].test()) {
^~~~
make[1]: *** [Makefile:41: BasicTaskScheduler.o] Error 1
make[1]: Leaving directory '/home/busyman/play/bmNVR/lib/LIVE555/live/BasicUsageEnvironment'
make: *** [Makefile:38: all] Error 2
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$
2) 그런데 빌드 실패, 해결 방법은 여러 가지 겠지만 일단 아래와 같이 config.linux 수정한다. 만약 다른 에러가 발생했다면 구글 검색을 통해 해결해 보자.
- COMPILE_OPTS 에 "-DNO_STD_LIB" 추가
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$ cat config.linux
COMPILE_OPTS = $(INCLUDES) -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_STD_LIB
C = c
C_COMPILER = cc
C_FLAGS = $(COMPILE_OPTS) $(CPPFLAGS) $(CFLAGS)
CPP = cpp
CPLUSPLUS_COMPILER = c++
CPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1 $(CPPFLAGS) $(CXXFLAGS)
OBJ = o
LINK = c++ -o
LINK_OPTS = -L. $(LDFLAGS)
CONSOLE_LINK_OPTS = $(LINK_OPTS)
LIBRARY_LINK = ar cr
LIBRARY_LINK_OPTS =
LIB_SUFFIX = a
LIBS_FOR_CONSOLE_APPLICATION = -lssl -lcrypto
LIBS_FOR_GUI_APPLICATION =
EXE =
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$ ./genMakefiles linux
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$ make
# 중략
make[1]: Entering directory '/home/busyman/play/bmNVR/lib/LIVE555/live/hlsProxy'
c++ -c -I../UsageEnvironment/include -I../groupsock/include -I../liveMedia/include -I../BasicUsageEnvironment/include -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_STD_LIB -Wall -DBSD=1 live555HLSProxy.cpp
c++ -olive555HLSProxy -L. live555HLSProxy.o ../liveMedia/libliveMedia.a ../groupsock/libgroupsock.a ../BasicUsageEnvironment/libBasicUsageEnvironment.a ../UsageEnvironment/libUsageEnvironment.a -lssl -lcrypto
make[1]: Leaving directory '/home/busyman/play/bmNVR/lib/LIVE555/live/hlsProxy'
For more information about this source code (including your obligations under the LGPL), please see our FAQ at http://live555.com/liveMedia/faq.html
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$ make distclean
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$ ./genMakefiles linux
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$ make
# 중략
make[1]: Leaving directory '/home/busyman/play/bmNVR/lib/LIVE555/live/proxyServer'
cd hlsProxy ; make
make[1]: Entering directory '/home/busyman/play/bmNVR/lib/LIVE555/live/hlsProxy'
c++ -c -I../UsageEnvironment/include -I../groupsock/include -I../liveMedia/include -I../BasicUsageEnvironment/include -I/usr/local/include -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_STD_LIB -Wall -DBSD=1 live555HLSProxy.cpp
c++ -olive555HLSProxy -L. live555HLSProxy.o ../liveMedia/libliveMedia.a ../groupsock/libgroupsock.a ../BasicUsageEnvironment/libBasicUsageEnvironment.a ../UsageEnvironment/libUsageEnvironment.a -lssl -lcrypto
make[1]: Leaving directory '/home/busyman/play/bmNVR/lib/LIVE555/live/hlsProxy'
For more information about this source code (including your obligations under the LGPL), please see our FAQ at http://live555.com/liveMedia/faq.html
busyman@busyman:~/play/bmNVR/lib/LIVE555/live$
4. LIVE555 테스트
빌드가 되었으니 잘되었는지 확인해 보자. LIVE555는 testProgs 하위에 여러 가지 예제를 제공하는데 우리는 NVR 제작이 목적이므로 testRTSPClient로 테스트한다. 빌드는 되었지만 라이브러리 호환으로 인해 실행이 안될 수 있으니 일단, 실행해 보자.
busyman@busyman:~/play/bmNVR/lib/LIVE555/live/testProgs$ ./testRTSPClient
Usage: ./testRTSPClient <rtsp-url-1> ... <rtsp-url-N>
(where each <rtsp-url-i> is a "rtsp://" URL)
1) rtsp 서버 준비
rtsp 서버를 준비하는 것도 귀찮은 일이다. IP CAM이 있다면 가장 편한 방법이고 없다면 VLC가 그나마 쉬운 방법이다.
2) testRTSPClient 실행
- rtsp 서버가 준비되었다면 서버를 시작하고 testRTSPClient를 실행해 보자.
- 정상 동작이 되었다면 아래와 같이 스트림에 대한 정보가 표시되고 수신된 데이터 정보가 표시된다. rtsp에 사용한 영상이 video만 있어 video/H264 만 표시된다.
busyman@busyman:~/play/bmNVR/lib/LIVE555/live/testProgs$ ./testRTSPClient rtsp://127.0.0.1:8554/test
Created new TCP socket 3 for connection
Connecting to 127.0.0.1, port 8554 on socket 3...
...remote connection opened
Sending request: DESCRIBE rtsp://127.0.0.1:8554/test RTSP/1.0
CSeq: 2
User-Agent: ./testRTSPClient (LIVE555 Streaming Media v2023.07.24)
Accept: application/sdp
Received 204 new bytes of response data.
Have received 204 total bytes of a DESCRIBE RTSP response; awaiting 424 bytes more.
Received 424 new bytes of response data.
Received a complete DESCRIBE response:
RTSP/1.0 200 OK
Server: VLC/3.0.18
Date: Sat, 12 Aug 2023 12:50:05 GMT
Content-Type: application/sdp
Content-Base: rtsp://127.0.0.1:8554/test
Content-Length: 424
Cache-Control: no-cache
Cseq: 2
v=0
o=- 16753951905447302629 16753951905447302629 IN IP4 busyman
s=Unnamed
i=N/A
c=IN IP4 0.0.0.0
t=0 0
a=tool:vlc 3.0.18
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=control:rtsp://127.0.0.1:8554/test
m=video 0 RTP/AVP 96
b=RR:0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=4d001f;sprop-parameter-sets=Z00AH5Y1QKALdNwEBAQI,aO48gA==;
a=control:rtsp://127.0.0.1:8554/test/trackID=1
[URL:"rtsp://127.0.0.1:8554/test"]: Got a SDP description:
v=0
o=- 16753951905447302629 16753951905447302629 IN IP4 busyman
s=Unnamed
i=N/A
c=IN IP4 0.0.0.0
t=0 0
a=tool:vlc 3.0.18
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=control:rtsp://127.0.0.1:8554/test
m=video 0 RTP/AVP 96
b=RR:0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=4d001f;sprop-parameter-sets=Z00AH5Y1QKALdNwEBAQI,aO48gA==;
a=control:rtsp://127.0.0.1:8554/test/trackID=1
[URL:"rtsp://127.0.0.1:8554/test"]: Initiated the "video/H264" subsession (client ports 57720-57721)
Sending request: SETUP rtsp://127.0.0.1:8554/test/trackID=1 RTSP/1.0
CSeq: 3
User-Agent: ./testRTSPClient (LIVE555 Streaming Media v2023.07.24)
Transport: RTP/AVP;unicast;client_port=57720-57721
Received 270 new bytes of response data.
Received a complete SETUP response:
RTSP/1.0 200 OK
Server: VLC/3.0.18
Date: Sat, 12 Aug 2023 12:50:05 GMT
Transport: RTP/AVP/UDP;unicast;client_port=57720-57721;server_port=55001-55002;ssrc=93B63C53;mode=play
Session: 97b0cc940409c97;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 3
[URL:"rtsp://127.0.0.1:8554/test"]: Set up the "video/H264" subsession (client ports 57720-57721)
[URL:"rtsp://127.0.0.1:8554/test"]: Created a data sink for the "video/H264" subsession
Sending request: PLAY rtsp://127.0.0.1:8554/test RTSP/1.0
CSeq: 4
User-Agent: ./testRTSPClient (LIVE555 Streaming Media v2023.07.24)
Session: 97b0cc940409c97
Range: npt=0.000-
Received 269 new bytes of response data.
Received a complete PLAY response:
RTSP/1.0 200 OK
Server: VLC/3.0.18
Date: Sat, 12 Aug 2023 12:50:05 GMT
RTP-Info: url=rtsp://127.0.0.1:8554/test/trackID=1;seq=52713;rtptime=232270630
Range: npt=86.381167-
Session: 97b0cc940409c97;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 4
[URL:"rtsp://127.0.0.1:8554/test"]: Started playing session...
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 6399 bytes. Presentation time: 1691844605.970419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5230 bytes. Presentation time: 1691844606.003419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4814 bytes. Presentation time: 1691844606.037419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 15 bytes. Presentation time: 1691844606.070419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4 bytes. Presentation time: 1691844606.070419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5 bytes. Presentation time: 1691844606.070419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 46432 bytes. Presentation time: 1691844606.070419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4848 bytes. Presentation time: 1691844606.103419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4616 bytes. Presentation time: 1691844606.137419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4629 bytes. Presentation time: 1691844606.170419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4620 bytes. Presentation time: 1691844606.203419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4911 bytes. Presentation time: 1691844606.236419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4665 bytes. Presentation time: 1691844606.270419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4390 bytes. Presentation time: 1691844606.303419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4923 bytes. Presentation time: 1691844606.337419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4802 bytes. Presentation time: 1691844606.370419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4701 bytes. Presentation time: 1691844606.403419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4665 bytes. Presentation time: 1691844606.436419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4890 bytes. Presentation time: 1691844606.470419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4749 bytes. Presentation time: 1691844606.503419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4830 bytes. Presentation time: 1691844606.536419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4830 bytes. Presentation time: 1691844606.570419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4747 bytes. Presentation time: 1691844606.603419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4648 bytes. Presentation time: 1691844606.636419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4827 bytes. Presentation time: 1691844606.670419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5137 bytes. Presentation time: 1691844606.703419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4780 bytes. Presentation time: 1691844606.736419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 6438 bytes. Presentation time: 1691844606.770419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5161 bytes. Presentation time: 1691844606.803419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5151 bytes. Presentation time: 1691844606.836419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5303 bytes. Presentation time: 1691844606.870419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 15 bytes. Presentation time: 1691844606.903419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4 bytes. Presentation time: 1691844606.903419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5 bytes. Presentation time: 1691844606.903419!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 46219 bytes. Presentation time: 1691844606.903419!
3) 테스트 프로그램을 약간 수정해 보자. 아래와 같이 수신한 데이터의 첫 4byte를 출력해 보면 NAL packet 단위로 수신되는 것을 확인할 수 있다. 188byte 단위로 전송되지만 LIVE555에서 frame 단위로 만들어 줌으로써 뒷 단 처리의 수고를 덜 수 있다.
void DummySink::afterGettingFrame(unsigned frameSize, unsigned numTruncatedBytes,
struct timeval presentationTime, unsigned /*durationInMicroseconds*/) {
// We've just received a frame of data. (Optionally) print out information about it:
#ifdef DEBUG_PRINT_EACH_RECEIVED_FRAME
if (fStreamId != NULL) envir() << "Stream \"" << fStreamId << "\"; ";
envir() << fSubsession.mediumName() << "/" << fSubsession.codecName() << ":\tReceived " << frameSize << " bytes";
if (numTruncatedBytes > 0) envir() << " (with " << numTruncatedBytes << " bytes truncated)";
char uHexDump[(4*4)+1];
sprintf(uHexDump, "[%02X][%02X][%02X][%02X]", fReceiveBuffer[0], fReceiveBuffer[1], fReceiveBuffer[2], fReceiveBuffer[3]);
envir() << ".\t" << uHexDump;
char uSecsStr[6+1]; // used to output the 'microseconds' part of the presentation time
sprintf(uSecsStr, "%06u", (unsigned)presentationTime.tv_usec);
envir() << "\tPresentation time: " << (int)presentationTime.tv_sec << "." << uSecsStr;
if (fSubsession.rtpSource() != NULL && !fSubsession.rtpSource()->hasBeenSynchronizedUsingRTCP()) {
envir() << "!"; // mark the debugging output to indicate that this presentation time is not RTCP-synchronized
}
#ifdef DEBUG_PRINT_NPT
envir() << "\tNPT: " << fSubsession.getNormalPlayTime(presentationTime);
#endif
envir() << "\n";
#endif
// Then continue, to request the next frame of data:
continuePlaying();
}
[URL:"rtsp://127.0.0.1:8554/test"]: Started playing session...
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5004 bytes. [61][E0][C0][00] Presentation time: 1691847432.768619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4894 bytes. [61][E0][E0][00] Presentation time: 1691847432.801619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4827 bytes. [61][E1][00][01] Presentation time: 1691847432.835619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4956 bytes. [61][E1][20][01] Presentation time: 1691847432.868619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5509 bytes. [61][E1][40][01] Presentation time: 1691847432.901619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4724 bytes. [61][E1][60][01] Presentation time: 1691847432.935619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5130 bytes. [61][E1][80][01] Presentation time: 1691847432.968619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5697 bytes. [61][E1][A0][01] Presentation time: 1691847433.001619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5017 bytes. [61][E1][C0][01] Presentation time: 1691847433.035619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5282 bytes. [61][E1][E0][01] Presentation time: 1691847433.068619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5482 bytes. [61][E2][00][02] Presentation time: 1691847433.101619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5520 bytes. [61][E2][20][02] Presentation time: 1691847433.135619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5073 bytes. [61][E2][40][02] Presentation time: 1691847433.168619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5162 bytes. [61][E2][60][02] Presentation time: 1691847433.201619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5313 bytes. [61][E2][80][02] Presentation time: 1691847433.235619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 7349 bytes. [61][E2][A0][02] Presentation time: 1691847433.268619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5122 bytes. [61][E2][C0][02] Presentation time: 1691847433.301619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5632 bytes. [61][E2][E0][02] Presentation time: 1691847433.335619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5126 bytes. [61][E3][00][03] Presentation time: 1691847433.368619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 15 bytes. [67][4D][00][1F] Presentation time: 1691847433.401619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4 bytes. [68][EE][3C][80] Presentation time: 1691847433.401619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5 bytes. [06][E5][01][30] Presentation time: 1691847433.401619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 46604 bytes. [65][B8][00][00] Presentation time: 1691847433.401619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4927 bytes. [61][E0][20][00] Presentation time: 1691847433.435619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4634 bytes. [61][E0][40][00] Presentation time: 1691847433.468619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4855 bytes. [61][E0][60][00] Presentation time: 1691847433.501619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4647 bytes. [61][E0][80][00] Presentation time: 1691847433.535619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4863 bytes. [61][E0][A0][00] Presentation time: 1691847433.568619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 4885 bytes. [61][E0][C0][00] Presentation time: 1691847433.601619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5214 bytes. [61][E0][E0][00] Presentation time: 1691847433.635619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5074 bytes. [61][E1][00][01] Presentation time: 1691847433.668619!
Stream "rtsp://127.0.0.1:8554/test"; video/H264: Received 5030 bytes. [61][E1][20][01] Presentation time: 1691847433.701619!
'놀기 > 잡스러운 것' 카테고리의 다른 글
[bmNVR] QT 기반으로 옮기기 (0) | 2023.08.30 |
---|---|
[bmNVR] h264 데이터를 ts(transport stream)로 만들기 (0) | 2023.08.30 |
[FFMPEG] SMPTE Bar 영상 만들기 (with timecode) (0) | 2023.08.27 |
[Shell Script] 파일 내용 모니터링 (0) | 2023.03.17 |
[Shell Script] 0부터 1씩 증가 시키며 숫자 출력하기 (0) | 2023.03.17 |
댓글