독까의 이야기

요즘 대부분의 웹사이트들은 보안 인증서 (SSL) 적용이 되어 있다. 개인 정보가 등록되어 있는 웹사이트들은 SSL 미적용시 법적으로 처벌을 받게 되어 있다. 


https 프로토콜의 기본 포트는 443 이다. 

443 포트를 다수의 웹사이트가 공유하여 사용하려면, 멀티 인증서 또는 와일드카드 인증서를 적용해야만 했다. 

그러나, IIS 8.0 이상 부터는 동일 아이피에서도 443 포트 다중 사용이 가능하게 되었다. 


https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-server-name-indication-sni-ssl-scalability


"서버 이름 표시" SNI 가 그것인데, 해당 기능에 대해서 테스트를 진행하도록 하겠다. 



# 1 

SSL 적용 될 웹사이트 생성 


sni1.gunnm.xyz 

sni2.gunnm.xyz




# 2 

발급 된 인증서 가져오기

30일 무료 이용 가능한 인증서 발급 받은 후 진행 했다. 


IIS 최상단 노드에서 "서버 인증서" 선택


우측 상단 "가져오기" 선택해서 발급 받은 .pfx 인증서를 선택한다. 

인증서 저장소는 "웹 호스팅" 으로 지정한다. 개인으로 선택해도 되는데, 기술문서에서 웹 호스팅으로 선택 했다고 하니깐 그대로 따라해 본다. 



sni2.gunnm.xyz 인증서도 동일한 방식으로 가져온다. 


완료시 아래와 같이 확인 가능하다. 




# 3

바인딩에 https 프로토콜 추가


호스트 이름은 반드시 CN 과 동일하게 입력한다. 


ex) 

기존 등록 된 바인딩 : gunnm.xyz / www.gunnm.xyz


SNI 설정시 https 프로토콜 2개 추가 필요

https://gunnm.xyz

https://www.gunnm.xyz






# 4

https 페이지 호출 및 SSL 바인딩 목록 확인





cmd 실행 후, netsh http show sslcert 입력




SSL 바인딩 조회시, 아이피에 대한 443 할당이 아닌 (127.0.0.1:443) 각 호스트값에 443 포트가 할당 된 것을 확인 할 수 있다. 


다수의 웹사이트를 구동 중인 사용자에게 유용한 기능이라고 할 수 있다. 


미디어 서비스 설치가 완료 되었으니, 실시간 스트리밍 설정을 구축하려고 한다. 


프로그램은 Microsoft Expression Encoder 4 SP2 를 이용한다. 


MS 에서는 해당 프로그램에 대한 판매 및 지원이 종료가 되었다고 한다. 그래서 무료로 사용이 가능한 것 같다. 


https://answers.microsoft.com/ko-kr/windows/forum/windows_7-windows_programs/%EC%9D%B5%EC%8A%A4%ED%94%84%EB%A0%88%EC%85%98/0b010507-3d8b-46cd-9a1b-d172f3c2e816


일단 다운로드 링크를 통해 접속하여 파일 다운로드 및 설치를 진행한다.


https://www.microsoft.com/ko-KR/download/details.aspx?id=27870




다음 단계로 넘어가면 "제품 키 입력" 이 나오는데, 무시하고 그냥 진행하면 된다. 키를 구입하려고 해도, 해당 페이지 호출이 안 되기 때문이다. 

제품 키 입력을 꼭 해야 한다면, 아래의 링크를 타고 가서 복사해오면 된다. 

https://www.youtube.com/watch?v=uY5G5_Igq68



Default 로 계속 진행을 한다.


설치 완료 후 프로그램을 실행하면, 프로젝트 선택이 나오는데 우측 하단의 "라이브 브로드캐스트 프로젝트" 를 선택한다. 



그런데 문제가 발생했다. 비디오 장치를 선택하면 작동 중지 메시지가 호출 된다.



호환성 문제로 추정되어 실행 파일의 호환성 버전을 윈도우 7 로 낮췄는데도, 비정상 작동이 반복 된다. 


Windows Server 2016 에서는 해당 프로그램 구동이 어려울 것 같다. 


그래서, 데스크톱에 설치 후 진행을 했다. 어차피 서버의 역할은 단순하게 동영상 중계만 해주는 것이기 때문이다. 


인코더 프로그램 설정을 진행하기 전에, 미디어 서비스의 설정을 우선 진행한다. 



스트리밍 게시 지점을 선택하여 진입 후, "게시 지점 추가" 를 한다. 


파일 이름은 뭐 본인이 좋아하는거 아무거나 입력해도 된다. 



고급 설정에서 하단의 "첫 클라이언트 요청 시 게시 지점 자동 시작" 을 활성화 해준다. 



확인을 눌러서 추가 작업을 완료하면, "게시 지점 시작" 을 눌러서 활성화 진행 한다.



이제 인코더 설정을 진행한다. 


"라이브 원본" 창에서 장치 원본 추가 를 선택 한다. 



비디오 장치에서 "Screen Capture Source" 를 선택한다. 

오디오 장치는 탭에서 본인의 입력 장치를 선택하면 된다. 나는 오디오 input 이 없어서 안 나온다. 


"사각형 선택" 선택 후, 보여질 영역을 선택 한다. 



선택이 되면, 사각 박스 영역에서 출력되는 화면이 라이브 원본1 의 창에서도 출력이 된다. 



이제 우측의 인코딩탭에서 출력 형식을 "IIS 부드러운 스트리밍" 으로 선택을 한다. 



나머지 인코딩의 세부 설정을 본인이 알아서 선택을 한다. 


출력탭에서 게시 지점 활성화 후, 위치를 입력한다. 


위의 IIS 미디어 서비스에서 생성한 게시 지점 url 을 입력을 해준다. 


http://win.gunnm.xyz/gunnm.isml



입력 후 연결을 누르면, 계정 정보를 입력하라는데 그냥 확인 선택하면 된다. 미디어 서비스에서 자격 증명 설정을 안 했기 때문에 그냥 통과 된다. 


이제 중앙의 "시작" 을 선택하면 스트리밍이 시작이 된다. 





다음은 인터넷익스플로러 (IE) 에서 실시간 스트리밍 시청이 가능하도록 설정 한다. 


템플릿탭에서 원하는 플레이어를 선택 한다. 


"생성" 을 선택하여 템플릿을 생성 한다. 폴더는 본인이 원하는 아무데나 설정하면 된다. 큰 의미는 없다. 




지정한 폴더에 생성 된 파일을 전체 복사하여, 웹서버의 특정 폴더에 저장 한다. 




익스플로러에서 해당 경로에 맞는 url 을 입력한다. Microsoft Silverlight 미설치시에는 화면이 안 나오므로, 설치를 진행한다. 


http://win.gunnm.xyz/live/default.html



익스에서 정상적으로 호출이 된다. 다만 딜레이가 10초 이상은 걸리는 것 같다. 약 20초 정도? 



다음으로는 이미 생성 된 웹페이지에 스트리밍 영역을 추가하는 작업을 진행한다. 


간단하게, html 코드로 메인 페이지를 생성한다. 


index.html


<html>

<head>

<title>Title is here</title>

</head>

<body>

<b>"Hello, world!" </b><p>

<i>win.gunnm.xyz Streaming Test</i><p>

<img src="image/top.jpg"><p>

</body>

</html> 



live 폴더 안의 default.html 을 편집기로 연다. 


1차로 필요한 부분은 <head></head> 안의 <style type 부터 </script> 까지다. 당연히 index.html 의 동일 부분에 삽입 한다. 


2차로 필요한 부분은 <body></body> 안의 <div id="silverlightControlHost"> 부터 </div> 까지다. 이것도 위와 마찬가지로 한다. 


그대로 복사를 해서 붙이면 플레이어가 100% 의 사이즈로 호출이 되기 때문에, 사이즈를 줄여준다. 


<object data="data:application/x-silverlight," type="application/x-silverlight" width="100%" height="100%" 을 아래와 같이 고쳐준다.


<object data="data:application/x-silverlight," type="application/x-silverlight" width="50%" height="50%"


이 외 웹페이지에 이것저것 추가 하여도 상관은 없다. 


http://win.gunnm.xyz/index.html 을 호출을 하면 당연히 동영상 플레이어 표시가 안 된다. 


원인은 live 폴더 안에 있는 템플릿 관련 파일들이 호출되지 않기 때문이다. 해당 파일들을 웹루트에 복사를 하거나, html 파일 상단에 include 값을 입력하든, 절대 경로의 변경을 하든지 알아서 하면 된다. 


아무튼 이래저래 해서 다시 메인 페이지 호출을 진행을 한다. 



생각대로 잘 나온다. 플레이어 내의 영상 크기를 수정을 하면 더 좋을 것 같은데, 실제 서비스를 하는 것도 아니니 넘어가기로 한다. 


이상으로 윈도우 IIS 미디어 서비스 + Expression Encoder 4 를 이용한 실시간 스트리밍 구축에 대해 진행 하였다. 

트위치나 유튜브 실시간 방송처럼 화상캠을 통해 직접 방송이 가능 하겠지만, 장비가 없으므로 해당 테스트에 대해서는 진행하지 않는다. 


웹을 통한 음악 및 동영상 시청을 위해서는 서버에 미디어 서비스가 설치가 되어 있어야 한다. 


기존 Windows 2003 에서는 윈도우 기능 추가를 통해서 쉽게 설치가 가능한데, 2008 이상 부터는 웹플랫폼을 이용한 설치 진행으로 변경 되었다. 


Windows 2003 



Windows 2008 이상 



이번에 테스트 진행한 서버의 환경은 Windows Server 2016 이다. 


IIS 에 "웹플랫폼 설치 관리자" 를 설치하는 것 부터 시작을 한다. 



서버에서 웹브라우저 실행 후, https://www.iis.net/downloads 접속 후, 설치 파일 다운로드 및 실행.




웹플랫폼 설치가 완료되면, 실행 후 검색창에 "미디어" 를 입력하여 설치 패키지를 검색한다. 



결과를 통해 출력 된 설치 패키지를 추가 하고, 하단의 설치를 클릭 한다. 



그런데, 설치가 진행되지 않는다. 



혹시나 싶어, 설치 파일을 직접 다운로드 후 설치를 진행 한다. 



역시나 설치가 안되는데, 설치 실패 원인 메시지를 출력해주기는 한다. 



분명히 Windows 2016 에 설치 된 IIS 의 버전은 7.0 을 훨씬 넘는 10.0 인데 왜 설치가 안 될까? 를 고민하지도 않고 구글 검색을 시작한다. 


레지스트리 변경을 통해 하위 버전 웹플랫폼 제공 패키지 설치가 가능했다는 글을 확인 했다. 


키 : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp

값 : MajorVersion 

해당 값의 수치를 10 에서 9 로 변경을 한다. 



변경 후, 웹플랫폼 또는 직접 다운로드 받은 설치 파일을 통해 미디어 서비스 설치를 다시 진행한다. 



레지스트리 변경값 원복 후, IIS 에서 미디어 서비스 관리자를 확인해 본다. 



미디어 서비스가 정상적으로 설치되었음이 확인 된다. 


일반적으로 서버에 동영상을 업로드하여 단순하게 재생만 하는 것이라면, 굳이 미디어 서비스 설치를 할 필요는 없다. 


일부 웹브라우저 또는 미디어 플레이어 에서 80 포트를 이용해서 동영상 재생이 가능하기 때문이다. 


그럼 왜 미디어 서비스를 설치를 해야 하는가? 


실시간 스트리밍 방송 서비스를 하고자 하는 사용자가 있기 때문이다. 


실시간 스트리밍 서비스를 위한 설정 작업에 대해서는 다음 게시글에 작성 하고자 한다. 



# IISMedia_amd64_ko-KR.msi 다운로드

IISMedia_amd64_ko-KR.msi