PDA

View Full Version : سوال: اجر فایل mp۴ و جلوگیری از دانلود آن توسط کاربر مثل youtube



Mohsen74_programmer
دوشنبه 01 بهمن 1397, 09:30 صبح
سلام
من یه پروژه به زودی دستم میاد که تنها چیزی که این پروژه داره یه سری فایل صوتی و تصویری برای کاربران به نمایش درمیاد و کاربران نباید بتونن فایل های اونها را دانلود کنند.فقط می تونن اونها را پلی کنن.دقیقا مثل youtube
خودتتون بهتر میدونید که تگ source در داخل تگ video هستش خصوصیت src اون آدرس فایل می خواد تا اونو نمایش بده و کاربر می تونه اونه کپی و داخل تب جدید مرورگر یا با IDM دانلودش کنه.
من باید چیکار کنم؟

plague
دوشنبه 01 بهمن 1397, 13:10 عصر
توی سورس بجای اینکه آدرس فایل رو بزاری آدرس یه فایل php رو بزار
بعد تو اون فایل php بخون ویدئو رو و بده بفرست برای پلیر
یه توکن یکبار مصرف هم تولید کن به ازای هر پخش ویدئو که کسی نتونه یک لینک رو دوبار استفاده کنه

Mohsen74_programmer
دوشنبه 01 بهمن 1397, 20:24 عصر
ممنون از راهنماییتون
اگر امکانش هست یکم بیشتر توضیح بدید
چطوری فایل بخونم و در src تگ source اجر کنم؟
چطوری توکن یکبار مصرف کنم؟

plague
سه شنبه 02 بهمن 1397, 13:33 عصر
در مورد سوال اولت

https://stackoverflow.com/questions/24596450/play-mp4-file-through-php-in-html5-video-tag-in-chrome


توکن هم وقتی صفحه داره لود میشه یه توکن ایجاد کن بریز تو دیتابیس بعد لینک ویدئو رو اینجوری بزار

play.php?video_id=1&token=x12vfds2

بعد تو فایل php قبل از پخش ویدئو توکن رو از دیتابیس چک کن ببین وجود داره همچین توکنی یا نه و قبلا استفاده شده یا نه
اگه هرکدم از این شرط ها صحیح نبود ویدئو رو نمیاش نده

یه فیلد بزار تو تیبل توکن که مشخص کنه استفاده شده یا نه که مثلا مقدار 0 و 1 بگیره

Mohsen74_programmer
پنج شنبه 04 بهمن 1397, 11:52 صبح
سلام
خیلی ممنون مشکلم حل شد
کد زیر خیلی خوب این کار رو انجام میده



("$file_pointer = fopen($filePath, "rb
($data = fread($file_pointer, $size_file


("header("Content-type: video/mp4


echo $data
در کروم و فایرفاکس هم در ویندوز هم در اندورید فیلم لود و اجر میشه.
اما متاسفانه داخل safari در ios فیلم لود نمیشه.

Mohsen74_programmer
یک شنبه 12 اسفند 1397, 17:45 عصر
سلام
این کدها یه مشکل دارند که اول فایلو اجرا و لود میکنن اما بعد چند ثانیه اجرا و لود فیلم متوقف میشه و اگر فیلم رو از اون اول بارگذاری جلو بکشی دیگه فیلم لود و اجرا نمیشه مثلا اگر فیلم 30 دقیقه باشه چند ثانیه اول بارگذاری صفحه توسط مرورگر تا دقیقه 2 الی 3 لود و اجرا میشه بعد اگر درجا اونه به دقیقه 20 می بردی فیلم دیگه لود و اجرا نمی شد.این به خاطر اینکه وقتی که فیلم به جلو میکشی مرورگر یه request جدید با همون لینک که توش توکن یکبار وجود داره می فرسته به server و چون توکن از قبل استفاده شده دیگه server فایل براش نمی فرسته.
ایا باید از ffmpeg استفاده کنم؟

ali_sed
دوشنبه 13 اسفند 1397, 12:00 عصر
خیلی ممنون مشکلم حل شد
کد زیر خیلی خوب این کار رو انجام میده



("$file_pointer = fopen($filePath, "rb
($data = fread($file_pointer, $size_file


("header("Content-type: video/mp4


echo $data
در کروم و فایرفاکس هم در ویندوز هم در اندورید فیلم لود و اجر میشه.
اما متاسفانه داخل safari در ios فیلم لود نمیشه.

سلام

برای فایلهای ویدئویی کوتاه و کم حجم میتوانید از php برای ساخت توکن و اعتبار سنجی کاربر استفاده کنید. در این حالت نیز ضرورتی ندارد که فایل ها را با php خوانده و برای کاربر ارسال کنید. کافیست بعد از اعتبار سنجی کاربر از ماژول mod-xsendfile آپاچی استفاده کنید:


<?php
//We want to force a download box with the filename hello.txt
header('Content-Disposition: attachment;filename=hello.txt');

//File is located at /home/username/hello.txt
header('X-Sendfile: /home/username/hello.txt');

یا از PECL module استفاده کنید:

<?php
http_send_content_disposition("document.pdf", true);
http_send_content_type("application/pdf");
http_throttle(0.1, 2048);
http_send_file("../report.pdf");

اما برای فایلهای ویدئویی طولانی و با کیفیت بالا استفاده از این روش نیز مناسب نیست چون ممکنه کانکشن ها باز بمونه و پنهای باند زیادی از سرور استفاده شود. بنابراین بهتر است فایل ویدئویی بصورت قطعه قطعه chunk برای کاربر ارسال شود. هم کاربر می تواند چند قطعه پشت سرهم را همزمان دانلود کنه و هم در صورت تغییر کیفیت ویدئو توسط کاربر کانکشن های سمت سرور باز نمی ماند. مانند پروتکل HLS .
برای ویدئوهای با رزولوشن بالا حتی ممکن است نیاز باشد بخش تصویر و بخش صوت بصورت مجزا برای کاربر ارسال شود.

در نهایت اینکه چالش های زیادی سر راه شماست بنابراین خیلی انرژی خود را روی دانلود نشدن ویدئو صرف نکنید چون تنها می توانید کار را برای کاربر سخت کنید نه غیر ممکن. در بدترین حالت اینکه کاربر صفحه نمایش خود را ضبط می کند.