SlideShare a Scribd company logo
1 / 40
@river
ASP,  PHP(CodeIgniter ‑> Laravel),  Magento
Laravel Korea 페이스북 그룹
https://laravelrocks.com 
About Me
#
2 / 40
Agenda
php artisan route:list
What
How
Some Tips
Wrap Up
3 / 40
What ?
composer require 동영상/동영상
4 / 40
동영상 서비스
5 / 40
동영상 서비스
6 / 40
동영상 서비스
7 / 40
동영상 서비스
8 / 40
동영상 서비스
9 / 40
How ?
10 / 40
개발환경
php artisan down
Laravel 5.1
Homestead
phpstorm
yobi
phpunit, codeception
11 / 40
동영상 처리
업로드된 동영상 파일에서  스냅샷   이미지 생성하고,
mpeg4로 변환
12 / 40
FFmpeg
동영상 정보 구하기
스냅샷 이이지 생성
동영상 컨버팅
빌드
H.264 video encoder, AAC audio encoder, MP3 audio encoder, ...
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
ffprobe,  ffmpeg
13 / 40
 php‑ffmpeg/php‑ffmpeg 패키지
$ffprobe = FFMpegFFProbe::create();
$ffprobe
->format('video.avi')
->get('duration'); // returns the duration property
$ffmpeg = FFMpegFFMpeg::create();
$video = $ffmpeg->open('video.avi');
$video
->frame(FFMpegCoordinateTimeCode::fromSeconds(10))
->save('frame.jpg'); // saves snapshot image
$video
->save(new FFMpegFormatVideoX264(), 'video.mp4');
14 / 40
동영상 변환 대기 시간
15 / 40
비동기 처리
Laravel queue driver : database, Beanstalkd, IronMQ, Amazon SQS, Redis,
sync
IronMQ 
16 / 40
IronMQ
클라우드 기반의 메시지 큐 웹서비스
회원 가입 및 프로젝트 생성 ‑> token 발급
1M API Requests/Month Free
Pull Queue / Push Queue
17 / 40
IronMQ ‑ Config
package.json
"iron-io/iron_mq": "2.*"
.env
QUEUE_DRIVER=iron
config/queue.php
'iron' => array(
'driver' => 'iron',
'host' => 'mq-aws-us-east-1.iron.io',
'token' => '[YOUR TOKEN]',
'project' => '[YOUR PROJECT ID]',
'queue' => 'video',
'encrypt' => false,
),
18 / 40
IronMQ ‑ Job Class
app/Jobs/ConvertVideo.php
class ConvertVideo extends Job implements SelfHandling, ShouldQueue
{
use InteractsWithQueue, SerializesModels;
private $video;
public function __construct(Video $video)
{
$this->video = $video;
}
public function handle(VideoRepo $videoRepo)
{
// Convert video
...
}
}
19 / 40
IronMQ ‑ Controllers, Route, Middleware
app/Http/Controllers/VideosController.php
// 동영상 변환 큐잉
$this->dispatch(new ConvertVideo($video));
// 큐 이름 지정 방법
$job = (new ConvertVideo($video))->onQueue('video');
$this->dispatch($job);
app/Http/routes.php
// IronMQ에서 불려짐
Route::post('queue/video', function () {
return Queue::marshal();
});
app/Http/Middleware/VerifyCsrfToken.php
// 제외 route
protected $except = [
'queue/video',
];
20 / 40
IlluminateQueueQueue
protected function createPayload($job, $data = '', $queue = null)
{
...
return json_encode([
'job' => 'IlluminateQueueCallQueuedHandler@call',
'data' => ['command' => serialize(clone $job)],
]);
...
}
IlluminateQueueCallQueuedHandler
public function call(Job $job, array $data)
{
$command = $this->setJobInstanceIfNecessary(
$job, unserialize($data['command'])
);
...
}
[command] => O:21:"AppJobsConvertVideo":4:{s:28:"AppJobsConvertVideovideo";
O:45:"IlluminateContractsDatabaseModelIdentifier":2:
{s:5:"class";s:17:"EcplazaEmpVideo";s:2:"id";i:143;}
s:5:"queue";N;s:5:"delay";N;s:6:"*job";N;}
21 / 40
IronMQ ‑ public URL
IronMQ가 접근할 수 있도록  queue/video를 공개
finch, ngrok
$ npm install --global finch
$ finch login
$ finch forward http://video.dev
→ Requesting connection... ✔
→ Establishing secure connection... ✔
The following sites are now being forwarded. Press CTRL+C at any
time to end your session:
-----------------------------------------------------
| Public URL | Private URL |
-----------------------------------------------------
| https://worm-large.usefinch.io | http://video.dev |
-----------------------------------------------------
22 / 40
IronMQ ‑ Subscribe
Add subscriber
또는
php artisan queue:subscribe video https://worm-large.usefinch.io/queue/video
23 / 40
데모 동영상
0:39
24 / 40
IronMQ ‑ Testing
Job 테스팅시는  sync로
.env
QUEUE_DRIVER=sync
25 / 40
IronMQ
비동기 처리
로직 분리
스케일러블
구성할 때 할 일이 많다.
디버깅이 힘들다.
26 / 40
스냅샷 이미지 리사이징
스냅샷   이미지에서  리스트용,  재생 포스터용 등
필요한 크기의 이미지 생성
27 / 40
Intervention 사용해서 구현
단점
썸네일 사이즈가 변경되거나 새로운 사이즈의 썸네일이 필요한 경우
일괄 신규 생성
미사용 썸네일 삭제
웹 애플리케이션마다 이미지 처리 중복 구현
이미지 처리 레이어 분리
이미지 처리 전용
서버를 찾아보자 28 / 40
http://thumbor.org/
https://github.com/thumbor/thumbor
29 / 40
thumbor
30 / 40
thumbor
이미지 처리(리사이징, 필터링, 얼굴인식 등) 및 캐시 서버
웹 애플리케이션에서 이미지 처리 레이어를 분리
동적 생성. 원하는 크기의 이미지를 언제라도 사용 가능
WebP detect
31 / 40
thumbor
http://thumbor‑server/unsafe/ widthx height/ host/ path
 ceejayoz/laravel‑phumbor 패키지 사용
Phumbor::url('http://images.example.com/foo.jpg')
->resize(300, 200)
->addFilter('fill', 'green');
32 / 40
참 쉽죠 !
33 / 40
유사 서비스
Imgix
Thumbr.io
Cloudinary
Huluma
LibPixel
WeServe
34 / 40
Front
Bootstrap, jQuery
Video player : videojs
Javascript loader : RequireJS
Task runner : gulp
35 / 40
php artisan up
36 / 40
ELK를 이용한 실시간 로그 모니터링
AppHttpMiddlewareAttachLogstash
UptimeRobot
class AttachLogstash
{
public function handle($request, Closure $next)
{
if (App::environment() !== 'testing') {
$monolog = Log::getMonolog();
$redis = new RedisHandler(
Redis::connection(),
config('logstash'),
Logger::INFO
);
$formatter = new MonologFormatterLogstashFormatte
$redis->setFormatter($formatter);
$monolog->pushHandler($redis);
}
return $next($request);
}
}
Some
Tips
#
37 / 40
Wrap Up
php artisan optimize
FFMpeg
Laravel Queue
IronMQ
Thumbor
38 / 40
Reference
FFMpeg build
IronMQ and Laravel: Setup
Best Thumbnailing Solution ‑ Set up Thumbor on AWS
이미지 썸네일 생성에 관하여 (thumbor)
redis, logstash, elasticsearch, kibana를 이용해서 실시간 로그 모니터링 하기
39 / 40
php artisan serve
슬라이드 http://yhbyun.github.io/laravel‑video
40 / 40

More Related Content

PDF
XECon2015 :: [1-2] 이현석 - Learning Laravel
PPTX
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
PDF
Learning Laravel
PDF
[D2대학생세미나]140분의 파이썬(실습)
PDF
실무에서 라라벨 테스트를 작성하다 알게 된 것
PDF
PHP로 웹개발을 해보자
PDF
WEB Front-End 개발과정 살펴보기
PPTX
Akka Play With NetCore
XECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [3-1] 용영환 - HHVM 서비스 적용기
Learning Laravel
[D2대학생세미나]140분의 파이썬(실습)
실무에서 라라벨 테스트를 작성하다 알게 된 것
PHP로 웹개발을 해보자
WEB Front-End 개발과정 살펴보기
Akka Play With NetCore

What's hot (11)

PDF
『Modern PHP』 - 미리보기
PDF
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
PDF
Laravel로 스타트업 기술 스택 구성하기
PDF
Web Framework (웹 프레임워크)
PDF
커뮤니티와 함께한 예비개발자 성장기- 조성수님
PDF
개발자를 위한 웹표준 & 웹접근성이야기
PPTX
소프트웨어 개발자 로드맵
PPTX
How_to_choose_the_right_framework
PDF
티켓몬스터를 위한 PHP 개발 방법
PDF
유연하게 확장할 수 있는 PHP 웹 개발 이야기
PDF
[145]5년간의네이버웹엔진개발삽질기그리고 김효
『Modern PHP』 - 미리보기
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
Laravel로 스타트업 기술 스택 구성하기
Web Framework (웹 프레임워크)
커뮤니티와 함께한 예비개발자 성장기- 조성수님
개발자를 위한 웹표준 & 웹접근성이야기
소프트웨어 개발자 로드맵
How_to_choose_the_right_framework
티켓몬스터를 위한 PHP 개발 방법
유연하게 확장할 수 있는 PHP 웹 개발 이야기
[145]5년간의네이버웹엔진개발삽질기그리고 김효
Ad

Viewers also liked (20)

PDF
Kubernetes를 통한 laravel 개발프로세스 개선하기
PDF
[M] 프레임워크와 라이브러리(Framework and Library)
PDF
이미지 썸네일 생성에 관하여 (thumbor)
PDF
Kubernetes Boulder - Kit Merker - Cloud Native Deployment
PPTX
My sql 장애복구
PPTX
디지털 영상 정보 시스템, HD-SDI 매트릭스
PDF
동영상제작가이드북
PDF
OpenStack und Containers
PPTX
Kubernetes Workshop
PDF
Red Hat Forum Benelux 2015
PDF
PPTX
강의
PPTX
초간단 동영상 만들기
PDF
What's new in Kubernetes
PDF
Revolutionizing WSO2 PaaS with Kubernetes & App Factory
KEY
6장 지능형 웹 크롤링
PDF
Vim for php
PPTX
The beginner’s guide to 웹 크롤링 (스크래핑)
PDF
문돌이가 가르치는 서버사이드 PHP
PPTX
Slideshare를 이용한 ppt공유
Kubernetes를 통한 laravel 개발프로세스 개선하기
[M] 프레임워크와 라이브러리(Framework and Library)
이미지 썸네일 생성에 관하여 (thumbor)
Kubernetes Boulder - Kit Merker - Cloud Native Deployment
My sql 장애복구
디지털 영상 정보 시스템, HD-SDI 매트릭스
동영상제작가이드북
OpenStack und Containers
Kubernetes Workshop
Red Hat Forum Benelux 2015
강의
초간단 동영상 만들기
What's new in Kubernetes
Revolutionizing WSO2 PaaS with Kubernetes & App Factory
6장 지능형 웹 크롤링
Vim for php
The beginner’s guide to 웹 크롤링 (스크래핑)
문돌이가 가르치는 서버사이드 PHP
Slideshare를 이용한 ppt공유
Ad

Similar to XECon2015 :: [2-5] 변용훈 - Laravel 동영상 서비스 만들기 (20)

PDF
Laravel 로 배우는 서버사이드 #1
PPTX
처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차
PDF
Modern PHP
PDF
현대고등학교 PHP 강의 - 번외편 PHP 설치! (설리번 프로젝트)
PDF
보안프로젝트 세미나 Viper-v1.2
PDF
[232] 성능어디까지쥐어짜봤니 송태웅
PPTX
Eclipse RAP
PDF
톰캣 #01-소개
PPTX
HTML5 & CSS3 - Video,Audio
PPTX
Html5 video
PDF
Red Hat Forum 2012 - JBoss RHQ - Java Application Monitoring & Management Pla...
PDF
어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅
PDF
XECON2014 Laravel 프레임워크 소개
PDF
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
PPTX
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...
PPTX
Web2.0mission
PPTX
500.JBoss Troubleshooting Essential
PDF
톰캣 #10-모니터링
PDF
XECon + PHPFest 2014 XE 프로젝트 이야기
PDF
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터
Laravel 로 배우는 서버사이드 #1
처음부터 다시 배우는 HTML5 & CSS3 강의자료 6일차
Modern PHP
현대고등학교 PHP 강의 - 번외편 PHP 설치! (설리번 프로젝트)
보안프로젝트 세미나 Viper-v1.2
[232] 성능어디까지쥐어짜봤니 송태웅
Eclipse RAP
톰캣 #01-소개
HTML5 & CSS3 - Video,Audio
Html5 video
Red Hat Forum 2012 - JBoss RHQ - Java Application Monitoring & Management Pla...
어려웠다, WebRTC를 활용한 360º 영상통화 트러블 슈팅
XECON2014 Laravel 프레임워크 소개
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...
Web2.0mission
500.JBoss Troubleshooting Essential
톰캣 #10-모니터링
XECon + PHPFest 2014 XE 프로젝트 이야기
알파희 - PyPy/RPython으로 20배 빨라지는 아희 JIT 인터프리터

More from XpressEngine (20)

PDF
Docker 기반 개발환경 구축 - XE Open seminar #2
PDF
Github 100% 활용하기 - XE Open seminar #3
PDF
XE3 SEO를 다루기 - XE Open seminar #2
PDF
XE Open seminar #2 - keynote
PDF
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
PDF
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
PDF
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
PDF
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
PDF
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
PDF
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
PDF
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
PDF
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
PDF
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
PDF
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
PDF
[XECon2016] A-2 임형주 Webpack 실무 적용전략
PDF
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
PDF
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
PPTX
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
PPTX
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
PDF
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
Docker 기반 개발환경 구축 - XE Open seminar #2
Github 100% 활용하기 - XE Open seminar #3
XE3 SEO를 다루기 - XE Open seminar #2
XE Open seminar #2 - keynote
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용

XECon2015 :: [2-5] 변용훈 - Laravel 동영상 서비스 만들기