شاید برای شما پیش آمده که نیاز داشته باشید تمام پخش زنده های ارسالی به nginx را ضبط و ذخیره نمایید و یا بخواهید آرشیوی از تمامی پخش زنده هایتان داشته باشید. در nginx و با استفاده از ماژول rtmp براحتی این کار میسر هست. در این آموزش نحوی فعال سازی ضبط پخش زنده در nginx را به دو روش آموزش خواهم داد.در مطالب قبلی من آموزش نصب و راه اندازی وب سروریس nginx به همراه ماژول rtmp برای ارائه سرویس پخش زنده به پروتکل های HLS و RTMP را در دو سیستم عامل ویندوز و لینوکس آموزش داده ام. و همچنین در مطالب دیگه نحوی انجام تنظیمات خاص این سرویس را نیز منتشر کردم. شما میتوانید با تک nginx تمامی مطالب مربوطه را مطالعه نمایید.

برای ضبط پخش زنده در nginx-rtmp شما میتوانید از دو روش استفاده کنید. یکی استفاده از قابلیت Record و دیگری استفاده از قابلیت Exec با استفاده از برنامه ffmpeg، که استفاده از این روش در سیستم عامل ویندوز ممکن نیست.

ضبط فایل ها با روش اول

همون طور که اطلاع دارید پروتکل rtmp ساخته شرکت Macromedia بوده و این پروتکل فایل های تصویری خود را تحت فرمت استاندارد این شرکت یعنی flv ارسال میکند. پس اگر از روش اول استفاده میکنید فایل های شما با فرمت flv ذخیره خواهد شد.

برای شروع ابتدا فایل nginx.conf موجود در فولدر conf در ریشه ی اصلی nginx را باز کرده و گذینه ی record را در اپلیکیشن آن قرار دهید ، با استفاده از گذینه های زیر شما میتوانید مشخص کنید که چه چیزی ضبط گردد:

  • off - غیر فعال بودن ریکورد
  • all - ذخیره کامل ( ویدئو و صدا )
  • audio - ضبط صدا
  • video - ضبط فقط ویدئو
  • keyframes - تصویر بصورت کی فریم
  • manual - ضبط دستی، با استفاده از قابلیت کنترل دستور ضبط داده میشود.

شما همچنین میتوانید از دو حالت هم زمان نیز استفاده نمایید. برای نمونه اگر نیاز دارید صدا و کی فریم ذخیره گردد تنظیمات را بصورت زیر وارد کنید:

record audio keyframes;

برای آدرس دهی باید از گذینه ی record_path استفاده نمایید، دقت کنید درصورتی که فولدری را در لینوکس برای ضبط فایل مشخص کرده اید، سطح دسترسی آن را اعطا نمایید.

record_path /tmp/rec;

همچنین درصورتی که میخواهد نام فایل با ساختار خاصی نام گذاری شود از گذینه ی record_suffix استفاده نمایید:

record_suffix _recorded.flv;

درصورتی که بخواهید تاریخ به فایل اضافه نمایید میتوانید از الگوی strftime استفاده نمایید:

record_suffix -%d-%b-%y-%T.flv;

خروجی این فایل بصورت mystream-24-Apr-13-18:23:38.flv خواهد بود.

همچنین درصورتی که بخواهید ضبط ها بصورت فایل های جداگانه انجام گردد از record_unique استفاده نمایید و یا درصورتی نیاز دارید ضبط های جدید ادامه فایل های قدیمی ضبط گردد از گذینه ی record_append استفاده نمایید.

در پایان و انتهای تنظیمات فایل را ذخیره و سرویس را restart نمایید. دستور رستارت سرویس در آموزش های قبل موجود است.

روش دوم استفاده از Exec و ffmpeg

همانطور که گفته شد استفاده از این روش به دلیل غیر فعال بودن Exec، در ویندوز ممکن نیست.

شما با نصب ffmpeg در سیستم عامل لینوکس و انجام تنظیمات آن میتوانید فایل های خود را با فرمت های دیگر، به جز flv ضبط نمایید. برای مثال میتوانید از این تنظیمات برای ضبط فایل ها به فرمت mp4 استفاده نمایید:

exec_push ffmpeg -loglevel error -i rtmp://localhost/$app/$name -vcodec copy -acodec copy /tmp/rec/record-$app-$name-%d-%b-%y-%T.mp4;

در این حالت با استفاده از قابلیت های ffmpeg کیفیت فایل های ضبط شده ی خود را تغییر دهید. دقت فرمایید که در این حالت مصرف CPU در سرور بیشتر خواهد شد.

 

امیدوارم که این مطلب براتون مفید بوده باشه.