인터넷 영상 스트리밍 클라이언트를 웹에서 구현하기 위해서는 여러 가지 방법을 이용할 수 있다. 그 중에서 Flash를 이용하여 많이 구현을 한다. 그 이유는 대부분의 브라우져에서 Flash를 지원하며, 빠른 구현이 가능하고, 영상 스트리밍과 관련된 많은 기능을 지원하기 때문이다. Flash에서 스트리밍을 위해 많이 사용하는 프로토콜은 RTMP라고 하는 것이 있다. RTMP는 Macromedia에서 영상 스트리밍 전송을 위해 만든 기술로써 이를 지원하는 서버가 많이 존재한다.
Flash는 보안과 관련하여 많은 고민을 하여 만들어 졌는데, 이 중 하나가 RTMP에서 들어온 음성 스트림에 대한 샘플 데이터에 대한 보안이다. 샘플 데이터는 SoundMixer라는 클래스의 computeSpectrum()이라는 함수[1]를 이용하여 알아낼 수 있다. 서버에서 허가를 하지 않으면 RTMP에서 들어온 음성 스트림 샘플을 이용할 수 없게 된다. 소리가 나오는데 computeSpectrum()의 결과값이 ‘0’으로만 채워져서 리턴되는 것이다. 이 포스팅에서는 이를 WowzaMediaServer에서 어떻게 해결하는지를 알아 본다.
방법은 간단하다. WowzaMediaServer 설치 디렉토리 밑의 conf 디렉토리에서 설정을 바꾸고 싶은 어플리케이션(Application)의 Application.xml 파일을 변경하면 된다. Root->Application->Client->Access->StreamAudioSampleAccess 설정에 *를 표시하면 이 문제가 해결된다 [2]. 이 문제는 crossdomain.xml[3]과 관련된 문제와는 별게의 것으로 알려져 있다.
<Client> <IdleFrequency>-1</IdleFrequency> <Access> <StreamReadAccess>*</StreamReadAccess> <StreamWriteAccess>*</StreamWriteAccess> <StreamAudioSampleAccess>*</StreamAudioSampleAccess> <!-- 이부분 수정 --> <StreamVideoSampleAccess></StreamVideoSampleAccess> <SharedObjectReadAccess>*</SharedObjectReadAccess> <SharedObjectWriteAccess>*</SharedObjectWriteAccess> </Access> </Client>
참고 자료
[1] SoundMixer 클래스(2013-05-21 02:02 KST에 확인), http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundMixer.html
[2] Example of how to use ComputeSpectrum with Wowza Media Server(2013-05-21 02:23 KST에 확인), http://www.wowza.com/forums/content.php?56-Example-of-how-to-use-ComputeSpectrum-with-Wowza-Media-Server
[3] Cross-domain policy for Flash movies(2013-05-21 02:23 KST에 확인), http://kb2.adobe.com/cps/142/tn_14213.html