راهنمایی برای watermark زدن ویدئو در CodeIgniter

ساخت وبلاگ

راهنمایی برای watermark زدن ویدئو در CodeIgniter

سلام به من در کد چطور watermark را اضافه کنم تا در هنکام آپلود ویدئو اتوماتیک لوگو یا یک فایل .png .gif اضافه کنم از دوستان ممنون می شم راهنمایی کنند.


<?php
if (!defined("BASEPATH"))
{
exit("No direct script access allowed");
}
ini_set("max_execution_time", 0);
ini_set("memory_limit", "64M");
class videoapi
{
private $CI;
private $error;
private $video_id;
private $path_video = "uploads/videos/";
private $config;
private $vid_ext = array("mp4", "flv", "mpeg", "avi");
public function __construct()
{
$this->CI =& get_instance();
$this->CI->load->model("admin/setting_model");
$this->config = $this->CI->setting_model->get_custom_settings(array(
"dailymotion_video_download",
"youtube_video_download",
"youtube_video_quality",
"dailymotion_video_quality"
));
$this->curl_follow_location = $this->CI->config->item("curl_follow_location");
$this->video_limit_size = $this->CI->config->item("video_limit_size");
$this->providers = $this->CI->config->item("video_down_providers");
}
public function getVideo($url, $provider = NULL)
{
$this->video_id = NULL;
if ($provider != NULL)
{
retu $this->$provider($url);
}
if (0 < count($this->providers))
{
foreach ($this->providers as $provider)
{
if (strposa($url, $provider["needle"]))
{
retu $this->$provider["value"]($url);
}
}
}
$this->error = "The content url you entered did not match any service provider.Make sure the video Url is correct.";
retu false;
}
public function dailymotion($url)
{
if ($this->config["dailymotion_video_download"] != 1)
{
$this->error = "Video downloads seem to be closed at Youtube Api.";
retu false;
}
if (strpos($url, "dailymotion"))
{
$this->video_id = strtok(basename($url), "_");
}
else
{
if (strpos($url, "dai.ly"))
{
$this->video_id = end(explode("/"));
}
}
if (preg_match("#[A-Za-z0-9]#si", $this->video_id, $matches))
{
$get = curlGet("http://www.dailymotion.com/embed/video/" . $this->video_id);
$data["duration"] = "";
$data["description"] = $data["duration"];
$data["thumbnail"] = $data["description"];
$data["title"] = $data["thumbnail"];
switch ($this->config["youtube_video_quality"])
{
case "good":
$target_formats = array(
"stream_h264_hd1080_url",
"stream_h264_hd_url",
"stream_h264_hq_url",
"stream_h264_ld_url",
"stream_h264_url"
);
break;
case "medium":
$target_formats = array(
"stream_h264_hd_url",
"stream_h264_hq_url",
"stream_h264_ld_url",
"stream_h264_hd1080_url",
"stream_h264_url"
);
break;
case "low":
$target_formats = array(
"stream_h264_url",
"stream_h264_ld_url",
"stream_h264_hq_url",
"stream_h264_hd_url",
"stream_h264_hd1080_url"
);
}
$formats = array(
"stream_h264_url",
"stream_h264_ld_url",
"stream_h264_hq_url",
"stream_h264_hd_url",
"stream_h264_hd1080_url"
);
foreach ($formats as $format)
{
if (preg_match("#"" . $format . ""\:"(.*?)"#si", $get, $videoSource))
{
$avail_formats[$format] = str_replace("\/", "/", urldecode($videoSource[1]));
}
}
if (!isset($avail_formats))
{
$this->error = "Video source not found.";
retu false;
}
$data["duration"] = "";
$data["description"] = $data["duration"];
$data["thumbnail"] = $data["description"];
$data["title"] = $data["thumbnail"];
foreach ($target_formats as $target_format)
{
foreach ($avail_formats as $avail_format_name => $avail_format)
{
if ($target_format == $avail_format_name)
{
$data["videoUrl"] = $avail_format;
}
}
}
if (!isset($data["videoUrl"]))
{
$this->error = "Video source not found.";
retu false;
}
if (preg_match("#<title>(.*?)<\/title>#si", $get, $videoTitle))
{
$data["title"] = $videoTitle[1];
}
if (preg_match("#thumbnail_url"\:"(.*?)"#si", $get, $videoThumbnail))
{
$data["thumbnail"] = str_replace("\/", "/", $videoThumbnail[1]);
}
if (preg_match("#duration":(.*?),#si", $get, $videoduration))
{
$data["duration"] = $videoduration[1];
}
retu $data;
}
$this->error = "Please enter video Url like http://www.dailymotion.com/video/[videoID]_XXX";
retu false;
}
public function metacafe($url)
{
$ex = explode("/", $url);
if (!is_numeric($ex[4]))
{
$this->error = "Please enter video Url like http://www.metacafe.com/watch/[videoID]/XXX";
retu false;
}
$this->video_id = $ex[4];
$data["duration"] = "";
$data["description"] = $data["duration"];
$data["thumbnail"] = $data["description"];
$data["title"] = $data["thumbnail"];
$get = curlGet("http://www.metacafe.com/embed/" . $this->video_id . "/", true);
if (preg_match("#source src="(.*?)"#si", $get, $videoUrl))
{
if (preg_match("#<title>(.*?)<\/title>#si", $get, $videoTitle))
{
$data["title"] = $videoTitle[1];
}
if (preg_match("#property="og\:image" content="(.*?)"#si", $get, $videoThumbnail))
{
$data["thumbnail"] = $videoThumbnail[1];
}
if (preg_match("#name="description" content="(.*?)"#si", $get, $videoDescription))
{
$data["description"] = $videoDescription[1];
}
$data["videoUrl"] = urldecode($videoUrl[1]);
retu $data;
}
$this->error = "Video source not found.";
retu false;
}
public function facebook($url)
{
if (preg_match("#v=[0-9]+#si", $url, $patte))
{
$this->video_id = end(explode("=", $patte[0]));
$get = curlGet("https://www.facebook.com/video.php?v=" . $this->video_id);
$al = facebook_encode_replace($get);
$al = stripslashes($al);
if (preg_match("#"sd_src":"(.*?)"#si", $al, $videoUrl))
{
$data["videoUrl"] = ayir(""sd_src":"", """, $al);
if (($hdvid = @ayir(""hd_src":"", """, $al)) != NULL)
{
$data["videoUrl"] = $hdvid;
}
$data["thumbnail"] = "";
$data["duration"] = "";
$data["title"] = @ayir("<title id="pageTitle">", "</title>", $al);
retu $data;
}
$this->error = "Video source not found.Make sure the video are trying to retrieve public.";
retu false;
}
$this->error = "Please enter video Url like https://www.facebook.com/video.php?v=[videoID]";
retu false;
}
private function url_check($video_id)
{
if (!empty($video_id))
{
$my_id = $video_id;
if (11 < strlen($my_id))
{
$url = parse_url($my_id);
$my_id = NULL;
if (is_array($url) && 0 < count($url) && isset($url["query"]) && !empty($url["query"]))
{
$parts = explode("&", $url["query"]);
if (is_array($parts) && 0 < count($parts))
{
foreach ($parts as $p)
{
$patte = "/^v\=/";
if (preg_match($patte, $p))
{
$my_id = preg_replace($patte, "", $p);
break;
}
}
}
if (!$my_id)
{
$this->$error = "No video id passed in";
retu false;
}
}
else
{
$this->error = "Invalid url";
retu false;
}
}
$this->video_id = $my_id;
retu true;
}
$this->error = "Please enter video Url like http://www.youtube.com/watch?v=[videoID]";
retu false;
}
public function youtube($url)
{
if ($this->config["youtube_video_download"] != 1)
{
$this->error = "Video downloads seem to be closed at Youtube Api.";
retu false;
}
if ($this->url_check(parse_yturl($url)))
{
if (($ydata = YoutubeGen($this->video_id)) == false)
{
$this->error = "Error could not be identified given the video content.";
retu false;
}
switch ($this->config["youtube_video_quality"])
{
case "high":
$target_formats = array(
"137",
"136",
"135",
"134",
"133",
"5",
"160"
);
break;
case "medium":
$target_formats = array(
"134",
"135",
"5",
"38",
"133",
"160",
"136",
"137"
);
break;
case "low":
$target_formats = array(
"133",
"5",
"160",
"136"
);
}
foreach ($target_formats as $target_format)
{
if (isset($ydata["link"][$target_format]))
{
$redirect_url = $ydata["link"][$target_format][0];
}
}
if (isset($redirect_url))
{
$data = $this->get_youtube_description($this->video_id);
$data["videoUrl"] = $redirect_url;
retu $data;
}
$this->error = "Video download link not found.Entered the youtube Url can be private or not allowed access only through YouTube.";
retu false;
}
retu false;
}
public function vk($q, $page = 1)
{
if (empty($q))
{
$this->error = "Music name is mandotary to fill.";
retu false;
}
$settings = $this->CI->setting_model->get_custom_settings(array(
"vk_video_upload",
"vk_client_id",
"vk_secret_key",
"vk_access_token",
"vk_lyrics_support"
));
if ($settings["vk_video_upload"] == 1)
{
$this->CI->load->library("vk", array(
"client_id" => $settings["vk_client_id"],
"secret_key" => $settings["vk_secret_key"],
"access_token" => $settings["vk_access_token"]
));
$result = $this->CI->vk->api("audio.search", array(
"v" => "2.0",
"q" => $q,
"count" => 20,
"offset" => ($page + 0) * 20 - 20
));
if (isset($result["error"]))
{
$this->error = $result["error"]["error_msg"];
retu false;
}
if (1 < count($result))
{
foreach ($result as $value)
{
if (!is_array($value))
{
continue;
}
$data["embed"][] = "[VK_AUDIO=" . $value["owner_id"] . "_" . $value["aid"] . "]";
$data["duration"][] = floor($value["duration"] / 60) . ":" . (($value["duration"] % 60 < 10 ? "0" : "")) . $value["duration"] % 60;
$data["name"][] = $value["artist"] . " — " . $value["title"];
if (isset($value["lyrics_id"]) && $settings["vk_lyrics_support"] == 1)
{
$data["lyrics_id"][] = $value["lyrics_id"];
}
else
{
$data["lyrics_id"][] = 0;
}
}
$data["page"] = $page;
retu $data;
}
$this->error = "Music not found for your search";
}
else
{
$this->error = "Vk Api seem to be closed so your operation can not be performed.";
}
retu false;
}
public function vk_get_lyrics($lyrics_id)
{
$settings = $this->CI->setting_model->get_custom_settings(array(
"vk_client_id",
"vk_secret_key",
"vk_access_token",
"vk_lyrics_support"
));
$this->CI->load->library("vk", array(
"client_id" => $settings["vk_client_id"],
"secret_key" => $settings["vk_secret_key"],
"access_token" => $settings["vk_access_token"]
));
if (!empty($lyrics_id) && $settings["vk_lyrics_support"] == 1)
{
$lyric = $this->CI->vk->api("audio.getLyrics", array(
"lyrics_id" => $lyrics_id
));
$data["content"] = html_entity_decode(nl2br($lyric["text"]));
}
else
{
$data["content"] = "";
}
retu $data;
}
public function download_url_video($url)
{
if ($this->get_size($url) <= $this->video_limit_size)
{
$pathinfo = pathinfo($url);
if (isset($pathinfo["extension"]))
{
$extension = explode("?", $pathinfo["extension"]);
$extension = (stristr($extension[0], "title") ? "mp4" : $extension[0]);
if (!in_array($extension, $this->vid_ext))
{
$extension = "mp4";
}
}
else
{
$extension = "mp4";
}
mt_srand();
$video_name = md5(uniqid(mt_rand())) . "." . $extension;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13");
curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com");
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $this->curl_follow_location);
$video = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if (200 <= $httpcode && $httpcode < 300)
{
$file = fopen(FCPATH . $this->path_video . $video_name, "w");
fwrite($file, $video);
fclose($file);
retu $video_name;
}
$this->error = "Could not access the source for downloading the video.";
}
else
{
$this->error = "Size of the video you are trying to download is above limits.You can change limits on /application/config/videnox.php ";
}
retu false;
}
public function videoThumbDuration($videoPath, $gthumb = true, $gduration = true)
{
$ffmpeg = @trim(@shell_exec("type -P ffmpeg"));
if (!empty($ffmpeg))
{
$data = false;
$video = FCPATH . $this->path_video . $videoPath;
if ($gthumb)
{
$data["thumbnail"] = "";
mt_srand();
$thumb = md5(uniqid(mt_rand())) . ".jpg";
$thumbnail = FCPATH . "uploads/thumb/" . $thumb;
shell_exec("ffmpeg -i " . $video . " -deinterlace -an -ss 1 -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg " . $thumbnail . " 2>&1");
if (file_exists($thumbnail))
{
$data["thumbnail"] = $thumb;
}
}
if ($gduration)
{
$data["duration"] = "";
$videoTime = shell_exec("ffmpeg -i "" . $video . "" 2>&1");
if (preg_match("/Duration: (\d{2}:\d{2}:\d{2}\.\d{2})/", $videoTime, $matches))
{
$time = explode(":", $matches[1]);
list($hour, $minutes) = $time;
$seconds = round($time[2]);
$data["duration"] = $hour . ":" . $minutes . ":" . $seconds;
}
}
retu $data;
}
retu array(
"duration" => "",
"thumbnail" => ""
);
}
public function upload_video($ffmpeg = true)
{
$config["upload_path"] = FCPATH . $this->path_video;
$config["allowed_types"] = "avi|flv|wmv|mp4";
$config["max_size"] = $this->video_limit_size;
$config["encrypt_name"] = true;
$this->CI->load->library("upload", $config);
if (!$this->CI->upload->do_upload("qqfile"))
{
$data = array(
"success" => false,
"error" => $this->CI->upload->display_errors("", "")
);
}
else
{
$video = $this->CI->upload->data();
$response = array(
"thumbnail" => "",
"duration" => ""
);
if ($ffmpeg)
{
$response = $this->videoThumbDuration($video["file_name"]);
}
$data = array(
"success" => true,
"video_url" => $video["file_name"],
"image_url" => $response["thumbnail"],
"duration" => $response["duration"]
);
}
retu $data;
}
private function curlGet($URL)
{
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $URL);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
if (curl_exec($ch) === false)
{
$this->error = "Curl error: " . curl_error($ch);
retu false;
}
$tmp = curl_exec($ch);
curl_close($ch);
retu (empty($tmp) ? false : $tmp);
}
private function get_size($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
retu $size;
}
public function get_youtube_description($video_id)
{
$json = json_decode($this->curlGet("http://gdata.youtube.com/feeds/api/videos/" . $video_id . "?v=2&alt=json"), true);
if (isset($json["entry"]))
{
$data["description"] = $json["entry"]["media$group"]["media$description"]["$t"];
$data["title"] = $json["entry"]["title"]["$t"];
$data["duration"] = $json["entry"]["media$group"]["yt$duration"]["seconds"];
$data["thumbnail"] = str_replace("default", "hqdefault", $json["entry"]["media$group"]["media$thumbnail"][0]["url"]);
retu $data;
}
retu false;
}
public function get_error()
{
retu $this->error;
}
}
?>

برنامه نویس...
ما را در سایت برنامه نویس دنبال می کنید

برچسب : نویسنده : محمد رضا جوادیان programers بازدید : 103 تاريخ : يکشنبه 22 فروردين 1395 ساعت: 2:05