본문 바로가기
C++ 200제/코딩 IT 정보

우분투 스트리밍 서버 구현 (DDS, 윈도우7 x64, Ubuntu 10.04)

by vicddory 2017. 12. 31.

우분투 스트리밍 서버 구현 (윈도우7 x64, Ubuntu 10.04)


우분투 스트리밍 서버 구현 환경


- 윈도우7 64비트

- VMware 8.0.1

- Ubuntu 10.04 LTS : Ubuntu Server가 아니라, LTS 버전으로 우분투 스트리밍 서버 구현 진행


먼저 우분투 스트리밍 서버에 필요한 패키지들부터 미리 설치합니다.


1
2
3
4
5
6
7
sudo apt-get -q update
sudo apt-get --yes ---allow-unauthenticated install medibuntu-keyring
sudo apt-get -q update
sudo apt-get upgrade
sudo aptitude install apache2 openssh-server samba smbfs php5-ffmpeg
        libapache2-mod-php5 ffmpeg libavcodec-extra-52 vlc build-essential
        gstreamer0.10-ffmpeg gstreamer0.10-plugins-bad
cs

이어서, 우분투 스트리밍 서버의 기반이 되는 DSS(Drawin Streaming Server)를 설치합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sudo addgroup --system qtss
sudo adduser --system --no-create-home --ingroup qtss qtss
 
wget http://static.macosforge.org/dss/downloads/DarwinStreamingSrvr6.0.3-Source.tar
tar -xvf DarwinStreamingSrvr6.0.3-Source.tar
 
wget http://dss.macosforge.org/trac/raw-attachment/ticket/6/dss-6.0.3.patch
patch -p0 < dss-6.0.3.patch
 
wget http://dss.macosforge.org/trac/raw-attachment/ticket/6/dss-hh-20081021-1.patch
patch -p0 < dss-hh-20081021-1.patch
 
cd DarwinStreamingSrvr6.0.3-Source
mv Install Install.orig
 
wget http://dss.macosforge.org/trac/raw-attachment/ticket/6/Install
chmod +x Install
./Buildit
sudo ./Install
 
wget http://dss.macosforge.org/trac/raw-attachment/ticket/6/darwin-streaming-server
chmod +x darwin-streaming-server
 
sudo cp darwin-streaming-server /etc/init.d/darwin-streaming-server
sudo update-rc.d darwin-streaming-server defaults
cs


맨 처음 추가되는 그룹과 사용자는 나중에 웹 브라우저에서 관리자 모드로 전환할 때 사용이 됩니다.


그리고 우분투 스트리밍 서버 구축하기 위해 윈도우 64비트 사용하시는 분들은 ./Buildit 명령어 입력 후 에러가 발생할 수 있으니, 아래의 patch 파일과 rpm을 다운 받아 설치하세요.


1
2
wget http://www.abrahamsson.com/dss-6.0.3-x86_64.patch
wget http://www.abrahamsson.com/DarwinStreamingServer-6.0.3-2.src.rpm 
cs


에러는 대게, "streamingloadtool.o error 1" 였습니다.


여기까지 잘 진행이 되었다면, VMware말고 윈도우 브라우저에서 http://serverip:1220/을 입력해보세요.


우분투 스트리밍 서버 구현[리눅스 Linux darwin streaming server 구현 구축] 우분투 스트리밍 서버 구현


제 경우엔 192.168.187.139가 IP이기 때문에 http://192.168.187.139:1220/을 입력했습니다.


우분투 스트리밍 서버 구현 DDS[리눅스 Linux darwin streaming server 구현 구축] 우분투 스트리밍 서버 구현


아이디와 비밀번호는 qtss, qtss입니다.

간단한 체크 과정을 거쳐 최종적으로 위와 같은 기본 관리자 화면이 생성됩니다. 이젠 실제로 스트리밍으로 제공할 영상을 띄워볼 차례입니다. 우분투의 네트워크 환경을 NAT에서 Bridge로 변환했고, 변환 후 제 아이피는 192.168.0.59였습니다. 여기서 우분투 스트리밍 서버 구현이 막히기 시작하는 분들이 있어요. 저도 그랬고요. 실패 시엔, 왜 실패인지를 생각해 봐야겠죠.


분명히 서버로의 접근은 이루어지지만, 동영상 재생엔 실패합니다. 여기엔, 아주 간단한 솔루션이 하나 있습니다.


1
nmap -v localhost
cs


nmap을 이용해 로컬호스트의 포트들을 확인해 보는 것입니다.


우분투 스트리밍 서버 윈도우7[리눅스 Linux darwin streaming server 구현 구축] 우분투 스트리밍 서버 구현


위 그림처럼 우분투 스트리밍 서버를 구축하려면 rtsp 서비스가 오픈되어야 합니다.


RTSP(Real Time Streaming Protocol)가 뭐냐면....


"RTSP는 사용자가 멀티미디어 streaming을 제어할 수 있도록 도와주는 protocol"


그래서 사용자들은 RTSP를 이용해 서버에서 제공하는 영상으로의 접근이 가능합니다. 하지만, RTSP만의 상태를 확인했다고 해서 바로 영상으로의 접근이 이루어지진 않습니다. 간단한 메인 페이지 하나는 띄워야 합니다. (우분투 스트리밍 서버는 아직 미완성)


실제 진행상의 참조 사이트에서 제공하는 php 파일은 아래 링크를 클릭! (다운 후 .txt는 지우세요)


다운로드 - index.php.txt [링크]


1
2
3
4
5
6
7
8
9
10
11
12
nmap -v localhost$basedir = "/var"/streaming/playlists/untitled";
 
$pidfile = "/tmp/vlc";
 
$servername = "192.168.0.59";
 
$transcode = "--sout='#transcode{soverlay,ab=48,samplerate=44100,channels=1,acodec=mp4a,
    vcodec=h264, width=512,height=288,vfilter=\"canvas{width=512,height=288,aspect=16:9}\",
    fps=25,vb=384,venc=x264{vbv-bufsize=200,partitions=all,level=12,no-cabac,subme=7,
    threads=4,ref=2,mixed-refs=1,bframes=0,min-keyint=1,keyint=50,qpmax=51}}:gather:
    rtp{mp4a-latm,dst=127.0.0.1,port-audio=20000,port-video=20002,ttl=127,
    sdp=file:/var/streaming/playlists/untitled/untitled.sdp}'";
cs


다운 받은 파일에서 위의 부분은 별도의 수정이 필요합니다. 그러나... 우분투 스트리밍 서버가 잘 안 돼요.


잘 안되는 이유는... 소스 코드를 보시면 아시겠지만, 수많은 설정과 코덱들의 설정이 이루어져야만 저 PHP 파일로 정상적인 스트리밍을 할 수 있다는 것입니다. 그래서 아래처럼 간단하게 바꿔보아요.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
<HTML>
<BODY>Egloos Sample
<BR>
<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"
     codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="900" width="300"
<param name="src" value="a.mp4"/
<param name="scale" value="aspect" /
<param name="controller" value="true" /
<param name="autoplay" value="true" /
<embed type="video/quicktime"  pluginspage="http://www.apple.com/quicktime/download/"
   height="400" width="300" src="a.mp4" scale="aspect" controller="true"  autoplay="true" /
</object
</BODY
</HTML>
cs


index.html 파일입니다.


위의 소스는 pwd로 찍어보면 /var/www/index.html로 나옵니다. 그리고 현재, 재생이 되어야 할 영상도 /var/www 밑에 두었습니다. 우분투 스트리밍 서버를 오픈한 이후에 192.168.0.59를 브라우저에 입력하면 영상이 바로 재생이 됩니다.


http://192.168.0.59를 브라우저에 입력하면, /var/www/index.php or index.html을 로딩하게 됩니다.

브라우저에서 실제로 영상을 재생시키기 위해서 ffmpeg을 이용해 인코딩하였습니다. 바로 아래는 인코딩 소스고, 그 아래 그림은 실제 실행 과정에 대한 스샷입니다. (우분투 스트리밍 서버 구현 영상은 잘림)


1
2
3
sudo ffmpeg -/var/www/sample_300kbit.mp4
  -aspect 3:2 -s 480x320 -vcodec mpeg4 -b 480k
  -23.976 -acodec copy -ab 96k -sameq -pass 1 /var/www/bbb.mp4
cs


우분투 스트리밍 서버 우분투 서버[리눅스 Linux darwin streaming server 구현 구축] 우분투 스트리밍 서버 구현


기본으로 제공하는 영상은 /usr/local/movies에 있습니다.


이 영상을 끌고 와서 인코딩한 뒤에 정상적으로 재생이 되는 것을 위위위의 영상에서 확인해 볼 수 있죠. 그리고, 아예 우분투 스트리밍 서버로 접속이 안 될 경우엔 ufw로 포트 설정을 해주거나, xml 파일을 수정해 줍니다.


1
sudo aptitude install ufwsudo ufw allow 80 /tcp or udp
cs


ufw로 포트를 설정해서 외부 접근에 대해 설정해 줍니다. 그리고, 다른 방법으로는 streamingserver.xml 파일에 로컬 아이피를 추가하는 것입니다.


1
2
<PREF NAME="alt_transport_src_ipaddr" ></PREF>
<PREF NAME="alt_transport_src_ipaddr" >123.45.67.8</PREF>
cs


ifconfig를 눌러서 나오는 자신의 아이피를 추가해주세요. TCP로 설정할 경우엔 554 포트가 열려야 하고, UDP로 설정할 경우엔 6970이나, 6999가 열려있어야 합니다. 위처럼 xml 파일을 수정하시면 아래 명령어를 눌러서 우분투 스트리밍 서버를 재시작합니다.


1
sudo /etc/init.d/apache2 reloadsudo /usr/local/sbin/streamingadminserver.pl
cs


재시작을 하지 않으면, 이전 설정대로 동작하기 때문에 반드시 재시작해야 합니다. 그리고 스트리밍은 모바일에서도 가능해야 합니다. 아래 동영상은 넥서스S에서 앱으로 스트리밍 서버의 영상을 재생하는 화면입니다.


※ 동영상 잘림


부득이 앱으로 실행시킨 이유는 안드로이드 브라우저에서 바로 접근했을 경우, 우분투 스트리밍 서버의 영상을 제대로 동작시키지 못하기 때문입니다.


우분투 스트리밍 윈도우7 64비트[리눅스 Linux darwin streaming server 구현 구축]


이 부분은 차후 진행 사항이기도 한데, 아이폰에서도 넥서스S처럼 정상적으로 잘 동작합니다. 오디오 코덱 문제일지, 비디오 코덱 문제일지... 현재로선 감이 안 오는군요. 아래는 우분투 스트리밍 서버를 위한 안드로이드 예제 소스입니다.


전체 프로젝트 소스 - rtsptest.zip [링크]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package rtsp.com.android;
 
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class RtsptestActivityextends Activity implements OnClickListener {
    /-* Called when the activity is first created. *-
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.main);
        Button bt1 = (Button) findViewById (R.id.button1);
        bt1.setOnClickListener(this);
    }
 
    public void onClick(View arg0) {
        // TODO Auto-generated method stub           
        //뷰 인텐트 사용
        Intent it = new Intent(Intent.ACTION_VIEW);
 
        //재생할 동영상 주소
        Uri uri = Uri.parse("http://192.168.0.59/b.mp4");
 
        //재생할 동영상주소와 동영상코덱 설정
        it.setDataAndType(uri, "video/mp4");
 
        //액티비티 실행
        startActivity(it);
    }
}
cs


마지막으로 우분투 스트리밍 서버 구현에 참조한 정보 알려드리며 포스팅 마칩니다.


우분투 스트리밍 서버 DDS 기반[리눅스 Linux darwin streaming server 구현 구축]


1. FFMPEG 설정 및 사용 방법에 대한 참조 사이트 [링크]

2. DDS에 관한 PDF - AboutDrawinStreamingServer.pdf [링크] (20Page의 Step 1 부터 보시면 됩니다)

3. Wowza에 관한 PDF - WowzaMediaServer_UserGuide.pdf [링크] (자세한 사항은 다르지만, 큰 맥락에선 비슷비슷합니다)

4. 참조 사이트 : 안드로이드와 스트리밍 서버 연동 [링크]

5. 제작 과정 중 끄적였던 부분들 - 끄적끄적.txt [링크]


우분투 스트리밍 서버 구현 (DDS, 윈도우7 x64, Ubuntu 10.04)

댓글