우분투 서버에 다윈스트리밍서버(DSS) 설치

다음은 다윈스트리밍서버(Darwin Streaming Sever 6.0.3)를 우분투(Ubuntu 16.04.1)에 설치하고 난후, 정리한 내용이다.
1. 계정생성

addgroup --system qtss
adduser --system --no-create-home --ingroup qtss qtss

2. 소스 다운로드 및 패치

cd /usr/local/src
wget https://github.com/macosforge/dss/releases/download/6.0.3/DarwinStreamingSrvr6.0.3-Source.tar
tar xvf DarwinStreamingSrvr6.0.3-Source.tar
wget http://blog.moramcnt.com/wp-content/uploads/2017/06/dss-6.0.3.patch
patch -p0 < dss-6.0.3.patch

wget http://blog.moramcnt.com/wp-content/uploads/2017/06/dss-hh-20080728-1.patch
patch -p0 < dss-hh-20080728-1.patch

3. Makefile 수정

cd DarwinStreamingSrvr6.0.3-Source/
vi Makefile.POSIX

LIBS의 끝에 -ldl 추가

LIBS = $(CORE_LINK_LIBS) -lCommonUtilitiesLib -lQTFileLib -ldl

4. QTFileInfo.tproj 파일의 Makefile 수정

vim ./QTFileTools/QTFileInfo.tproj/Makefile.POSIX

LIBS의 끝에 -lpthread 추가

LIBS = $(CORE_LINK_LIBS) -lCommonUtilitiesLib  -lQTFileExternalLib ../../CommonUtilitiesLib/libCommonUtilitiesLib.a -lpthread

5. QTFileTest.tproj 파일의 Makefile 수정

vim ./QTFileTools/QTFileTest.tproj/Makefile.POSIX

LIBS의 끝에 -lpthread 추가

lQTFileExternalLib ../../CommonUtilitiesLib/libCommonUtilitiesLib.a ../../QTFileLib/libQTFileExternalLib.a -lpthread

6. QTSampleLister.tproj 파일의 Makefile 수정

vim ./QTFileTools/QTSampleLister.tproj/Makefile.POSIX

LIBS의 끝에 -lpthread 추가

lQTFileExternalLib ../../CommonUtilitiesLib/libCommonUtilitiesLib.a ../../QTFileLib/libQTFileExternalLib.a -lpthread

7. QTTrackInfo.tproj 파일의 Makefile 수정

vim ./QTFileTools/QTTrackInfo.tproj/Makefile.POSIX

LIBS의 끝에 -lpthread 추가

lQTFileExternalLib ../../CommonUtilitiesLib/libCommonUtilitiesLib.a ../../QTFileLib/libQTFileExternalLib.a -lpthread

8. 빌드
- 성공하게 되면 DarwinStreamingSrvr-Linux 폴더 생성

./Buildit install 

9. 방화벽 오픈

ufw allow 554/tcp
ufw allow 1220/tcp

10. 설치
- DarwinStreamingSrvr-Linux 폴더로 이동하여 설치

cd DarwinStreamingSrvr-Linux
./Install

11. 웹콘솔 접속
- http://xx.xx.xx.xx:1220/ 으로 접속
그러나, 아래와 같이 텍스트가 출력안되는 경우가 발생하였다.

다행히 구글링 결과 아래 사이트에서 해결책을 찾을 수 있었다.
https://vk.com/wingcatlab?w=wall-99790498_55

11.1 streamingadminserver.pl 파일 수정

cd DarwinStreamingSrvr-Linux
vi streamingadminserver.pl

상단에 아래와 같이 use Data::Dumper; 를 추가한다.

# Require needed libraries
package streamingadminserver;
use Socket;
use POSIX;
use Sys::Hostname;

use Data::Dumper;

1433 라인 정도에 $ENV{"LMSG"} = Dumper($messages{"en"}); 를 아래와 같이 추가

$ENV{"GENREFILE"} = 'genres';
$ENV{"COOKIES"} = $header{'cookie'};
$ENV{"COOKIE_EXPIRE_SECONDS"} = $config{"cookieExpireSeconds"};
$ENV{"LANGDIR"} = $langDir;
$ENV{"LANGUAGE"} = $language;
$ENV{"SSL_AVAIL"} = $ssl_available;
$ENV{"HTTPS"} =  "ON" if ($use_ssl);

$ENV{"LMSG"} = Dumper($messages{"en"});

11.2 parse_xml.cgi 파일 수정
- parse_xml.cgi 파일을 열어 sub foundString 이라는 서브루틴을 찾는다.

vi ./AdminHtml/parse_xml.cgi

마지막 리턴하는 부분인
return "$messages{$name}";
를 아래와 같이 대체한다.

$lmsg = $ENV{"LMSG"};
 my %copied_hash = %{ eval $lmsg };
 return $copied_hash{$name};

그런후 다시 ./Install 명령으로 재 설치

./Install

다윈스트리밍 서버에서 인증오류 발생시 처리

와우자 서버에서는 정상적으로 동작하는 프로그램이 다윈스트리밍 서버에서는
인증오류 발생시(RTSP/1.0 401 Unauthorized) 설정파일을 볼 필요가 있다.
1. qtaccess 파일 생성
영상파일이 있는 폴더가 D:\Service\DSS\Movies 라면 해당 폴더에 qtaccess 파일을 만든다.
qtaccess 파일의 내용을 아래와 같이 입력한다.

  
require any-user
  
require any-user

2. 위와 같이 했음에도 안되는 경우
C:\Program Files\Darwin Streaming Server\qtgroups 파일을 열어 아래와 같이 admin그룹에 사용자계정을 입력한다.

   admin:사용자계정

RTSP 인증처리(digest 방식)

String strUri = "rtsp://" + 서버IP + ":" + 서버포트 + 패스;
String strUserInfoHash = convertMd5Hash(사용자ID+ ":"+ strRealm +":"+ 사용자패스워드); 
String strUriHash = convertMd5Hash("ANNOUNCE"+":" + strUri); 
String strResHash = convertMd5Hash(strUserInfoHash+":"+ strNonce +":"+strUriHash); 
mStrAuthorization = "Digest username=\""+ 사용자ID+"\",realm=\""+strRealm+"\",nonce=\""+strNonce+"\",uri=\""+strUri+"\",response=\""+strResHash+"\""; 
strRequest = "ANNOUNCE rtsp://"+ 서버IP +":"+ 서버포트 + 패스+" RTSP/1.0\r\n" + 
"CSeq: " + 순번 + "\r\n" + 
"Content-Length: " + 내용.length() + "\r\n" + 
"Authorization: " + mStrAuthorization + "\r\n" + 
"Content-Type: application/sdp \r\n\r\n" + 
내용;