محمدسجاد دباغ
3 سال پیش توسط محمدسجاد دباغ مطرح شد
8 پاسخ

بدست آوردن زمان ویدئو آپلود شده

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

چرا کد زیر این را به ما نمیده؟

$request->file('file')

ثبت پرسش جدید
محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش مطرح شد
0

@mohaligateway
از راهنمایی هاتون بسیار متشکرم.
در نهایت به این نتیجه رسیدم با جاوا اسکریپت هندل کنم.

<input type="hidden" value="0" name="video_duration" id="video_duration">

javascript code in blade

// create the video element but don't add it to the page
var vid = document.createElement('video');
document.querySelector('#customFile').addEventListener('change', function() {
  // create url to use as the src of the video
  var fileURL = URL.createObjectURL(this.files[0]);
  vid.src = fileURL;
  // wait for duration to change from NaN to the actual duration
  vid.ondurationchange = function() {
      $('#video_duration').val(this.duration);
  };
});

و برای تبدیل به ساعت دقیقه و ثانیه یک helper میسازیم.

<?php
if (!function_exists('helper_ConvertSecondToMin')) {
    function Convert_SecondToMin($totalSeconds) {
        if ($totalSeconds == '0') {
            return 0;
        }else{
            $hours   = floor($totalSeconds / 3600);
            $minutes = floor(($totalSeconds - ($hours * 3600)) / 60);
            $seconds = $totalSeconds - ($hours * 3600) - ($minutes * 60);
            // round seconds
            $seconds = round($seconds * 100 ) / 100;

            $result1 = ($hours < 10 ? "0" + $hours : $hours);
            $result2 = ($minutes < 10 ? "0" + $minutes : $minutes);
            $result3 = ($seconds  < 10 ? "0" + $seconds : $seconds);

            return $result1.':'.$result2.':'.floor($result3);
        }
    }
}

moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش مطرح شد
0

سلام
request file تنها فایل رو جابه جا می کنه قادر به خوندن فایل با فرمت های مختلف نیست. مگه vlc هستش 😀. با استفاده از کد نویسی جاوا اسکریپت می تونید این کار رو انجام بدید.

// create the video element but don't add it to the page
var vid = document.createElement('video');
document.querySelector('#input').addEventListener('change', function() {
  // create url to use as the src of the video
  var fileURL = URL.createObjectURL(this.files[0]);
  vid.src = fileURL;
  // wait for duration to change from NaN to the actual duration
  vid.ondurationchange = function() {
    alert(this.duration);
  };
});

کد html

<input type="file" id="input">

@msdabbagh


محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش مطرح شد
-1

@mohaligateway

public function store(Request $request)
{
    $this->validate($request, [
     'file' => 'required|mimes:mp4',
    ]);

    $new_file_data = [
        'file_type' => $request->file('file')->getMimeType(),
        'file_size' => $request->file('file')->getSize(),
        ];
}

برای مثال در کد بالا با استفاده از getSize میتوان از request file میزان سایز فایل رو گرفت!

پس این جمله زیر از شما درست نیست.

request file تنها فایل رو جابه جا می کنه قادر به خوندن فایل با فرمت های مختلف نیست.


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

سلام
برای گرفتن زمان ویدیوی آپلود شده از ffmpeg استفاده کنید. ابزاری است تحت cmd که از دستوراتش در php و laravel میشه استفاده کرد.
ابتدا باید ffmpeg رو روی سیستمت نصب کنی فایل .exe رد دانلود و نصب کن. داستانی داره.


moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش مطرح شد
1

حجم به خوندن فایل مربوط نمیشه.
مثلا شما یک فایل رو توی سیستم عامل دارید که نرم افزار برای باز کردنش ندارید. اونوقت حجمش مشخص نیست ؟! بهتره این کار رو با جاوا اسکریپت موقع آپلود ویدئو انجام بدید و یک field برای duration در نظر بگیرید. این روش جواب میده. خودم به شخصه تست کردم این روش رو.
@msdabbagh


محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش مطرح شد
0

@mohaligateway
سلام از کد جاوا اسکریپت شما استفاده کردم اما طبق سه تا تستی که انجام دادم عددی که به عنوان خروجی بر حسب ثانیه میده درست نیست و پس از تبدیل به دقیقه ، با چندین ثانیه اختلاف حساب میشه.
شاید من روش تبدیل به دقیقه رو درست نزدم ، روش درستش چیه؟

من خودم یک پکیج php پیدا کردم که ظاهرا خوبه فقط بلد نیستم توی لاراول نصب کنم.
شما میتونید راهنماییم کنید؟
https://github.com/wapmorgan/MediaFile


moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش مطرح شد
0

این پکیج که معرفی کردید php خام هستش. خودتون باید روی لاراول پیاده سازیش کنید.
برای پیاده سازی ابتدا از composer پکیج رو نصب کنید.

composer require wapmorgan/media-file

بعد از نصب داخل پوشه app که از psr-4 پشتیبانی می کنه کلاس php بسازید. مثلا توی app->helpers->mediHelper.php بسازید می تونید با use کردن هرجا خواستید استفاده کنید. می تونید یک alias serviceprovider ازش بسازید تا دیگه نیاز نباشه ازش کلاس بسازید.
@msdabbagh


محمدسجاد دباغ
تخصص : برنامه نویس لاراول
@mdabbagh 3 سال پیش مطرح شد
0

@mohaligateway
از راهنمایی هاتون بسیار متشکرم.
در نهایت به این نتیجه رسیدم با جاوا اسکریپت هندل کنم.

<input type="hidden" value="0" name="video_duration" id="video_duration">

javascript code in blade

// create the video element but don't add it to the page
var vid = document.createElement('video');
document.querySelector('#customFile').addEventListener('change', function() {
  // create url to use as the src of the video
  var fileURL = URL.createObjectURL(this.files[0]);
  vid.src = fileURL;
  // wait for duration to change from NaN to the actual duration
  vid.ondurationchange = function() {
      $('#video_duration').val(this.duration);
  };
});

و برای تبدیل به ساعت دقیقه و ثانیه یک helper میسازیم.

<?php
if (!function_exists('helper_ConvertSecondToMin')) {
    function Convert_SecondToMin($totalSeconds) {
        if ($totalSeconds == '0') {
            return 0;
        }else{
            $hours   = floor($totalSeconds / 3600);
            $minutes = floor(($totalSeconds - ($hours * 3600)) / 60);
            $seconds = $totalSeconds - ($hours * 3600) - ($minutes * 60);
            // round seconds
            $seconds = round($seconds * 100 ) / 100;

            $result1 = ($hours < 10 ? "0" + $hours : $hours);
            $result2 = ($minutes < 10 ? "0" + $minutes : $minutes);
            $result3 = ($seconds  < 10 ? "0" + $seconds : $seconds);

            return $result1.':'.$result2.':'.floor($result3);
        }
    }
}

moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش مطرح شد
0

بهتره که با همون جاوا اسکریپت تغییرات رو انجام بدید و بفرستید سمت بک اند. البته این روش helper ساختن هم مشکل نداره. البته helper هم نمی خواد اگه morilog داری می تونی با اون انجام بدی.
@msdabbagh


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام