افزونه ها – Obs Studio 29.1.
راهنمای افزونه ها
لینوکس
(flatpak)
افزونه ها
. .
افزونه ها می توانند منابع ، خروجی ها ، رمزگذارها و خدمات را پیاده سازی کنند.
نوشتن اولین افزونه خود? ما یک افزونه الگوی اساسی برای شروع کار ارائه می دهیم.
هدر ماژول افزونه
اینها برخی از هدرهای قابل توجه هستند که معمولاً توسط افزونه ها استفاده می شوند:
- libobs/mostule Obs.. این پرونده به طور خودکار پرونده های زیر را شامل می شود:
- libobs/obs.ح – هدر اصلی libobs.
- libobs/Obs-Source.ح – برای اجرای منابع در ماژول های افزونه استفاده می شود
- libobs/obterput.ح – برای اجرای خروجی ها در ماژول های افزونه استفاده می شود
- libobs/Obs-incoder.
- لیبوب ها/خدمات رعایت.ح – برای اجرای خدمات در ماژول های افزونه استفاده می شود
- libobs/out-data.ح – برای مدیریت تنظیمات برای اشیاء libobs استفاده می شود
- libobs/Obs-Properties.ح – برای تولید خواص برای اشیاء libobs استفاده می شود
- Libobs/Graphics/Graphics.ح – برای ارائه گرافیک استفاده می شود
ساختار دایرکتوری مشترک و cmakelists.txt
سازماندهی فایلهای منبع مشترک ، داشتن یک فایل برای اولیه سازی افزونه ، و سپس پرونده های خاص برای هر شیء جداگانه که شما اجرا می کنید. به عنوان مثال ، اگر می خواهید یک افزونه به نام “My-Plugin” ایجاد کنید ، چیزی شبیه به پپلین من خواهید داشت…. (البته این یک قاعده نیست)
این نمونه ای از یک ساختار دایرکتوری مشترک برای یک ماژول افزونه بومی است:
من-پژمان/داده ها/محل/در-ما.ini -/cmakelists.txt من-پژمان/من-پژمان.جف من-پژمان/من-.جف من-پژمانمن-خروجی.جف من-پژمان/من-رمز دهنده. من-پژمان/من-سرویس.جف
این می تواند نمونه ای از یک cmakelists مشترک باشد.پرونده txt مرتبط با این پرونده ها:
# پلاجین/cmakelists.پروژه txt (my-plugin) مجموعه (my-plugin_sources my-plugin.c منبع من.c my-output.c my-coder.c خدمات من.ج) add_library (ماژول plugin $) target_link_libraries (my-plugin libobs) install_obs_plugin_with_data (داده های پلوژین)
اولیه سازی افزونه بومی
برای ایجاد یک ماژول افزونه بومی ، باید Libobs/Obs-Module را درج کنید.H Header ، از MACRO OBS_DECLARE_MODULE () استفاده کنید ، سپس تعریفی از عملکرد OBS_MODULE_LOAD ایجاد کنید () . . برای اطلاعات بیشتر به مرجع API ماژول مراجعه کنید.
موارد زیر نمونه ای از پلوگن من است.ج ، که می تواند یک شی از هر نوع را ثبت کند:
/* پلوژین من.ج */ #عبارتند از / * توابع مشترک را تعریف می کند (مورد نیاز) */ OBS_DECLARE_MODULE() / * محل محلی مبتنی بر Ini (اختیاری) را پیاده سازی می کند */ OBS_MODULE_USE_DEFAULT_LOCALE("منو پلوژین", "en-us") OBS_SOURCE_INFO my_source /* تعریف شده در منبع من.ج */ بیرونی ساختار OBS_OUTPUT_INFO my_output؛ /* تعریف شده در خروجی.ج */ بیرونی ساختار OBS_ENCODER_INFO my_encoder؛ /* تعریف شده در عمارت من.ج */ بیرونی ساختار My_Service؛ /* تعریف شده در خدمات من.ج */ (خالی) Obs_Register_Source(وادmy_source) ؛ Obs_Register_Output(وادmy_output) ؛ OBS_REGISTER_ENCODER(وادmy_encoder) ؛ Obs_Register_Service(وادMy_Service) ؛ برگشت درست است، واقعی >
منابع
از منابع برای ارائه فیلم و/یا صدا در جریان استفاده می شود. مواردی مانند ضبط نمایشگرها/بازی ها/صدا ، پخش ویدیو ، نشان دادن تصویر یا پخش صدا. همچنین می توان از منابع برای اجرای فیلترهای صوتی و تصویری و همچنین انتقال استفاده کرد. Libobs/Obs-Source.پرونده H عنوان اختصاصی برای اجرای منابع است. برای اطلاعات بیشتر به مرجع منبع API (OBS_SOURCE_T) مراجعه کنید.
به عنوان مثال ، برای اجرای یک شیء منبع ، باید یک ساختار OBS_SOURCE_INFO را تعریف کرده و آن را با اطلاعات و پاسخ های مربوط به منبع خود پر کنید:
.ج */ . ] ساختار OBS_SOURCE_INFO my_source .شناسه = "my_source", .نوع = , . = OBS_SOURCE_VIDEO, .get_name = my_source_name, .ايجاد كردن = my_source_create, .از بین رفتن = , .به روز رسانی = my_source_update, .ویدیویی_ = my_source_render, .get_width = , .get_height my_source_height > ؛
سپس ، در پلوژین من.ج ، شما برای ثبت نام منبع با libobs با OBS_REGISTER_SOURCE () در OBS_MODULE_LOAD () تماس می گیرید.
/* پلوژین من.ج */ [. ] بیرونی ساختار OBS_SOURCE_INFO ؛ /* تعریف شده در منبع من.ج */ بول OBS_MODULE_LOAD(خالی Obs_Register_Source(واد) ؛ [. ] درست است، واقعی؛
برخی از نمونه های ساده از منابع:
- منبع ویدیویی همزمان: منبع تصویر
- منبع ویدیویی ناهمزمان: منبع تست بافت تصادفی
- منبع صوتی: منبع تست موج سینوسی
- فیلتر ویدیویی: فیلتر ویدیویی تست
- فیلتر صوتی: فیلتر صوتی افزایش
خروجی ها امکان خروج از صوتی/تصویری صوتی در حال حاضر را فراهم می کنند. جریان و ضبط دو نمونه رایج از خروجی ها است ، اما تنها انواع خروجی ها نیست. خروجی ها می توانند داده های خام را دریافت کنند یا داده های رمزگذاری شده را دریافت کنند. Libobs/Obsomput.پرونده H عنوان اختصاصی برای اجرای خروجی ها است. برای اطلاعات بیشتر به مرجع خروجی API (OBS_OUTPUT_T) مراجعه کنید.
به عنوان مثال ، برای پیاده سازی یک شیء خروجی ، باید یک ساختار OBS_OUTPUT_INFO را تعریف کرده و آن را با اطلاعات و پاسخ های مربوط به خروجی خود پر کنید:
/* my-output.ج */ [. ] ساختار OBS_OUTPUT_INFO my_output .شناسه = "my_output", .پرچم = OBS_OUTPUT_AV | , . = my_output_name, .ايجاد كردن = my_output_create, .از بین رفتن my_output_destroy, . = my_output_start, .متوقف کردن my_output_stop, .رمزگذاری شده_پکت = , .get_total_bytes = my_output_total_bytes, .ended_video_codecs = "H264", .ended_audio_codecs = "AAC" > ؛
سپس ، در پلوژین من.ج ، برای ثبت خروجی با Libobs با OBS_REGISTER_OUTPUT () در OBS_MODULE_LOAD () تماس می گیرید.
/* پلوژین من.ج */ [. ] بیرونی ساختار OBS_OUTPUT_INFO my_output /* تعریف شده در خروجی.ج */ بول OBS_MODULE_LOAD(خالی) Obs_Register_Output(my_output) ؛ [. ] برگشت درست است، واقعی؛ >
- خروجی های ویدئویی/صوتی رمزگذاری شده:
- خروجی FLV
- خروجی Muxer FFMPEG
- خروجی جریان RTMP
- خروجی FFMPEG
رمزگذارها پیاده سازی های خاص از رمزگذارهای ویدئویی/صوتی هستند که با خروجی هایی که از رمزگذارها استفاده می کنند استفاده می شوند. x264 ، nvenc ، Quicksync نمونه هایی از اجرای رمزگذار است. Libobs/Obs-Ancoder.H File عنوان اختصاصی برای اجرای رمزگذارها است. برای اطلاعات بیشتر به مرجع Encoder API (OBS_ENCODER_T) مراجعه کنید.
.ج */ [. ] ساختار OBS_ENCODER_INFO = .شناسه = "my_encoder", .نوع = , . = , .get_name my_encoder_name, . = my_encoder_create, .از بین رفتن = my_encoder_destroy, . my_encoder_encode, .به روز رسانی = my_encoder_update, . = my_encoder_extra_data, .get_sei_data = my_encoder_sei, .get_video_info = my_encoder_video_info
سپس ، در پلوژین من.ج ، شما برای ثبت نام رمزگذار با libobs با OBS_REGISTER_ENCODER () در OBS_MODULE_LOAD () تماس می گیرید.
/* پلوژین من.ج */ [. بیرونی OBS_ENCODER_INFO my_encoder؛ /* تعریف شده در عمارت من.ج */ بول (خالی) OBS_REGISTER_ENCODER(وادmy_encoder) ؛ . ] برگشت ؛
یادداشت مهم:
- – این مقدار باید برای رمزگذارهای ویدئویی و صوتی استفاده شود: Bitrate ، در Kilobits.
- “نرخ_نترل” – . به طور کلی انتظار می رود حداقل یک کنترل نرخ “CBR” داشته باشد. سایر کنترل های نرخ مشترک عبارتند از “VBR” ، “CQP”.
- “keyint_sec” – برای رمزگذارهای ویدئویی ، مقدار فاصله زمانی keyframe را در ثانیه یا نزدیکترین تقریب ممکن تنظیم می کند. (یادداشت نویسنده: این باید در فریم ها “کلید” بود.)
نمونه هایی از رمزگذارها:
- رمزگذار ویدیویی:
- رمزگذار ffmpeg nvenc
- رمزگذار QuickSync
- رمزگذار ffmpeg aac/opus
خدمات پیاده سازی های سفارشی خدمات جریان هستند که با خروجی هایی که جریان دارند استفاده می شوند. به عنوان مثال ، شما می توانید یک اجرای سفارشی برای پخش جریان به Twitch داشته باشید ، و دیگری برای YouTube امکان ورود به سیستم و استفاده از API های آنها را برای انجام کارهایی مانند دریافت سرورهای RTMP یا کنترل کانال فراهم می کند. Libobs/Obs-Service.H File عنوان اختصاصی برای اجرای خدمات است. برای اطلاعات بیشتر به مرجع خدمات API (OBS_SERVICE_T) مراجعه کنید.
(یادداشت نویسنده: API سرویس از این نوشتار ناقص است)
به عنوان مثال ، برای اجرای یک شیء سرویس ، باید یک ساختار OBS_SERVICE_INFO را تعریف کرده و آن را با اطلاعات و تماس های مربوط به خدمات خود پر کنید:
/* سرویس من.ج */ [. ] ساختار OBS_SERVICE_INFO my_service_service = . = "my_service", .get_name = my_service_name, .ايجاد كردن = my_service_create, . = my_service_destroy, .رمز کردن = my_service_encode, .به روز رسانی = my_service_update, .get_url = my_service_url, .دریافت_انه = my_service_key > ؛
سپس ، در پلوژین من.ج ، برای ثبت سرویس با libobs با Obs_Register_Service () در OBS_MODULE_LOAD () تماس می گیرید.
/* پلوژین من.ج */ [. ] بیرونی ساختار My_Service؛ /* تعریف شده در خدمات من.ج */ بول OBS_MODULE_LOAD() Obs_Register_Service(وادMy_Service) ؛ [. ] برگشت ؛ >
تنها دو شیء خدمات موجود “خدمات مشترک RTMP” و “خدمات RTMP سفارشی” در پلاگین ها/خدمات RTMP هستند
تنظیمات
تنظیمات (به Libobs/Obs-Data مراجعه کنید.ح) برای دریافت یا تنظیم داده های تنظیمات به طور معمول با اشیاء libobs استفاده می شود ، و سپس می توان از طریق متن JSON ذخیره و بارگیری کرد. برای اطلاعات بیشتر به مرجع API تنظیمات داده (OBS_DATA_T) مراجعه کنید.
در OBS_DATA_T معادل یک شیء JSON است ، جایی که یک جدول رشته ای از زیر شیطان است ، و OBS_DATA_ARRAY_T OBS_DATA_T اشیاء ، مشابه آرایه های JSON (هرچند کاملاً یکسان نیستند).
OBS_DATA_T یا شی ، شما با توابع OBS_DATA_CREATE () یا OBS_DATA_ARRAY_CREATE () تماس می گیرید. OBS_DATA_T وت OBS_DATA_ARRAY_T اشیاء مرجع شمارش می شوند ، بنابراین وقتی با شیء تمام شد ، با OBS_DATA_RELEASE () یا OBS_DATA_ARRAY_RELEASE () تماس بگیرید تا این منابع را منتشر کنید. OBS_DATA_T یا OBS_DATA_ARRAY_T شیء توسط یک عملکرد بازگردانده می شود ، منابع آنها افزایش می یابد ، بنابراین شما باید هر بار آن منابع را آزاد کنید.
برای تعیین مقادیر برای یک OBS_DATA_T شی ، شما از یکی از توابع زیر استفاده می کنید:
/ * توابع را تنظیم کنید */ صادر کردن OBS_DATA_SET_STRING(OBS_DATA_T *داده ها, محاصره کردن نام, محاصره کردن شغلی *) ؛ OBS_DATA_SET_INT(OBS_DATA_T *داده ها, شغلی *, طولانی دره) ؛ صادر کردن خالی OBS_DATA_SET_DOUBLE(OBS_DATA_T *داده ها, شغلی *نام, دره) ؛ صادر کردن خالی OBS_DATA_SET_BOOL(OBS_DATA_T *داده ها, محاصره کردن شغلی *نام, بول دره) ؛ صادر کردن خالی OBS_DATA_SET_OBJOBS_DATA_T *داده ها, محاصره کردن شغلی *, OBS_DATA_T *تحقیر کردن) ؛ صادر کردن خالی OBS_DATA_SET_ARRAY(OBS_DATA_T *داده ها, شغلی *نام, OBS_DATA_ARRAY_T *آرایه) ؛
به همین ترتیب ، برای دریافت یک مقدار از یک شی ، شما از یکی از توابع زیر استفاده می کنید:
/ * توابع را دریافت کنید */ محاصره کردن شغلی *OBS_DATA_GET_STRING(OBS_DATA_T *داده ها, محاصره کردن شغلی *) ؛ طولانی OBS_DATA_GET_INT(OBS_DATA_T *داده ها, محاصره کردن شغلی نام) ؛ صادر کردن دو برابر Obs_data_get_double( *, محاصره کردن *نام) ؛ صادر کردن OBS_DATA_GET_BOOLOBS_DATA_T *, محاصره کردن شغلی *نام صادر کردن *OBS_DATA_GET_OBJ(OBS_DATA_T *داده ها, شغلی *نام) ؛ OBS_DATA_ARRAY_T OBS_DATA_GET_ARRAY(OBS_DATA_T *داده ها, محاصره کردن شغلی *نام) ؛
برخلاف اشیاء داده های معمولی JSON ، OBS_DATA_T Object همچنین می تواند مقادیر پیش فرض را تنظیم کند. این اجازه می دهد تا در صورت عدم وجود مقداری به یک رشته خاص در یک ، امکان کنترل آنچه بازگردانده می شود را کنترل کنید OBS_DATA_T هنگامی که این داده ها از یک رشته JSON یا JSON بارگیری می شوند ، شیء. هر شیء Libobs نیز دارای یک get_defaults پاسخ به تماس که امکان تنظیم تنظیمات پیش فرض برای Object on Creation را فراهم می کند.
این توابع کنترل مقادیر پیش فرض به شرح زیر است:
. */ صادر کردن خالی (OBS_DATA_T *داده ها, محاصره کردن شغلی *نام, محاصره کردن شغلی *دره) ؛ صادر کردن خالی OBS_DATA_SET_DEFAULT_INTOBS_DATA_T *داده ها, شغلی *نام, طولانی طولانی دره) ؛ صادر کردن خالی OBS_DATA_SET_DEFAULT_DOUBLE(OBS_DATA_T *داده ها, محاصره کردن شغلی *نام, دو برابر دره) ؛ صادر کردن خالی OBS_DATA_SET_DEFAULT_BOOL(OBS_DATA_T *داده ها, شغلی *نام, بول دره) ؛ صادر کردن خالی OBS_DATA_SET_DEFAULT_OBJ(OBS_DATA_T *داده ها, شغلی *نام, OBS_DATA_T *تحقیر کردن) ؛
خواص
خواص (به Libobs/Obs-Properties مراجعه کنید.ح) برای تولید خودکار رابط کاربری برای اصلاح تنظیمات برای یک شیء libobs استفاده می شود (در صورت تمایل). get_properties پاسخ به تماس که برای تولید خواص استفاده می شود. Properties API خصوصیات خاصی را تعریف می کند که به تنظیمات شیء مرتبط است و جلوی آن از این خصوصیات برای تولید ابزارک استفاده می کند تا به کاربر اجازه دهد تنظیمات را اصلاح کند. به عنوان مثال ، اگر تنظیمات بولی داشتید ، از OBS_PROPERTIES_ADD_BOOL () استفاده می کنید تا به کاربر اجازه دهد بتواند آن تنظیم را تغییر دهد. برای اطلاعات بیشتر به Reference API Properties (OBS_Properties_T) مراجعه کنید.
نمونه ای از این:
ثابت Obs_properties_t *my_source_properties(خالی *داده ها *PPTS = () ؛ Obs_properties_add_bool(PPTS, "my_bool", OBS_MODULE_TEXT("Mybool" پارامتر استفاده نشده(داده ها) ؛ برگشت PPTS؛ > [. ] ساختار OBS_SOURCE_INFO .get_properties = my_source_properties, [. ] > ؛
در داده ها در صورت وجود شیء ، پارامتر داده های شی است. به طور معمول این مورد استفاده نشده است و احتمالاً در صورت امکان نباید استفاده شود. اگر خواص بدون شیء مرتبط با آن بازیابی شود ، می تواند تهی باشد.
همچنین بسته به آنچه تنظیمات نشان داده شده است ، خواص نیز می توانند اصلاح شوند. به عنوان مثال ، شما می توانید بسته به آنچه که یک تنظیم خاص روی آن با استفاده از عملکرد OBS_Property_Set_Modified_Callback () تنظیم شده است ، ویژگی های خاصی را به عنوان غیرفعال یا نامرئی علامت گذاری کنید.
به عنوان مثال ، اگر می خواستید ویژگی بولی A برای پنهان کردن ویژگی متن B:
ثابت بول (Obs_properties_t PPTS, Obs_property_t *پ, OBS_DATA_T *) بول = OBS_DATA_GET_BOOL(تنظیمات, "Setting_a") ؛ پ = Obs_properties_getPPTS, "setting_b") ؛ OBS_PROPERTY_SET_ENABLEDپ, فعال) ؛ /* برای به روزرسانی ابزارک های خاصیت ، نادرست برگردید ؛ [. ] ثابت Obs_properties_t my_source_properties(خالی *) Obs_properties_t *PPTS = Obs_Properties_Create() ؛ Obs_property_t *پ؛ پ Obs_properties_add_boolPPTS, "Setting_a", ()) ؛ Obs_property_set_modified_callbackپ, setting_a_modified) ؛ Obs_properties_add_text(PPTS, "setting_b", OBS_MODULE_TEXT("SettingB"), Obs_text_default برگشت PPTS؛
بومی سازی
به طور معمول ، بیشتر افزونه هایی که با Studio Obs Studio همراه هستند از یک روش محلی سازی فایل ساده استفاده می کنند ، جایی که هر پرونده یک زبان متفاوت است. هنگام استفاده از این روش ، از ماکرو OBS_MODULE_USE_DEFAULT_LOCALE () استفاده می شود که به طور خودکار داده های محلی را بدون هیچ تلاشی اضافی در بخشی از افزونه بارگیری و از بین می برد. سپس تابع OBS_MODULE_TEXT () (که به طور خودکار توسط Libobs/MODULE OBS به عنوان خارجی اعلام می شود.ح) در صورت نیاز به جستجوی متن استفاده می شود.
دو صادرات ماژول مورد استفاده برای بارگذاری/از بین بردن محل وجود دارد: صادرات OBS_MODULE_SET_LOCALE () ، و EXPORT OBS_MODULE_FREE_LOCALE (). صادرات OBS_MODULE_SET_LOCALE () توسط libobs برای تنظیم زبان فعلی فراخوانی می شود ، و سپس صادرات OBS_MODULE_FREE_LOCALE () توسط libobs در مورد تخریب ماژول خوانده می شود. اگر می خواهید یک اجرای محلی محلی را برای افزونه خود پیاده سازی کنید ، می خواهید این صادرات را به همراه OBS_MODULE_TEXT () خارج کنید به جای تکیه بر ماکرو OBS_MODULE_USE_DEFAULT_LOCALE ().
© کپی رایت 2017-2023 ، لاین بیلی.
راهنمای افزونه ها
Obs Studio از افزونه های مختلفی پشتیبانی می کند که انواع جدیدی از منابع ، فیلترها و ویژگی ها را ارائه می دهند. برخی از افزونه ها همچنین به Obs Studio اجازه می دهند تا با انواع خاصی از سخت افزار مانند عرشه جریان Elgato ارتباط برقرار کنند.
برخی از افزونه ها از طریق Flathub نیز در دسترس کاربران لینوکس قرار می گیرند.
سازگاری
بیشتر افزونه ها برای استفاده در تمام سیستم عامل هایی که Obs Studio در دسترس است ، قابل استفاده هستند. با این حال ، موارد خاصی وجود دارد که یک افزونه ممکن است با کپی شما از استودیو OBS سازگار نباشد:
- .اشمیه.
- این افزونه برای همان معماری در دسترس نیست (من.اشمیه. x86_64 ، نه arm64)
- این افزونه برای نسخه Obs Studio که از آن استفاده می کنید به روز نشده است
.0 ، به لیست سازگاری افزونه Obs Studio 28 مراجعه کنید.
افزونه ها را نصب یا حذف کنید
بسیاری از محبوب ترین افزونه های Obs Studio همراه با نصب کننده ها هستند. به طور کلی ، آنها افزونه ها را به مکان های ذکر شده در زیر نصب می کنند.
. .
پنجره ها (تمام کاربران)
پنجره ها
(افزونه های 32 بیتی میراث ؛ Obs Studio 27.2.4 و فقط قبلی)ج: \ فایل های برنامه \ Obs-Studio \ Obs-Plugins \ 32bit
پنجره ها (تنها کاربر)
٪ AppData ٪ \ Obs-Studio \ Obs-Plugins
سیستم عامل مک
~/کتابخانه/پشتیبانی برنامه/Obs-Studio/افزونه ها
.پیکربندی/Obs-Studio/Plugins
لینوکس
(flatpak)افزونه ها را با استفاده از Flatpak نصب کنید
اگر Obs Studio را در یک مکان سفارشی نصب کنید یا از حالت قابل حمل استفاده کنید ، باید پوشه هدف نصب را به مکان سفارشی خود تغییر دهید داده ها/افزونه ها .
فهرست مطالب
- libobs/obs.ح – هدر اصلی libobs.