[멀티미디어] 주어진 동영상파일(TXT ASCII CODE)을 버퍼링을 이용하여 스트리밍을 구현하라. (VC/WIN32API)
*종*
다운로드
장바구니
소개글
멀티미디어 과목의 과제인 주어진 동영상파일(TXT ASCII CODE)을 버퍼링을 이용하여 스트리밍을 구현하는 과제입니다.DirectX를 사용하지 않고 Win32 API를 이용한 Low-Level Programming를 이용하여 아스키값으로 구성되어진 텍스트 파일을 읽고 화면에 뿌려서 스트리밍 전송 하는 예입니다.
버퍼 사이즈에 따른 화면 차이를 볼 수 있으며, 어렵지 않은 예제입니다.
이 문제는 쓰레드를 이용하여 생산자/소비자 문제를 구현하였으며, 스트리밍을 하는 핵심 알고리즘을 구현하는 것이 목적입니다.
요구 사항
1. 주어진 동영상파일(TXT ASCII CODE)을 버퍼링을 이용하여 스트리밍을 구현하라.
- 입력 데이터 : ASCII파일로 된 연속된 부호 없는 8비트의 상수값
- 출력 데이터 : 화면상의 동영상 (GrayScale)
- ** DirectX를 사용하지 않고 Win32 API를 이용한 Low-Level Programming
사용 방법
1. 작업 환경은 Visual Studio C++ 6.0 SP6으로 하였으므로 폴더 내 워크스페이스 파일은 다음과 같다.
Streaming_Thread_20012548.dsw (VC 6.0 워크스페이스 파일)
2. 기본 환경은 다음과 같다.
UI Framework는 MFC를 이용하였습니다.
화면 출력 함수는 Win32 API를 이용하여 출력하였습니다.
실제 스트리밍을 위한 버퍼매니져는 C로 작성하였습니다.
3. 메인 프로세스 내에는 다음과 같은 쓰레드가 존재합니다.
- 송신자 쓰레드 : 실제 일정 간격을 두고 버퍼매니져에 데이터를 전송합니다. (Enqueue)
- 수신자 스레드 : 정확한 FPS를 위해 멀티미디어 타이머를 이용하여 구현되어 있으며, 버퍼에서 데이터를 Dequeue하여 화면에 출력합니다.
- FPS 계산 타이머 : 초당 Framerate를 위해 500ms 단위로 FPS를 계산하여 출력합니다.
4. 쓰레드 관리가 아직 미흡하여 간혹 쓰레드가 종료 안되는 경우가 있습니다.
결론 및 어려운 점
스트리밍을 위한 버퍼 구현은 생산자-소비자 문제와 연관이 되는데 이는 Circular Queue를 통해 해결하였으며, 동시에 일어나는 작업이므로 쓰레드를 이용하였다.
실제 구현해 본 결과 전송 속도가 높지 않아 fps세팅을 높여도 30정도밖에 되지 않는다. 이는 시스템 환경에 따라 많이 달리짐을 알 수 있으며, 근본적인 원인은 쓰레드 루프내에서 파일을 한 프레임단위로 fscanf을 하는데서 많이 지연된다. ASCII 데이터이므로 바이너리 모드도 아닌 fscanf로 읽었으며, 무엇보다 한번에 메모리에 올리는 것이 아니라 버퍼링을 테스트 하는 것이므로, 매 프레임단위로 읽기에 생각보다 많이 느림을 알 수 있다. 또한 주어진 데이터에
** 현재 레포트 내에 소스코드는 첨부하지 않았습니다.
컴파일 실행환경
개발 환경O/S : Windows XP Professional SP2
Tool & Compiler : Microsoft Visual C++ 6.0 SP6
Language : C++ (MFC, Win32API)
압축파일 내 파일목록
test_video.txt
[멀티미디어론] 과제3_Streaming.doc
~$티미디어론] 과제3_Streaming(20012548 박종식).doc
~$티미디어론] 과제3_Streaming.doc
~WRL0001.tmp
Streaming_Thread_20012548/BufferManager.cpp
Streaming_Thread_20012548/BufferManager.h
Streaming_Thread_20012548/MultiMediaTimer.h
Streaming_Thread_20012548/ReadMe.txt
Streaming_Thread_20012548/resource.h
Streaming_Thread_20012548/StdAfx.cpp
Streaming_Thread_20012548/StdAfx.h
Streaming_Thread_20012548/Streaming_Thread_20012548.aps
Streaming_Thread_20012548/Streaming_Thread_20012548.clw
Streaming_Thread_20012548/Streaming_Thread_20012548.cpp
Streaming_Thread_20012548/Streaming_Thread_20012548.dsp
Streaming_Thread_20012548/Streaming_Thread_20012548.dsw
Streaming_Thread_20012548/Streaming_Thread_20012548.h
Streaming_Thread_20012548/Streaming_Thread_20012548.ncb
Streaming_Thread_20012548/Streaming_Thread_20012548.opt
Streaming_Thread_20012548/Streaming_Thread_20012548.plg
Streaming_Thread_20012548/Streaming_Thread_20012548.rc
Streaming_Thread_20012548/Streaming_Thread_20012548.vsd
Streaming_Thread_20012548/Streaming_Thread_20012548Dlg.cpp
Streaming_Thread_20012548/Streaming_Thread_20012548Dlg.h
Streaming_Thread_20012548/res/Streaming_Thread_20012548.ico
Streaming_Thread_20012548/res/Streaming_Thread_20012548.rc2
[멀티미디어론] 과제3_Streaming.doc
~$티미디어론] 과제3_Streaming(20012548 박종식).doc
~$티미디어론] 과제3_Streaming.doc
~WRL0001.tmp
Streaming_Thread_20012548/BufferManager.cpp
Streaming_Thread_20012548/BufferManager.h
Streaming_Thread_20012548/MultiMediaTimer.h
Streaming_Thread_20012548/ReadMe.txt
Streaming_Thread_20012548/resource.h
Streaming_Thread_20012548/StdAfx.cpp
Streaming_Thread_20012548/StdAfx.h
Streaming_Thread_20012548/Streaming_Thread_20012548.aps
Streaming_Thread_20012548/Streaming_Thread_20012548.clw
Streaming_Thread_20012548/Streaming_Thread_20012548.cpp
Streaming_Thread_20012548/Streaming_Thread_20012548.dsp
Streaming_Thread_20012548/Streaming_Thread_20012548.dsw
Streaming_Thread_20012548/Streaming_Thread_20012548.h
Streaming_Thread_20012548/Streaming_Thread_20012548.ncb
Streaming_Thread_20012548/Streaming_Thread_20012548.opt
Streaming_Thread_20012548/Streaming_Thread_20012548.plg
Streaming_Thread_20012548/Streaming_Thread_20012548.rc
Streaming_Thread_20012548/Streaming_Thread_20012548.vsd
Streaming_Thread_20012548/Streaming_Thread_20012548Dlg.cpp
Streaming_Thread_20012548/Streaming_Thread_20012548Dlg.h
Streaming_Thread_20012548/res/Streaming_Thread_20012548.ico
Streaming_Thread_20012548/res/Streaming_Thread_20012548.rc2
참고 자료
MSDN 사이트 - http://msdn.microsoft.com(참고로 페이지 수는 소스코드 제외한 프로그램 설명 및 실행 페이지수)
이 자료와 함께 구매한 자료
- WINAPI로 만든 MP3, MID, WAV... MP3플레이어 소스 0페이지
- JSP 로 구현한 로그인 5페이지
- 깔끔하고 단순한 레포트 표지 입니다. 1페이지
- MFC 역행력(2X2) 출력 0페이지
- OpenCV 와 TCP 를 활용한 원격영상전송 2페이지