2009년 7월 8일 수요일

파일을 개별적으로 블로그에 게시하고 판매를 대행하는 방법에 대한 고민

블로그에 자신의 영상이나 이미지 파일을 올려 두고 해당 파일의 판매를 대행하는 방법에 대한 연구가 필요하지 않을까 한다.

2009년 6월 25일 목요일

광고 관리에서 주의해야 할 사항.. 초기광고에대한 루프

초기 광고를 생성되어 있는데
개인이 관리하는 광고의 경우
이것의 이용정지 기능을 넣어 일시적으로 광고를 차단하는 기능이 필요할거 같다.

회사 기본광고의 경우는 기본으로 나가는 변환광고는 항상 유지시키지만
그다음 광고부터 적용되도록 하는것을 고민해보자..
아니면 회사의 기본광고를 못을 박아두고.
두번째 부터 광고교체 기능을 넣는 방법

그다음 사용자 광고의 경우
자신의 전체 파일에대한 일괄관리기능을 넣어서 광고를 일괄적으로 추가 삭제 할 수 있도록 만든다.

회사광고의 경우 파일별광고가 기본적으로 존재하는데 이것을 일괄 변경관리가능한 메뉴를 넣어서 일괄 광고를 처리하도록한다.

2009년 5월 13일 수요일

일반사용자를 위한 UCC게시판을 쉽게 만드는 방법연구

누구나 게시판을 이용해서 UCC사이트를 만드는 것을 고민중에 있는데 어느정도 구성안에 대해 정리해본다.

1단계 사용자아이디 패스워드 생성
2단계 1단계에서 받은 아이디 패스워드를 이용해서 서버와 입력을 대기하는 새로운 패스워드를 반환
3단계 게시판에서 받은 주소와 패스워드를 이용해 파일을 업로드 하도록 해주고
4단계 업로드완료되면 파일에 대한 고유번호를 반환하여 이후 해당 파일에 대한 진행과 플레이를 할수 있도록 알려주는 완료 페이지로 링크를 걸어줌
5단계 각 게시판은 완료페이지에 의해 데이터베이스화함
6단계 작업 진행상황을 알려주는 페이지를 만들어 게시판크릭시 알려줄수 있도록 만들어둠

7단계 파일을 모두 파일 다운 받아 자신의 서버에 탑재 할수 있도록 지원
8단계 받은 파일을 스트리밍 할수 있도록 플래시파일과 스트리밍서버구성정보를 모두 제공

2009년 5월 11일 월요일

홈페이지 만들면서 어려운점에 대한 고민2 스트리밍방법에관해

역시 가장 큰문제는 스트리밍에 있다.
파일 다운로드야 개별적으로 알아서 서버에 넣고 다운받게 하면 된다지만 요청자들이 파일스트리밍 서버를 탑재할 수 없다는 문제가 있다.
스트리밍서버를 탑재 시킬수 있는 방법을 고안해서 제시를 해야한다.
공개되고 회사에서도 인증된 데이터야 언제든지 회사 서버에서 스트리밍이 되도록 해도 상관이 없지만 인증되지 않은 데이터 특히나 포털형식이 아닌 이사 서버에서 스트리밍되도록 할 필요는 없을거 같은데..쩝...
이것은 현재 고민단계이지만 해결 방법은 여러가지가 있을 수 있다.
일단 회사가 알고 있는 스트리밍 방법을 오픈하고 개별적으로 가능한 사람은 스트리밍 서버를 돌리도록 하는 것과. 아예 스트리밍서버를 돌릴수 없어도 스트리밍이 되는 것처럼 파일을 쪼개서 넣어주는 방법이 있다. 파일을 쪼개서 스트리밍이 되도록 하는 방법은 아무래도 서버에서 일일이 파일을 쪼개고 다시 파일을 묶어서 보내주기 때문에 서버의 부담이 무지 클수 밖에 없는데... 나름 서버에서 스트리밍을 가져가지 않기 때문에 상대적으로 네트워크의 부담을 줄일 수는 있다.
이것은 아직 결정하지 않고 계속 고민을 해볼 일인거 같다.

2009년 5월 10일 일요일

홈페이지 만들면서 어려운점에 대한 고민1 개인정보보호

제일 머리 아픈것은 아무래도 개인정보 수집부분인데..
이메일 이외의 개인정보는 우리에게 불필요한 정보이며 또한 국제 사이트를 만드는데 걸림돌이 될 뿐인거 같다. 따라서 최고의 개인정보 보호 책으로 일단 개인정보 수집을 하지 않는것이 최선일거 같다. 그래서 회원가입시 일체의 개인정보를 수집하지 않는 방향으로 잡고 간다.

문제는 현재의 국내법에 개인정보 수집보관의 의무를 가지고 있는 부분인데..
하루 10만의 방문객을 가진 포털의 의무사항을 어떻게 할것인가하는 부분이다.
그래서 고민하는것이 바로 포털의 포기이다. 일단은 사이트의 포털화는 포기한다는 것이다.
따라서 사이트 내에서의 모든 활동은 단순 검색과 파일 변환요청 그리고 요청한 자신의 파일을 받는 기능이외에 모든 일은 각자의 요청자 홈페이지에서 이루어지도록 그냥 요청자의 홈페이지로 넘겨 버리는 것이다. 이것은 또하나의 비즈니스 방법일 수 있다.

그러나 영상내의 개인정보 보호는 어떻게 하는 것이 바람직 한가에 대한 고민이 많이 된다.
그래서 어차피 개인의 정보를 보호 위해 직접 모든것을 검토해서 대상을 고른다는 것은 말이 안되고 그래서 이용자들 스스로 개인정보 보호를 필요로 하다고 느끼면 개인정보보호 신청을 하게 하고 그에 따라 루프를 만들어 간다.
일단 개인정보보호를 요청하게 하고 해당 내용을 파일신청자에게 이메일로 통보를 한다음
24시간내에 이의 제기가 없으면 바로 보호모드를 동작시킨다. 보호모든는 역시 영상이 나가지 않도록 하는 부분이다.그리고 1주 이내에 다시 이의제기가 없으면 영구 삭제 처리한다.

만일 이의제기가 들어오면 다시 보호 요청자에게 해당 내용을 이메일로 통보하며 다시 24시간내에 별도의 조처가 없으면 바로 보호요청이 무효가 된다. 그러나 그럼에도 이의제기가 다시 된다면 파일요청자와 회사의 관리자에게 통보되며 심사후 조처하거나 파일 주인에게 적절한 조처를 하도록 통보. 만일 개인사생활침해의 소지가 분명하면 회사는 바로 개인정보보호 처리하고 불분명할 경우 양자간의 협의하도록 서로간의 연락처 전달하고 회사는 파일 보호모호 모드를 동작시킨다.

회사는 기본적으로 가능하면 보호모드를 동작시키는 방향으로 가는것을 기본으로 해야한다. 왜냐면 우리가 받은 정보는 이 메일 이외에 법적으로 인정된 양자간의 연락 또는 신분의 확인방법이 없기 때문이다.

2009년 5월 7일 목요일

php를 이용한 플레쉬 스트리밍서버용 클래스 사용예제

// points to server root
$media['root_path'] = '/home/stream/';
//set to TRUE to use bandwidth limiting.
$media['limit_bandwidth']=true;
//set to FALSE to prohibit caching of video files.
$media['allow_file_cache']=false;
//set how many kilobytes will be sent per time interval
$media['packet_size']=90;

//set the time interval in which data packets will be sent in seconds.
$media['packet_interval']=0.3;
//set to TRUE to control bandwidth externally via http.
$media['dynamic_bandwidth']=true;

$media['get_speed']=($_GET['speed'])?$_GET['speed']:'1';//파일의 속도
$media['get_position']= ($_GET['position'])?$_GET['position']:0;//파일의 위치
$media['get_key']=$_GET['key'];//인증키를 가져온다.
$media['get_bandwidth'] = $_GET['bw'];//전송속도

$media['file_path']= ($_GET['vpath']) ? $_GET['vpath']:"";//비디오파일 디렉토리
$media['get_file'] = ($_GET['file']) ? $_GET['file']:$config['default_move'];
include "flv.class.php";
$fms = new Fms();
$fms->media_service($media);
?>

php를 이용한 플레쉬 스트리밍서버용 클래스

/*

xmoov-php 0.9
Development version 0.9.3 beta

by: Eric Lorenzo Benjamin jr. webmaster (AT) xmoov (DOT) com
originally inspired by Stefan Richter at flashcomguru.com
bandwidth limiting by Terry streamingflvcom (AT) dedicatedmanagers (DOT) com

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.
For more information, visit http://creativecommons.org/licenses/by-nc-sa/3.0/
For the full license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode
or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
Remaker Lim Changtaek 2008-04
*/
/*
$media['root_path'] = '/home1/stream/';
// points to server root
$media['root_path'] = '/home1/stream/';
//set to TRUE to use bandwidth limiting.
$media['limit_bandwidth']=true;
//set to FALSE to prohibit caching of video files.
$media['allow_file_cache']=false;
//set how many kilobytes will be sent per time interval
$media['packet_size']=90;
//set the time interval in which data packets will be sent in seconds.
$media['packet_interval']=0.3;
//set to TRUE to control bandwidth externally via http.
$media['dynamic_bandwidth']=true;
$media['file_path']= $_GET['vpath'];//비디오파일 디렉토리
$media['get_file']=$_GET['file'];//파일이름
$media['get_speed']=($_GET['speed'])?$_GET['speed']:'1';//파일의 속도
$media['get_position']= ($_GET['position'])?$_GET['position']:0;//파일의 위치
$media['get_bandwidth'] = $_GET['bw'];//전송속도
function getBandwidthLimit($part) holds three preconfigured presets(low, mid, high),
function media_service($media)
*/

class Fms
{

// END SCRIPT CONFIGURATION - do not change anything beyond this point if you do not know what you are doing
//------------------------------------------------------------------------------------------
// DYNAMIC BANDWIDTH CONTROL
//------------------------------------------------------------------------------------------
function getBandwidthLimit($part,$media)
{
switch($part)
{
case 'interval' :
switch($media['get_bandidth'])
{
case 'low' :
return 1;
break;
case 'mid' :
return 0.5;
break;
case 'high' :
return 0.3;
break;
default :
return $media['packet_interval'];
break;
}
break;
case 'size' :
switch($media['get_bandwidth'])
{
case 'low' :
return 10;
break;
case 'mid' :
return 40;
break;
case 'high' :
return 90;
break;
default :
return $media['packet_size'];
break;
}
break;
}
}
//------------------------------------------------------------------------------------------
// PROCESS FILE REQUEST
//------------------------------------------------------------------------------------------
function media_service($media)
{
// PROCESS VARIABLES
# get seek position
$seekPos = intval($media['get_position']);
# get file name
$fileName = htmlspecialchars($media['get_file']);
# assemble file path
$file = $media['root_path'] . $media['file_path'] .'/'.$fileName."_".$media['get_speed'].".flv";

# assemble packet interval
$packet_interval = ($media['dynamic_bandwidth'] && $media['get_bandwidth']) ? $this->getBandwidthLimit('interval',$media) : $media['packet_interval'];
# assemble packet size
$packet_size = (($media['dynamic_bandwidth'] && $media['get_bandwidth']) ? $this->getBandwidthLimit('size',$media) : $media['packet_size']) * 1042;

# security improved by by TRUI www.trui.net
if (!file_exists($file))
{
print('ERROR: allmove-php could not find (' . $fileName . ') please check your settings.');
exit();
}
if(file_exists($file) && strlen($fileName) > 2 && !eregi(basename($_SERVER['PHP_SELF']), $fileName) && ereg('^[^./][^/]*$', $fileName))
{
$fh = fopen($file, 'rb') or die ('ERROR: allmove-php could not open (' . $fileName . ')');

$fileSize = filesize($file) - (($seekPos > 0) ? $seekPos + 1 : 0);

// SEND HEADERS
if(!$media['allow_file_cache'])
{
# prohibit caching (different methods for different clients)
session_cache_limiter("nocache");
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
}

# content headers
header("Content-Type: video/x-flv");
header("Content-Disposition: attachment; filename=\"" . $fileName . "\"");
header("Content-Length: " . $fileSize);

# FLV file format header
if($seekPos != 0)
{
print('FLV');
print(pack('C', 1));
print(pack('C', 1));
print(pack('N', 9));
print(pack('N', 9));
}
# seek to requested file position
fseek($fh, $seekPos);
# output file
while(!feof($fh))
{
# use bandwidth limiting - by Terry
if($media['limit_bandwidth'])
{
# get start time
list($usec, $sec) = explode(' ', microtime());
$time_start = ((float)$usec + (float)$sec);
# output packet
print(fread($fh, $packet_size));
# get end time
list($usec, $sec) = explode(' ', microtime());
$time_stop = ((float)$usec + (float)$sec);
# wait if output is slower than $packet_interval
$time_difference = $time_stop - $time_start;
if($time_difference < (float)$packet_interval)
{
usleep((float)$packet_interval * 1000000 - (float)$time_difference * 1000000);
}
}
else
{
# output file without bandwidth limiting
print(fread($fh, filesize($file)));
}
}
}
}
}
?>