youtube 비슷한 기능의 사이트 만들기 |
| programming/server 2007/09/20 03:45 |
간단하게 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 : 실행파일. 파일이 커서 나눔
참고 :
- FFmpeg on Windows
- FFMpeg 윈도우에서 컴파일 방법
- [Media] FFmpeg
- ffmpeg 설치
- FFmpeg Documentation
- FFmpeg Windows Help
- FFmpeg usage command
- 내 홈페이지에 FLV플레이어를 달아보자.
- JW FLV PLAYER 3.11
cine_code.zip
댓글을 달아 주세요
우수한과 아주 도움이 되는!
중대하고 유용한 위치!
좋은 잘보았습니다. 참고많이 됐습니다.
그런 경이롭 위치를 위해 많게의 감사!
너는 차가운 위치를 만들었다!
위치에 중대한 일은 그것을 좋아했다!
여보세요, 아주 좋은 위치!
좋은 위치는 그것 찾아본 즐겼다!
우수한 일! 감사!
친구는 너의 위치의 현재 팬이 되었다!