Vcase User's Manual

Similar documents
PowerPoint 프레젠테이션

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :

Microsoft Word - src.doc

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

0. 들어가기 전

회사소개서2

PowerPoint Template

PowerPoint Presentation

rmi_박준용_final.PDF

ISP and CodeVisionAVR C Compiler.hwp


Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Microsoft PowerPoint - 03-TCP Programming.ppt

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

07 자바의 다양한 클래스.key

Secure Programming Lecture1 : Introduction

Interstage5 SOAP서비스 설정 가이드

서현수

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

SBR-100S User Manual

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

DocsPin_Korean.pages

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - 04-UDP Programming.ppt

소규모 비즈니스를 위한 플레이북 여기서 다룰 내용은 다음과 같습니다. 1. YouTube 소개 2. YouTube에서 비즈니스를 위한 채널 만들기 3. 눈길을 끄는 동영상 만들기 4. 고객의 액션 유도하기 5. 비즈니스에 중요한 잠재고객에게 더 많이 도달하기

대량문자API연동 (with directsend)

< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10

Microsoft PowerPoint - Java7.pptx

게시판 스팸 실시간 차단 시스템

12. OAuth 2.0 으로사용자관리하기 12.1 들어가며 대부분의회사나조직은직원과고객데이터베이스를가지고있습니다. 쓰리래빗츠를도입하면 일부데이터베이스를이중으로관리해야하는불편함에직면합니다. 이문제를해결하기위해서 쓰리래빗츠는 OAuth 2.0 으로사용자를관리하는기능을제공

FileMaker 15 ODBC 및 JDBC 설명서

FileMaker ODBC 및 JDBC 가이드

Office 365 사용자 가이드

Windows 8에서 BioStar 1 설치하기

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

3장

3ÆÄÆ®-14

마켓온_제품소개서_ key

[Brochure] KOR_TunA

View Licenses and Services (customer)

vRealize Automation용 VMware Remote Console - VMware

160322_ADOP 상품 소개서_1.0

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

1217 WebTrafMon II

PowerPoint 프레젠테이션

gcloud storage 사용자가이드 1 / 17

자바-11장N'1-502

Facebook API

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

12-file.key

<4D F736F F F696E74202D20C1A63235C0E520B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D628B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Todo list Universal app

1

PowerPoint 프레젠테이션

ibmdw_rest_v1.0.ppt

Microsoft Word - Armjtag_문서1.doc

Contents 1 소개 설치 및 사용방법 21 다운로드 22 라이브러리 등록 23 Android Menifest 정의 간단한 31 플레이어 생성 32 이벤트 리스너 정의 33 Surface 할당 3

JUNIT 실습및발표

Week13

비긴쿡-자바 00앞부속

신림프로그래머_클린코드.key

PowerPoint Presentation

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

PowerPoint 프레젠테이션

MasoJava4_Dongbin.PDF

PowerPoint Template

PowerPoint Presentation

Spring Boot/JDBC JdbcTemplate/CRUD 예제

2 PX-8000과 RM-8000/LM-8000등의 관련 제품은 시스템의 간편한 설치와 쉬운 운영에 대한 고급 기술을 제공합니다. 또한 뛰어난 확장성으로 사용자가 요구하는 시스템을 손쉽게 구현할 수 있습니다. 메인컨트롤러인 PX-8000의 BGM입력소스를 8개의 로컬지

TTA Journal No.157_서체변경.indd

NoSQL

ilist.add(new Integer(1))과 같이 사용하지 않고 ilist.add(1)과 같이 사용한 것은 자바 5.0에 추가된 기본 자료형과 해당 객체 자료 형과의 오토박싱/언박싱 기능을 사용한 것으로 오토박싱이란 자바 컴파일러가 객체를 요구하는 곳에 기본 자료형

사용설명서를 읽기 전에 안드로이드(Android)용 아이디스 모바일은 네트워크 연결을 통해 안드로이드 플랫폼 기반의 모바일 기기에서 장치 (DVR, NVR, 네트워크 비디오 서버, 네트워크 카메라) 에 접속하여 원격으로 영상을 감시할 수 있는 프로그램입니다. 장치의 사

쉽게 풀어쓴 C 프로그래밊

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

목차 Cloud CDN 콘솔... 3 배포관리 다운로드 또는 VOD 다운로드 배포생성 콘텐츠저장소 (Origin) 설정 서비스도메인 (CNAME) 설정 서비스설명... 8

Web Scraper in 30 Minutes 강철

Network Programming

BuzzAd Optimizer Proposal for partner 1

교육자료

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

자바 프로그래밍

thesis

메일서버등록제(SPF) 인증기능적용안내서 (Exchange Windows 2003) OS Mail Server SPF 적용모듈 작성기준 Windows Server 2003 Exchange Server 2003 GFI MailEssentials 2010 fo

Microsoft PowerPoint - web-part03-ch20-XMLHttpRequest기본.pptx

사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

BEA_WebLogic.hwp

아래 항목은 최신( ) 이미지를 모두 제대로 설치하였을 때를 가정한다

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

C# Programming Guide - Types

요약 1

Java

Transcription:

O N L I N E V I D E O P L A T F O R M Getting Started Vcase API 2016.12.15

Table of Content Vcase 제공범위... 2 기능및특징... 3 전체기능목록... 11 연동방식... 12 연동정보... 13 사이트접속및회원가입 / 서비스생성... 13 Access Token 발급... 14 API 동작방식... 15 GET 방식의 API 호출예제... 15 CURL 예제... 15 JAVA 예제... 16 PHP 예제... 18 POST 방식의 API 호출예제... 19 CURL 예제... 19 JAVA 예제... 20 PHP 예제... 22 DELTE 방식의 API 호출예제... 23 CURL 예제... 23 JAVA 예제... 23 PHP 예제... 25 업로드... 27 업로드와동시에콘텐츠를그룹에지정... 28 업로드, 인코딩, 전송그리고작업상태알림... 28 업로드알림설정... 30 작업알림설정... 31 인코딩알림설정... 32 전송알림설정... 33 라이브프로파일설정... 35

라이브채널생성과라이브인코딩... 36 라이브채널조회... 37 라이브채널종료... 39

Chapter 1 Vcase 소개 Vcase 를사용해주셔서감사드립니다. Vcase 는미디어서비스의개발및운영을위한개발 프레임워크와다양한미디어핵심기능을클라우드기반으로제공하는온라인비디오플랫폼입니다. 관리를위한웹콘솔과연동을위한 RESTful API, SDK, 기술지원서비스를제공합니다. 관리자 서비스 Vcase 연동 웹콘솔 API 문서및샘플 업로드 변환 콘텐츠관리 전송 라이브 기술 퍼블리싱 보안 플레이어 광고 통계 방송 채팅 자원 고성능서버 대용량스토리지 Global CDN 24 시간관리 1

Vcase 제공범위 사업자는미디어서비스를운영하기전에라인계약부터미디어시스템개발및설치까지복잡한과정이필요하며, 시스템확장을항상고려해야합니다. Vcase 는클라우드기반의시스템인프라와각종미디어기술을제공하며, 시스템확장및분산이자동으로이루어집니다. 가입후 API 만연동하면운영에대한고민을할필요가없습니다. 미디어사업자는 Vcase 를통해비즈니스본연의업무에만집중할수있습니다. 계약 - 라인과공간 - CDN 미디어시스템구매및설치 - 스토리지 - 트랜스코더 - 스트리밍서버 - 미디어솔루션 ( 플레이어, DRM, 광고 ) 시스템부하분산 콘텐츠관리시스템개발및설치 - 미디어시스템연동 - 콘텐츠관리 확장필요 시스템모니터링 - 24 Hours 서비스운영 미디어서비스개발및설치 Vcase 제공범위 고객사업무범위 2

기능및특징 Vcase 는미디어서비스를개발, 운영하는가장중요한업무에만집중할수있도록, 서버를설치하고, CDN 과연동하고, 미디어솔루션을운영하거나갑자기늘어난사용자에대응하기위해긴급하게서버를확장하는것과같은고민을모두해결해드립니다. 단지가입하고, 미디어서비스와 Vcase 의 API 만연결하면됩니다. 대시보드 웹콘솔의홈화면에서대시보드를제공하여한눈에 서비스현황을살펴볼수있습니다. 콘텐츠업로드및관리 사용할수있습니다 HTTP 나 FTP 로미디어콘텐츠를업로드할수 있습니다. 업로드후에는썸네일, 코덱과같은미디어 정보를자동으로추출하며, 사용자정의메타를 3

비디오편집 웹페이지에서바로미디어를 Merging 하고 Clipping 하는편집기능을사용하여쉽게새로운 비디오를만들어낼수있습니다. 작업자동화 미디어를업로드하면자동으로변환, 암호화, 전송을 시작합니다. 자동화프로파일로변환방식과암호화, 배포방법을자유롭게추가할수있습니다. 업로드 - 웹 - FTP ( 대용량 ) - API 작업자동화 - 변환 - 암호화 (DRM) - 배포 고객미디어서비스 - Web - App - Tablet - TV 4

라이브채널 됩니다. 매우간편하게라이브채널을생성하고관리할수있습니다. IP 카메라로입력 URL 에비디오를송출하면, 스트리밍 URL 로라이브방송을할수있게 라이브인코딩 모든라이브채널에인코딩프로파일을설정하여 실시간으로인코딩된출력을사용할수있습니다. 5

라이브 DVR 녹화등꼭필요한기능을함께제공합니다. 비디오스트림 (HLS, RTSP, RTMP) 을파일로 녹화하여새로운컨텐츠로등록하거나다른 URL 로 재송출할수있습니다. 파일저장주기, 예약시간 라이브편성 VoD 와라이브채널을교차편성하여라이브로송출할수있습니다. 편리한편성 UI/UX 를제공하며, 긴급편성을통해만약의상황을대비할수있습니다. 6

개인방송 개인방송서비스를개발하기위한모든인프라와솔루션을제공합니다. 서버개발을지원하기위해라이브채널관리를포함하여, 녹화, 광고등다양한 기능을제공하며클라이언트개발을지원하기위해송출 SDK, 채팅 SDK 를지원합니다. Vcase 로개인방송서비스를더욱쉽고빠르게개발하고, 안정적으로운영할수있습니다. Smart Phone - ios - Android RESTful API Admin Page Web Cam PC 클라이언트지원 ios, Android 송출 SDK 채팅 SDK 플레이어 SDK Web 웹채팅 SDK PC 방송툴지원 API 채널관리 라이브채널 채팅채널 채널녹화 채널광고 썸네일및메타추출 타임머신 7

VoD 광고 Vcase 는수익화를위해자체광고를관리하고원하는위치에삽입할수있는기능과미국 IAB 표준인 VAST 외부광고서버를연동할수있는 방법을지원합니다. 제공되는 API 로플레이어에직접광고를연동하는방식을선택하거나제공되는플레이어를사용하는방식을선택할수있습니다. 라이브중간광고 설치가필요없습니다. 라이브채널에요청즉시광고를넣을수있습니다. 광고를선택하고, 광고삽입버튼만클릭하면됩니다. 웹기반에서모든것이처리되므로, 별도의프로그램 8

지역광고 지역광고그룹을관리하고, 라이브스트림에지역별로광고를전송할수있습니다. 광고시작 API 를통해원하는채널에언제든지광고를보낼수 있으므로개인방송과결합하여방송자가직접광고를선택하고시작할수있습니다. 통계 플레이어와스트리머로부터대량의데이터를수집하여, 고객에게의미있는통계를제공하기위해빅데이터처리시스템을갖추고있습니다. 인기 콘텐츠순위뿐만아니라콘텐츠별인게이지먼트스코어와같은의미있는통계를제공합니다. 9

신디케이션 유투브채널과 VoD 동기화기능을제공하고편성 라이브채널을유투브라이브에재송출할수 있습니다. API 및 SDK Vcase 의모든기능은 API 로제공되어사업자의서비스에연동할수있습니다. 또한모바일플레이어, 플래시플레이어등필수미디어솔루션, 카메라송출 모듈을 SDK 형태로제공하여더욱강력한미디어서비스를운영할수있도록지원합니다. 문서및샘플을제공하여더욱손쉽게연동할수있고, 기술지원팀이항시대기하여빠르게문의를처리하고있습니다. 웹콘솔 API 문서및샘플 SDK 10

전체기능목록 업로드 - 웹브라우저 (Web, Flash/HTML5) - 자동녹화업로드 (DVR 연동 ) - API - FTP Bulk 업로드 작업자동화 - 변환, 암호화, 배송프로파일관리 - 업로드시자동으로동작 - 작업현황모니터링 변환 - 미리정의된프로파일제공 - 고성능인코딩시스템 - 품질별제공 : 해상도, 비트레이트, - 대부분의코덱과컨테이너지원프레임레이트등 - 고급사용자를위한상세한인코딩 - 대상장치별제공 : PC, 모바일, 옵션테블릿, 스마트 TV 등 - 다양한메타정보추출 - 이미지오버레이 - 비디오, 오디오, 이미지, 자막콘텐츠 - 메타관리 콘텐츠관리 관리 - 사용자정의메타정보관리 - 그룹관리 (Playlist) - 권한관리 - 비디오편집 (Merging, Clipping) - DRM 시스템연동 라이브스트리밍 - 라이브채널생성및관리 - 라이브스트림녹화및재송출 - 라이브인코딩 - 라이브중간광고 - 라이브편성송출 - 편성유투브신디케이션 개인방송 - 채널관리 ( 방송채널, 채팅채널 ) - 채널메타추출 ( 썸네일및인코딩 - 채팅 SDK - 방송 SDK 정보 ) 전송 - FTP 전송 - 유투브신디케이션 퍼블리싱 - N 스크린플레이어퍼블리싱 - 업로드 / 다운로드가능한 URL - VOD, Live 스트리밍 - 접근제어 광고 - 자체광고관리 - Double Click 연동 - Video 광고삽입 ( 전, 중, 후 ) - 라이브지역광고 분석, 통계 - 콘텐츠, 기간, 장치별 - 재생횟수, 재생구간, 네트워크트레픽정보제공 - 사용패턴 - 가장많이재생된콘텐츠 - 콘텐츠소비행태 연동 - Restful API - 문서및샘플 - SDK ( 플레이어, 카메라 ) 계정 - 다중관리자 - API 접근토큰관리 - 관리자권한관리 11

Chapter 2 연동시작하기 Vcase 에서는미디어서비스제공자가사용자에게고품질미디어서비스를제공할수있도록다양한미디어기술을제공하며, 모든기능은 RESTful API 와 SDK 를통해쉽게연동할수있습니다. 연동방식 Vcase 와의연동은일반적으로아래그림과같은구조를따릅니다. 고객사는 WAS 를구축하여회원 DB 나비즈니스로직을구현하고, 미디어처리관련된부분은 Vcase 에서제공하는 API 를통해처리하는것이일반적입니다. 앱, 웹, 기타어플리케이션으로제공되는사용자서비스는고객사에서구축한 WAS 에연동하여동작하고플레이어, 라이브송출, 채팅관련기능은 Vcase 에서제공하는 SDK 를이용하여쉽게구축하고안정적으로운영할수있습니다. Live Stream Player SDK (Web, Android, ios) Application LiveController Chatting SDK (Web, Android, ios) App WAS RESTful API MediaStation Camera SDK (Android, ios) Vcase SDK Web 고객사서비스구현범위 Upload Contents Upload System Vcase 12

연동정보 Vcase2 를연동하기위한주소는아래표와같습니다. Media Station api.vcase2.myskcdn.com:9090 (222.239.28.216:9090) Upload Server upload.vcase2.myskcdn.com:8081 (222.239.28.216:8081) Live Controller MediaStation 의 API 를통해발급 상세한연동 API Tutorial 은다음 URL 에서다운로드받을수있습니다. http://vcase2.myskcdn.com/static/docs/vcase User Interface Manual.pdf Vcase 에서는연동및개발을지원하기위해프리미엄고객을위한샘플웹소스 코드 (Java 기반 ) 와앱소스코드 (ios, Android) 를제공합니다. Vcase 담당자에게요청주시기바랍니다. 사이트접속및회원가입 / 서비스생성 인터넷익스플로러나파이어폭스, 크롬같은인터넷브라우저를실행하고주소표시줄에 http://vcase2.myskcdn.com 주소를입력합니다. Vcase 페이지가정상적으로표시되었다면, 우측상단의 시작하기 버튼을선택하여서비스생성및회원가입페이지로진입합니다. 회원가입페이지에서는서비스정보및사용자정보를입력할수있는데, 서비스명은한명의 사용자가여러서비스를관리할때손쉽게식별할수있도록해주는항목으로실제서비스하고자 하시는서비스의이름을입력해주시면됩니다. 이외에사용자정보부분에는서비스를관리하고자 13

하는관리자정보를입력한뒤하단의서비스생성버튼을선택하시면입력하신정보를바탕으로 새로운계정및서비스가생성됩니다. 성공적으로가입이완료되었다면기입하신이메일주소로가입환영메일이전송되며, 미디어서비스를위한모든준비가완료됩니다. Access Token 발급 Vcase 의 API 를사용하기위해서는 Access Token 을발급해야합니다. 여러개의 Access Token 을발급하여권한을조정하여목적에맞게사용할수있습니다. 오른쪽상단의계정이름을클릭하고 API 관리메뉴에서새로운토큰생성버튼을클릭하여새로운토큰을생성할수있습니다. 14

API 동작방식 MediaStaion 의 API 를호출하여 Vcase 의데이터를조회하고관리할수있습니다. API 는 GET, POST, DELETE 메소드로제공되며, API 문서에명시되어있습니다. 메소드를잘못사용하는경우동작하지않으니유의해야합니다. POST 방식의 API 를호출할때는업로드를제외하고는모두 Header 의 Content-Type 을 application/json 으로설정해야합니다. 모든응답은 JSON 포멧으로이루어져있으며다음과같은기본규칙으로응답됩니다. 응답코드는 API 문서에상세히기술되어있습니다. { "request_id": "< 요청할때입력한 request_id>", "result_code": "< 응답코드 >", "message": "< 응답데이터에대한메시지 >", "result": { < 요청리소스마다내부항목들이달라짐 > } } GET 방식의 API 호출예제 콘텐츠목록조회 API 를통해 GET 방식의 API 를호출하는예제입니다. CURL 예제 REQUEST curl -X GET -v http://222.239.28.216:9090/v1/content?access_token=19d560a31a2a4f9e8ef13075 56640dd7 RESPONSE * About to connect() to 222.239.28.216 port 9090 (#0) * Trying 222.239.28.216... connected * Connected to 222.239.28.216 (222.239.28.216) port 9090 (#0) > GET /v1/content?access_token=19d560a31a2a4f9e8ef1307556640dd7 HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2 15

> Host: 222.239.28.216:9090 > Accept: */* > < HTTP/1.1 200 OK < Server: Apache-Coyote/1.1 < Access-Control-Allow-Origin: * < charset: UTF-8 < Content-Type: application/json;charset=utf-8 < Transfer-Encoding: chunked < Date: Mon, 23 Jan 2017 07:44:23 GMT < {"result_code":"s000","message":" 성공 ","result":{"total_count":82,"content":[{"content _id":1800704786,"upper_content_id":0,"title":"title","content_type":"asset","create_ty pe":"uplod","media_type":"video","file_type":"orign","view_type":"plain","file_name":" vr.mp4","file_size":32868857,"duration":182485,"state":"cmplt","progress":100,"cont ainer":"mp4","video_codec":"h264", JAVA 예제 REQUEST import java.io.bufferedreader; import java.io.inputstreamreader; import java.net.httpurlconnection; import java.net.url; import java.util.hashmap; public final class Test { public static void main(string[] args) throws Exception { // Query String 추가 HashMap<String, Object> map = new HashMap<String, Object>(); map.put("access_token", "19d560a31a2a4f9e8ef1307556640dd7"); 16

} // 콘텐츠목록조회. String result = requestcontentlist("222.239.28.216", 9090, map); System.out.println(result); public static String requestcontentlist(string host, Integer port, HashMap<String, Object> map) throws Exception { StringBuffer querystring = new StringBuffer(); for( String key : map.keyset() ){ querystring.append(key); querystring.append("="); querystring.append(map.get(key)); querystring.append("&"); } querystring.tostring()); String url = String.format("http://%s:%d/v1/content?%s", host, port, URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openconnection(); // optional default is GET con.setrequestmethod("get"); //add request header int responsecode = con.getresponsecode(); System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Response Code : " + responsecode); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputline; StringBuffer response = new StringBuffer(); 17

} } RESPONSE while ((inputline = in.readline())!= null) { response.append(inputline); } in.close(); return response.tostring(); PHP 예제 REQUEST <?php $querystring = array(); $querystring['access_token'] = '19d560a31a2a4f9e8ef1307556640dd7'; $result = requestcontentlist("222.239.28.216",9090, $querystring); echo $result; function requestcontentlist($host, $port, $querystring) { $query; foreach ( $querystring as $key => $value ) { $query.= $key; $query.= '='; $query.= $value; $query.= '&'; } $ch = curl_init(); 18

// set url curl_setopt($ch, CURLOPT_URL, "http://".$host.":".$port."/v1/content?".$query); //return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // $output contains the output string $output = curl_exec($ch); // close curl resource to free up system resources curl_close($ch); return $output; }?> RESPONSE POST 방식의 API 호출예제 콘텐츠메타정보수정 API 를통해 POST 방식의 API 를호출하는예제입니다. Vcase 의업로드를제외한모든 POST 메시지는 Json 방식을사용하므로 HTTP Header 의 Content-Type 을 application/json 으로보내야합니다. CURL 예제 REQUEST curl -X POST -H "Content-Type: application/json" -d '{"params":{"access_token":"19d560a31a2a4f9e8ef1307556640dd7", "title":"modified Title"}}' http://222.239.28.216:9090/v1/content/1800704786 19

RESPONSE {"result_code":"s000","message":" 성공 "} JAVA 예제 REQUEST import java.io.bufferedreader; import java.io.dataoutputstream; import java.io.inputstreamreader; import java.io.reader; import java.net.httpurlconnection; import java.net.url; import java.util.hashmap; import com.google.gson.gson; public final class Test { public static void main(string[] args) throws Exception { // 콘텐츠수정 HashMap<String, Object> map = new HashMap<String, Object>(); map.put("access_token", "19d560a31a2a4f9e8ef1307556640dd7"); map.put("title", "Modified Title"); String result = requestmodifycontent("222.239.28.216", 9090, 1800704786L, map); System.out.println(result); } public static String requestmodifycontent(string host, Integer port, Long contentid, HashMap<String, Object> paramsmap) throws Exception { HashMap<String, Object> rootmap = new HashMap<String, Object>(); rootmap.put("params", paramsmap); 20

String requestbody = new Gson().toJson(rootMap); contentid); String url = String.format("http://%s:%d/v1/content/%d", host, port, URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openconnection(); con.setrequestmethod("post"); con.setdooutput( true ); con.setinstancefollowredirects( false ); con.setrequestproperty( "Content-Type", "Content-Type: application/json"); con.setrequestproperty( "charset", "utf-8"); con.setrequestproperty( "Content-Length", Integer.toString( requestbody.length() )); con.setusecaches( false ); con.getoutputstream().write(requestbody.tostring().getbytes("utf-8")); //add request header int responsecode = con.getresponsecode(); System.out.println("\nSending 'POST' request to URL : " + url); System.out.println("Response Code : " + responsecode); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputline; StringBuffer response = new StringBuffer(); while ((inputline = in.readline())!= null) { response.append(inputline); } in.close(); return response.tostring(); 21

} } RESPONSE PHP 예제 REQUEST <?php $requestparams = array(); $requestparams['access_token'] = '19d560a31a2a4f9e8ef1307556640dd7'; $requestparams['title'] = 'Modified Title'; $result = requestmodifycontent("222.239.28.216",9090, 1800704786, $requestparams); echo $result; function requestmodifycontent($host, $port, $contentid, $requestparams) { $rootmap = array(); $rootmap['params'] = $requestparams; $data_string = json_encode($rootmap); echo $data_string; $ch = curl_init("http://".$host.":".$port."/v1/content/".$contentid); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: '. strlen($data_string)) ); 22

// $output contains the output string $output = curl_exec($ch); // close curl resource to free up system resources curl_close($ch); return $output; }?> RESPONSE DELTE 방식의 API 호출예제 콘텐츠단일삭제 API 를통해 DELETE 방식의 API 를사용하는예제입니다. CURL 예제 REQUEST curl -X DELETE -v http://222.239.28.216:9090/v1/content/1800704786?access_token=19d560a31a2a 4f9e8ef1307556640dd7 RESPONSE {"result_code":"s000","message":" 성공 "} JAVA 예제 REQUEST import java.io.bufferedreader; import java.io.dataoutputstream; import java.io.inputstreamreader; import java.io.reader; import java.net.httpurlconnection; import java.net.url; 23

import java.util.hashmap; import com.google.gson.gson; public final class Test { public static void main(string[] args) throws Exception { // 콘텐츠삭제 HashMap<String, Object> map = new HashMap<String, Object>(); map.put("access_token", "19d560a31a2a4f9e8ef1307556640dd7"); String result = requestdeletecontent("222.239.28.216", 9090, 1800704786L, map); System.out.println(result); } public static String requestdeletecontent(string host, Integer port, Long contentid, HashMap<String, Object> map) throws Exception { StringBuffer querystring = new StringBuffer(); for( String key : map.keyset() ){ querystring.append(key); querystring.append("="); querystring.append(map.get(key)); querystring.append("&"); } String url = String.format("http://%s:%d/v1/content/%d?%s", host, port, contentid, querystring.tostring()); URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openconnection(); // optional default is DELETE con.setrequestmethod("delete"); 24

//add request header int responsecode = con.getresponsecode(); System.out.println("\nSending 'DELETE' request to URL : " + url); System.out.println("Response Code : " + responsecode); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputline; StringBuffer response = new StringBuffer(); } } RESPONSE while ((inputline = in.readline())!= null) { response.append(inputline); } in.close(); return response.tostring(); PHP 예제 REQUEST <?php $querystring = array(); $querystring['access_token'] = '19d560a31a2a4f9e8ef1307556640dd7'; $result = requestdeletecontent("222.239.28.216",9090, 1800704786, $querystring); echo $result; function requestdeletecontent($host, $port, $contentid, $querystring) { 25

$query; foreach ( $querystring as $key => $value ) { $query.= $key; $query.= '='; $query.= $value; $query.= '&'; } $ch = curl_init(); // set url curl_setopt($ch, "http://".$host.":".$port."/v1/content/".$contentid."?".$query); CURLOPT_URL, //return the transfer as a string curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // set method curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); // $output contains the output string $output = curl_exec($ch); // close curl resource to free up system resources curl_close($ch); return $output; }?> RESPONSE 26

Chapter 3 콘텐츠관리 Vcase 에서는콘텐츠관리에필요한다양한기능을제공합니다. 업로드, 메타관리, 플레이리스트 관리, 자동인코딩, 자동전송 (FTP), 편집 ( 머징, 트리밍 ) 과같은기능을 API 호출을통해쉽게 사용할수있습니다. 업로드 업로드는 multipart/form-data 형식으로전송해야합니다. 주의해야할점은 MediaStation API 와다른업로드서버전용주소 (upload.vcase2.myskcdn.com:8081) 를사용한다는것입니다. API 문서에따라 file= 과 access_token= 을 multipart 로보내면업로드를할수있습니다. REQUEST curl -v -X POST -H "Content-Type: multipart/form-data" -F "access_token=19d560a31a2a4f9e8ef1307556640dd7" -F "file=@sample.mp4" -F rev=mv_102921 http://222.239.28.216:8081/v1/content/upload RESPONSE {"result_code":"s000","message":" 성공 ","result":{"content_id":1890704902}} rev 값을입력하여업로드하면 상태콜백에서해당값을다시돌려받을수있습니다. 27

업로드와동시에콘텐츠를그룹에지정 미디어서비스를구현할때사용자별, 카테고리별로콘텐츠를그룹화하고조회하는기능이필요할수있습니다. Vcase 는플레이리스트와태그를이용하여콘텐츠를그룹으로묶을수있는기능을제공합니다. 플레이리스트에콘텐츠를넣은후플레이리스트목록조회 API 를이용하여목록조회를하거나콘텐츠메타에태그를입력한후콘텐츠목록조회 API 에해당태그를넣어서검색조회를할수있습니다. 이미등록된콘텐츠의정보를수정할수도있지만콘텐츠를업로드하면서동시에태그를입력하거나플레이리스트에콘텐츠를포함시키는방법을제공합니다. 다음과같이 tags 나 playlist_ids 를추가하여업로드하면업로드와동시에콘텐츠를그룹에넣을수있습니다. REQUEST curl -v -X POST -H "Content-Type: multipart/form-data" -F "access_token=19d560a31a2a4f9e8ef1307556640dd7" -F "file=@sample.mp4" -F tags= movie,action playlist_ids= 3201704451 http://222.239.28.216:8081/v1/content/upload RESPONSE {"result_code":"s000","message":" 성공 ","result":{"content_id":1890704902}} 업로드, 인코딩, 전송그리고작업상태알림 콘텐츠가업로드되면설정된작업프로파일에따라자동으로인코딩및전송을수행하도록설정할수있습니다. 다음화면과같이웹콘솔의작업현황에서작업설정을통해새로운작업을등록할수있습니다. 콘텐츠선별, 인코딩, 암호화, 전송을설정하는자세한내용은사용자매뉴얼을참고해주시기바랍니다. 28

대용량미디어파일의업로드는효율적인콘텐츠흐름을위해고객사의 WAS 를거치지않고클라이언트에서 Vcase 의업로드서버에직접하는경우가많습니다. 이런구조에서업로드된콘텐츠의정보를고객사 WAS 에서관리해야할필요가있는경우를위해 Vcase 에서는 Callback 알람을통해콘텐츠상태정보를고객사서버로전달합니다. Application DB App WAS Callback {content_id}{state}{rev} MediaStation Web Upload Contents {rev} Upload System Response {content_id} Vcase 콘텐츠가업로드된후부터인코딩, 전송이완료될때까지의라이프사이클은다음그림과같습니다. 업로드완료, 인코딩완료, 전송완료, 작업완료시점에고객사에서설정한 URI 로상태정보를 전달합니다. {Result} {Content ID} {User Param} {Result} {Job Publish Key} {Content ID} {Target Content ID} {User Param} {Result} {Job Publish Key} {Content ID} {Target Content ID} {User Param} Callback Callback Callback 업로드시작업로드완료작업시작 트랜스코딩 시작 트랜스코딩 완료 전송시작전송완료작업완료 Upload Response Callback {File} {User Param} {Result} {Content ID} {Result} {Job Publish Key} {Content ID} {Target Content ID} {User Param} 29

업로드알림설정 업로드완료알림을받기위해서는아래화면과같이웹콘솔의업로드알림설정에콜백알림을 받을 URI 를설정하면됩니다. 콜백 URI 는 GET 또는 POST 메소드를지정하여원하는방식대로콜백을받을수있으며다음과 같은형식으로등록할수있습니다. 업로드 Callback URL 포멧 http://user-service-domain.com/vcasecallback?contents_id={content_id}&state={state}&rev={rev} user-service-domain.com/vcase-callback 은고객사서비스에서콜백을받을수있도록제작한 URI 입니다. {contents_id}, {state}, {rev} 는 Vcase 의시스템메타정보이며, 상기 URI 에서지정한 방식대로전달하게됩니다. 각각의의미는다음과같습니다. {contents_id} 업로드한원본콘텐츠의 ID 입니다. {state} 업로드상태를나타내며상태값은다음과같습니다. complt : 업로드완료 faled : 실패 {rev} 업로드시입력한사용자매개변수를그대로돌려줍니다. 고객사 DB 의 INDEX 값이나콘텐츠제목, 설명등을넣어서활용할수있습니다. 30

작업알림설정 작업완료알림은작업프로파일의작업상태보고 URI 를통해설정할수있습니다. 퍼블리시키는 콜백을받았을때어떤프로파일의콜백인지구분할수있도록하는 ID 값입니다. 이를통해설정한 프로파일중모바일용인코딩이완료되었는지, 웹용인코딩이완료되었는지체크할수있습니다. 작업이완료되거나실패하면해당내용을고객사에서설정한 URI 로알림메시지를전달합니다. 상단의 작업상태보고 URI 는인코딩, 전송이완료된후모든과정에대한상태를전달하는콜백 URI 입니다. 콜백 URI 는 GET 또는 POST 메소드를지정하여원하는방식대로콜백을받을수있으며다음과같은형식으로등록할수있습니다. 작업상태알림 URL 포멧 http://user-service-domain.com/vcase-job-callback? contents_id={content_id}&state={state}&job_profile_id={job_profile_id}&job_publish_k ey={job_publish_key}&rev={rev} user-service-domain.com/vcase-job-callback 은고객사서비스에서작업상태에대한콜백을 받을수있도록제작한 URI 입니다. {contents_id}, {state}, {rev} 와같은값은 Vcase 의시스템메타 정보이며, 상기 URI 에서지정한방식대로전달하게됩니다. 각각의의미는다음과같습니다. {contents_id} 원본콘텐츠의 ID 입니다. {state} 작업상태를나타내며상태값은다음과같습니다. complt : 모든작업완료 faled : 실패 31

{job_publish_key} {rev} 작업프로파일퍼블리싱키 업로드시입력한사용자매개변수를그대로돌려줍니다. 고객사 DB 의 INDEX 값이나콘텐츠제목, 설명등을넣어서활용할수있습니다. 인코딩알림설정 인코딩상태알림은다음과같이작업프로파일의인코딩탭에서고급설정에서인코딩상태 보고 URI 를통해설정할수있습니다. 인코딩작업이완료되거나실패하면해당내용을고객사에서설정한 URI 로알림메시지를 전달합니다. 콜백 URI 는 GET 또는 POST 메소드를지정하여원하는방식대로콜백을받을수 있으며다음과같은형식으로등록할수있습니다. 인코딩상태알림 URL 포멧 http://user-service-domain.com/vcase-encode-callback? contents_id={content_id}&state={state}&job_publish_key={job_publish_key}&target_co ntent_id={target_content_id}&rev={rev} 32

user-service-domain.com/vcase-encode-callback 은고객사서비스에서작업상태에대한콜백을받을수있도록제작한 URI 입니다. {contents_id}, {state}, {rev} 와같은값은 Vcase 의시스템메타정보이며, 상기 URI 에서지정한방식대로전달하게됩니다. 각각의의미는다음과같습니다. {contents_id} 원본콘텐츠의 ID 입니다. {state} 작업상태를나타내며상태값은다음과같습니다. complt : 모든작업완료 faled : 실패 {job_publish_key} 작업프로파일퍼블리싱키 {target_content_id} 인코딩이완료된콘텐츠의 ID 입니다. {rev} 업로드시입력한사용자매개변수를그대로돌려줍니다. 고객사 DB 의 INDEX 값이나콘텐츠제목, 설명등을넣어서활용할수있습니다. 전송알림설정 전송상태알림은다음과같이작업프로파일의전송탭에서상태보고 URI 를통해설정할수 있습니다. 전송작업이완료되거나실패하면해당내용을고객사에서설정한 URI 로알림메시지를전달합니다. 콜백 URI 는 GET 또는 POST 메소드를지정하여원하는방식대로콜백을받을수있으며다음과 같은형식으로등록할수있습니다. 전송상태알림 URL 포멧 33

http://user-service-domain.com/vcase-transmission-callback? contents_id={content_id}&state={state}&job_publish_key={job_publish_key}&target_co ntent_id={target_content_id}&rev={rev} user-service-domain.com/vcase-transmission-callback 은고객사서비스에서작업상태에대한콜백을받을수있도록제작한 URI 입니다. {contents_id}, {state}, {rev} 와같은값은 Vcase 의시스템메타정보이며, 상기 URI 에서지정한방식대로전달하게됩니다. 각각의의미는다음과같습니다. {contents_id} 원본콘텐츠의 ID 입니다. {state} 전송상태를나타내며상태값은다음과같습니다. complt : 모든작업완료 faled : 실패 {job_publish_key} 전송프로파일퍼블리싱키 {target_content_id} 전송완료된콘텐츠의 ID 입니다. {rev} 업로드시입력한사용자매개변수를그대로돌려줍니다. 고객사 DB 의 INDEX 값이나콘텐츠제목, 설명등을넣어서활용할수있습니다. 34

Chapter 4 라이브채널관리 Vcase 는라이브채널을생성하고관리하는기능을제공합니다. RTMP 입력을받아서 CDN 을통해 RTMP, HLS, RTSP 와같은프로토콜로재송출할수있으며중간광고및동시접속자통계데이터를제공합니다. 특히라이브인코딩기능을통해어떤입력이들어오더라도최적의비디오품질로조정하여서비스할수있습니다. 라이브프로파일설정 라이브프로파일은웹콘솔의 라이브프로파일 메뉴에서추가하고삭제할수있습니다. 라이브프로파일은다음과같이비율방식, 비디오품질, 오디오품질에대한설정값을 제공합니다. ID 값을라이브채널생성시전달하여해당채널을인코딩할수있습니다. 35

기본프로파일은라이브채널생성시라이브프로파일을별도로지정하지않아도 기본적으로인코딩을수행하는프로파일을의미합니다. 라이브채널생성과라이브인코딩 다음과같이 API 를호출하여라이브채널을생성할수있습니다. REQUEST curl -v -X POST -H "Content-Type: application/json" -d '{"params":{"access_token":"19d560a31a2a4f9e8ef1307556640dd7", "name":"live Channel }}' http://222.239.28.216:9090/v1/live/channel 36

RESPONSE {"result_code":"s000","message":" 성공 ","result":{"live_channel_id":1490010789}} 라이브채널을생성할때다음과같이 live_profile_ids 에라이브프로파일의 ID 를입력하여채널을 인코딩하여출력할수있습니다. 기본프로파일은별도로지정하지않아도자동으로인코딩이 적용됩니다. REQUEST curl -v -X POST -H "Content-Type: application/json" -d '{"params":{"access_token":"19d560a31a2a4f9e8ef1307556640dd7", "name":"live Channel, live_profile_ids :[123332133, 21321321312, 209999121]}}' http://222.239.28.216:9090/v1/live/channel RESPONSE {"result_code":"s000","message":" 성공 ","result":{"live_channel_id":1490010789}} 라이브채널조회 라이브채널은생성한후생성된채널의정보는다음과같이라이브채널 ID 값을인자로 API 를 호출하여조회할수있습니다. REQUEST curl -v -X GET -H http://222.239.28.216:9090/v1/live/channel/1490010789? access_token=19d560a31a2a4f9e8ef1307556640dd7 RESPONSE {"result_code":"s000","message":" 성공 ","result":{"live_channel":{"live_channel_id":149 0010789,"name":"Live Channel","view_type":"plain","live_channel_type":"basic","use_ad":false,"is_decided":f alse,"is_ad_playing":false,"reg_date":1485267362,"mod_date":1485267362,"active":t rue, 라이브채널을조회하여정보를확인하면라이브입력정보, 라이브출력정보그리고다양한 메타정보를함께제공하는것을확인할수있습니다. 37

라이브입력주소는제 3 자에게유출될경우방송사고등심각한문제를발생시킬수있기때문에 보안이보장되어야합니다. Vcase 에서는다음표와같이 Stream 주소를예측불가능한 Key 로 발급하고, 매번생성할때마다값을변경하여서보안에문제가없도록지원하고있습니다. HOST : 118.219.58.47/LC STREAM : "BzG90hrZF00C" 라이브출력주소는적용된인코딩프로파일개수만큼제공되며인코딩이실시간으로적용됩니다. 각출력주소는 RTMP, HLS, HLST(HLS Time Machine), RTSP, TLS(T Live Streaming) 프로토콜을지원합니다. 38

라이브채널종료 라이브채널은고객사별로제한된숫자를제공하기때문에라이브스트리밍이완료되면꼭 API 를호출하여채널을종료해야합니다. 고객사에할당된라이브채널을모두사용하면새로운라이브채널생성이실패할수있습니다. 라이브채널은다음과같은방식으로채널을종료할수있습니다. REQUEST curl -v -X DELETE http://222.239.28.216:9090/v1/live/channel/1490010789? access_token=19d560a31a2a4f9e8ef1307556640dd7 RESPONSE {"result_code":"s000","message":" 성공 "} 39