간단하게 youtube 처럼 웹에서 서버에 동영상을 올리고, 서버에서 플래시용 flv 동영상으로 변환해서 유저가 볼 수 있게 하는 서비스를 만들어 봤습니다. 갑자기 재미있을 거 같아서 (jw flv player 랑, ffmpeg 조합이면 충분히 가능해 보여) 시작한 것인데, 혹시 관심을 가지신 분들이 있을 까 해서 정리해봅니다. (현재는 흥미를 잃어서 중단. ^^)
위 스샷이 지금 만들어서 회사 PC에 깔고 팀원 아저씨들 몇 명이 업데이트 하고 있는 페이지 입니다. 이 페이지는 게임 참고 영상을 보기 쉽게 모아보자는 의도로 시작했습니다. (‘웹 상의 동영상을 모아서 웹 상에서 편하게 보고, 분류하자’가 목표.) 아래 흐름으로 만들었습니다.
1. 웹주소를 입력 받아 다운로드를 받는다.
2. flv 로 변환한다.
3. 웹페이지에서 flv 동영상을 볼 수 있다.
당연하지만 자동화가 필요해서 간단하게 다운로드 받고, 변환하는 서버 프로그램을 만들었습니다. 그래서 대략적으로 웹 페이지에서 등록하고 자동으로 변환 되서 웹으로 볼 수 있는 youtube 같은 형태를 갖추게 되었습니다.
만들면서 몇 가지 이슈들 간단하게 정리해봤습니다.
* 웹페이지 작업
- php 로 db에서 리스트 얻고, 업데이트 되는 기능 작성
- 카테고리 작업
- 업로드해서 올리는 기능 작성
- 리스트 추가시 서버에 소켓으로 연결해서 정보를 보내줌
- db 없이 서버를 간단하게 만들기 위해 웹페이지에 기능을 넣음
- mssql과 mysql 작성 (밑에 테스트 페이지가 mysql 이어서 mysql 루틴 추가)
- php와 db는 완전 비 전문가라 기능만 되도록 만듦
* flv 플레이
- youtube, mncast 등의 ucc 사이트들이 사용하는 동영상은 플래시의 flv 포맷
- 플레이어는 JW FLV Player 사용 (참고 : http://www.jeroenwijering.com/?item=JW_FLV_Player)
- 비 상업적인 목적은 공짜
- 당연하지만 플레이가 매우 잘 됨
- 시작 전에 jpeg로 타이틀 이미지를 붙일 수 있음
- 완전 문외한이라 그냥 가져다 쓰기만 함
* 서버
- ini 에서 설정파일 읽기
- 간단한 콘솔 프로젝트
* 서버 멀티 쓰레딩 구성
- 작업 쓰레드에서는 작업 큐에 있는 url을 '다운로드->변환'의 작업 (idle에는 우아하게 블럭시키기)
- listen 쓰레드에서는 웹서버에서 보내준 정보를 큐에 넣기
- 가볍게 select 사용
- 종료시 우아하게 종료 (웹 통해서 종료 메세지 보냄)
* 웹주소를 받아서 다운로드 받기
- InternetOpen, InternetReadFile 등을 이용해서 다운 로드 받음
* 동영상 파일을 flv 변환
- 킹왕짱 ffmpeg 프로젝트 활용 (참고: http://ffmpeg.mplayerhq.hu )
- 윈도우에서 빌드해서 서버에 붙이려고 했으나, 재미로 하기엔 빌드가 큰 일이라 win32로 빌드된 ffmpeg 를 실행하는 것으로 대체 (참고: http://arrozcru.no-ip.org/ffmpeg_builds )
- ffmpeg 에서 동영상을 flv로 잘 변환해줌 (지원 코덱이 굉장히 많음 good!!!)
- 서버 루틴에 이미지 프로세싱은 전혀 없음 (이미지 크기, 플레이타임 등은 ffmpeg 실행해서 얻음)
- jpg 시퀀스로 뽑는 기능도 있어서 중간 정도의 이미지로 스냅샷
- ffmpeg가 일부 파일에 대해서 변환 끝내고 종료안하는 버그가 있음 (이 경우 속상하게도 그 쓰레드는 계속 대기 상태가 되어버림.)
원래는 스텝 별로 자세히 정리를 해보려고 했지만 생략하고 소스를 몽땅 올립니다. 관심 있는 분들은 참고하세요. (더 이상 진행을 안 할 거 같아서 업데이트는 없을 거 같습니다. ^^)
테스트 사이트 :http://www.digibath.com/tinycine/tinycine.php?q=low (집 PC로 운영하는 거라서 서비스는 언제 중단될지 모릅니다. ㅎㅎ 참고로 db 초기화등의 일부 기능은 제거된 버전입니다. 간단하게 테스트 해보셔도 됩니다. youtube처럼 파일 올려서 변환하는 건 웹서버가 분리되어 있어서 안되는 관계로 disable.)
소스 : cine_php.zip (php소스), cine_code.zip (서버소스)
테스트 실행파일 : cine_bin.zip, cine_bin_ffmpeg.zip : 실행파일. 파일이 커서 나눔
ps. flv 가 별도의 코덱이 필요없이 플래시에서 볼 수 있어서 좋긴 하네요. ( tig 같은 사이트는 못보는 영상도 종종 있고... flv 가 최고 성능은 아니지만 어디서나 볼 수 있어 좋아보입니다.)
참고 :
-
FFmpeg on Windows-
FFMpeg 윈도우에서 컴파일 방법- [Media] FFmpeg-
ffmpeg 설치
-
FFmpeg Documentation-
FFmpeg Windows Help
-
FFmpeg usage command
-
내 홈페이지에 FLV플레이어를 달아보자.-
JW FLV PLAYER 3.11
트랙백 주소 :: http://gamecode.org/tt/trackback/100
댓글을 달아 주세요
찌라시 굿... 회사에 여성 개발자들 좀 참가 권유를.. ㅡㅡ;;