아오.. 하오 오래전에 깨작거려놓은거라 생각이 안나는데...
오디오 방송 서버와 클라이언트를 만들어야 할 일이 있어서 급히 뒤적거리고 뚝딱거려서 만들어 봤다..
작업환경은 ubuntu 14.04LTS 32bit version,
타겟은 dm365보드였는데... ti-dvsdk_dm365-evm_4_02_00_06 버젼이니 참조하고..
http://www.live555.com/liveMedia/ 에서 library 소스 가져다 dm365에 맞춰서 configuration 하고 빌드한 후 라이브러리 가져다 오디오만 처리하도록 만들었는데.. 간단한 음성 방송 송신/수신만 하면 되고, dm365로 구성한 보드에 오디오 path도 adpcm 밖에 없어서 구현 하다 중단한 것으로 기억하는데.. 중요한건.. rtsp 서버에 접속해서 플레이하면... ㅎㅎㅎ 동작은 한다.. ^^;;
rtsp 서버는 http://www.live555.com/mediaServer/ 에 있는 pre-built 실행파일을 받아서 사용했고 (윈도용, 리눅스용 다 있음.)
client (2).zip
암호는 본문 맨 아래에..
Makefile은... 부득이하게 fullpath 참조하도록 만들어진터라..(디렉토리명에 개발자 이름이...) 빼고.. 소스만 압축되어 있으며,그 내용은 대략 아래와 같으니 참조만.. (~는 /home/사용자계정 디렉토리)
CROSS_COMPILER_PREFIX=arm-none-linux-gnueabi-
PREFIX_DIR=~/usr
INCDIR=${PREFIX_DIR}/include
LIBDIR=${PREFIX_DIR}/lib
GPP=${CROSS_COMPILER_PREFIX}g++
GCC=${CROSS_COMPILER_PREFIX}gcc
STRIP=$(CROSS_COMPILER_PREFIX)strip
INC_LIVEMEDIA_DIR=-I${INCDIR}/liveMedia -I${INCDIR}/groupsock -I${INCDIR}/BasicUsageEnvironment -I${INCDIR}/UsageEnvironment
INC_BASE_DIR=~/dm365/ti-dvsdk_dm365-evm_4_02_00_06/linux-devkit/arm-none-linux-gnueabi/usr/include
LIB_BASE_DIR=~/dm365/ti-dvsdk_dm365-evm_4_02_00_06/linux-devkit/arm-none-linux-gnueabi/usr/lib
CFLAGS_BASE=-I. -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 -I$(INC_BASE_DIR)
LFLAGS_BASE =-L$(LIB_BASE_DIR)
LDFLAGS_BASE=-lpthread -lasound ${LIBDIR}/libliveMedia.a ${LIBDIR}/libgroupsock.a ${LIBDIR}/libBasicUsageEnvironment.a ${LIBDIR}/libUsageEnvironment.a
CFLAGS=${CFLAGS_BASE} ${INC_LIVEMEDIA_DIR}
all: rtspclient
rtspclient: rtspclient.cpp server.c
${GPP} -g -o $@ rtspclient.cpp server.c $(CFLAGS_BASE) $(INC_LIVEMEDIA_DIR) -L$(LIBDIR) $(LFLAGS_BASE) $(LDFLAGS_BASE)
install: rtspclient
$(STRIP) rtspclient
cp rtspclient $(PREFIX_DIR)/bin/
clean:
rm -f rtspclient
코드는... liveMedia 소스내의 testProgs 내의 파일들을 참조하고 여기저기서 구글링 해서 짜깁기 해서 만들어서 예쁘진 않고.. 작업한지 좀 지난지라 기억도 잘 안나서... 사용 방법은 빌드 후 나온 실행파일인 rtspclient를 target board에 넣고
./rtspclient 서버주소 만 해주면 되었던 걸로 기억..
live555MediaServer는 실행 파일이 있는 디렉토리를 /로 하고 이하의 디렉토리의 음원 파일의 이름을 그대로 url로 사용할 수 있다.
예를 들어.. 음원 서버가 192.168.100.99라고 하고, /home/antinuke/media_server 디렉토리 밑에 다음과 같이 파일이 구성되어있다면.. 서버의 실행은 antinuke@192.168.100.99:~/media_server/$ ./live555MediaServer & 이렇게 실행하면 되고..
+ home + antinuke + media_server + media_files + test.wav
| + test1.wav
| + test2.wav
| + test3.wav
+ live555MediaServer
+ mp3_files + song1.mp3
+ song2.mp3
클라이언트에서 접속 url은 rtsp://192.168.100.99/media_files/test.wav, 또는 rtsp://192.168.100.99/mp3_files/song1.mp3 와 같이 하면 된다.
단... 앞에도 얘기했듯... rtsp 기본 포트인 554로 live555MediaServer가 구동되었다면 포트를 생략해도 되지만, 8554로 구동되었으면, 주소뒤에 포트를 표시해주어야 한다. 즉, rtsp://192.168.100.99:8554/media_files/test.wav 혹은 rtsp://192.168.100.99:8554/mp3_files/song1.mp3 처럼 해야 한다.
첨부한 소스는 이 live555MediaServer가 실행되었을때 어느 포트로 구동되었는지 알 수가 없으므로, 자동으로 두 포트 모두 open해서 접속에 성공한 thread만 재생하고 실패한 thread는 바로 종료되도록 해놨다.. 귀차니즘으로 인한 잔머리... ㅎㅎ
일단 나만 참조할 메모지만 혹시 비슷한 걸로 고생하시는 분 있으면 쪼금이라도 참조라도 되었으면 해서..
압축파일 비번은 1234 ... 코드가 지저분해서 부끄럽기에.