ปลั๊กอิน – Obs Studio 29.1.3 เอกสารคู่มือปลั๊กอิน | โอหัง
คู่มือปลั๊กอิน
Contents
ปลั๊กอิน
ฟังก์ชั่นที่กำหนดเองเกือบทั้งหมดจะถูกเพิ่มผ่านโมดูลปลั๊กอินซึ่งโดยทั่วไปจะเป็นไลบรารีหรือสคริปต์แบบไดนามิก. .
ปลั๊กอินสามารถใช้แหล่งที่มาเอาต์พุตตัวเข้ารหัสและบริการ.
เขียนปลั๊กอินแรกของคุณ? เรามีปลั๊กอินเทมเพลตพื้นฐานเพื่อให้คุณเริ่มต้น.
ส่วนหัวของโมดูลปลั๊กอิน
- ..
- libobs/obs..
- .
- libobs/obsput-output.H – ใช้สำหรับการใช้เอาต์พุตในโมดูลปลั๊กอิน
- .
- libobs/obs-service.H – ใช้สำหรับการใช้บริการในโมดูลปลั๊กอิน
- .
- libobs/obs-properties.H – ใช้สำหรับการสร้างคุณสมบัติสำหรับวัตถุ libobs
- libobs/กราฟิก/กราฟิก.
โครงสร้างไดเรกทอรีทั่วไปและ cmakelists.
ไฟล์ต้นฉบับวิธีทั่วไปคือการมีไฟล์หนึ่งไฟล์สำหรับการเริ่มต้นปลั๊กอินและจากนั้นไฟล์เฉพาะสำหรับแต่ละวัตถุที่คุณกำลังใช้งาน. ตัวอย่างเช่นหากคุณจะสร้างปลั๊กอินที่เรียกว่า ‘my-plugin’ คุณจะมีบางอย่างเช่น my-plugin..C สำหรับคำจำกัดความของแหล่งที่มาที่กำหนดเองเอาต์พุตของฉัน.C สำหรับคำจำกัดความของผลลัพธ์ที่กำหนดเอง ฯลฯ.
นี่คือตัวอย่างของโครงสร้างไดเรกทอรีทั่วไปสำหรับโมดูลปลั๊กอินดั้งเดิม:
ของฉัน-เสียบเข้าไป/สถานที่-เรา.อินนิ -.txt ของฉัน-/ของฉัน-.ค -/ของฉัน-แหล่งที่มา. -เสียบเข้าไป/-เอาท์พุท.ค ของฉัน-เสียบเข้าไป/ของฉัน-.ค ของฉัน-เสียบเข้าไป/ของฉัน-.
นี่จะเป็นตัวอย่างของ cmakelists ทั่วไป.
.ชุด txt (my-plugin) ชุด (my-plugin_sources my-plugin.C แหล่งที่มาของฉัน..c ของฉันเข้ารหัส.C บริการของฉัน.
การเริ่มต้นปลั๊กอินดั้งเดิม
. . ในฟังก์ชั่น obs_module_load () ของคุณจากนั้นคุณลงทะเบียนแหล่งที่มาที่กำหนดเองเอาต์พุตตัวเข้ารหัสหรือบริการใด ๆ ของคุณ. ดูการอ้างอิงโมดูล API สำหรับข้อมูลเพิ่มเติม.
ต่อไปนี้เป็นตัวอย่างของ my-plugin.C ซึ่งจะลงทะเบียนวัตถุหนึ่งชนิดของแต่ละประเภท:
. / * กำหนดฟังก์ชั่นทั่วไป (จำเป็น) */ obs_declare_module() / * ใช้สถานที่ทั่วไปที่ใช้ INI (ไม่บังคับ) */ obs_module_use_default_locale("My-Plugin", ) ภายนอก my_source /* กำหนดไว้ในแหล่งข้อมูลของฉัน. โครงสร้าง obs_output_info ; /* กำหนดไว้ในเอาต์พุตของฉัน.ค */ my_encoder . ภายนอก obs_service_info my_service .ค */ บูล (โมฆะ (my_source); obs_register_output(&my_output ( obs_register_service(); กลับ >
แหล่งที่มา
แหล่งที่มาใช้ในการแสดงวิดีโอและ/หรือเสียงบนสตรีม. สิ่งต่าง ๆ เช่นการจับภาพการแสดง/เกม/เสียงเล่นวิดีโอแสดงภาพหรือเล่นเสียง. . .ไฟล์ H เป็นส่วนหัวเฉพาะสำหรับการใช้งานแหล่งที่มา. ดูการอ้างอิง API แหล่งที่มา (obs_source_t) สำหรับข้อมูลเพิ่มเติม.
ตัวอย่างเช่นในการใช้วัตถุต้นทางคุณต้องกำหนดโครงสร้าง obs_source_info และกรอกข้อมูลและการโทรกลับที่เกี่ยวข้องกับแหล่งที่มาของคุณ:
/* แหล่งที่มาของฉัน.ค */ [. obs_source_info . "my_source", .พิมพ์ = = obs_source_type_input, .output_flags = = obs_source_video, .get_name my_source_name, .สร้าง = = my_source_create, .ทำลาย = = , .อัปเดต my_source_update, . = = my_source_render, .get_width = = , .get_height >;
.c คุณจะเรียก obs_register_source () ใน obs_module_load () เพื่อลงทะเบียนแหล่งที่มาด้วย libobs.
.ค */ [. ภายนอก โครงสร้าง /* กำหนดไว้ในแหล่งข้อมูลของฉัน.ค */ บูล obs_module_load) (&); [. กลับ ;
ตัวอย่างง่าย ๆ ของแหล่งที่มา:
- แหล่งวิดีโอแบบซิงโครนัส: แหล่งภาพ
- แหล่งวิดีโอแบบอะซิงโครนัส: แหล่งทดสอบพื้นผิวแบบสุ่ม
- แหล่งเสียง: แหล่งทดสอบคลื่นไซน์
- ตัวกรองเสียง: ตัวกรองเสียงที่ได้รับ
เอาท์พุท
เอาต์พุตช่วยให้ความสามารถในการส่งออกเสียง/วิดีโอในปัจจุบัน. การสตรีมและการบันทึกเป็นสองตัวอย่างทั่วไปของเอาต์พุต แต่ไม่ใช่ประเภทของเอาต์พุตเพียงประเภทเดียว. เอาต์พุตสามารถรับข้อมูลดิบหรือรับข้อมูลที่เข้ารหัสได้. libobs/obsput-output.ไฟล์ H เป็นส่วนหัวเฉพาะสำหรับการใช้งานเอาต์พุต. ดูการอ้างอิง API เอาต์พุต (obs_output_t) สำหรับข้อมูลเพิ่มเติม.
ตัวอย่างเช่นในการใช้วัตถุเอาต์พุตคุณต้องกำหนดโครงสร้าง obs_output_info และกรอกข้อมูลและการโทรกลับที่เกี่ยวข้องกับผลลัพธ์ของคุณ:
/* เอาต์พุตของฉัน.ค */ [. ] obs_output_info my_output . = = , .ธง = = obs_output_av obs_output_encoded, . = = , .สร้าง = = , .ทำลาย = = my_output_destroy, .เริ่ม = = , .หยุด = = my_output_stop, .encoded_packet = = my_output_data, . = = my_output_total_bytes, .ENCODED_VIDEO_CODECS = = "H264", . "AAC" >;
จากนั้นใน my-plugin.c คุณจะเรียก obs_register_output () ใน obs_module_load () เพื่อลงทะเบียนเอาต์พุตด้วย libobs.
/* my-plugin. [. ] ภายนอก โครงสร้าง obs_output_info my_output . obs_module_loadโมฆะ) &my_output [. กลับ จริง; >
ตัวอย่างของผลลัพธ์:
- เอาต์พุตวิดีโอ/เสียงที่เข้ารหัส:
- เอาต์พุต ffmpeg muxer
- เอาต์พุต FFMPEG
ตัวเข้ารหัสคือการใช้งานเฉพาะของการเข้ารหัสวิดีโอ/เสียงซึ่งใช้กับเอาต์พุตที่ใช้ encoders. x264, nvenc, quicksync เป็นตัวอย่างของการใช้งาน encoder. .ไฟล์ H เป็นส่วนหัวเฉพาะสำหรับการใช้งาน encoders. ดูการอ้างอิง ENCODER API (OBS_ENCODER_T) สำหรับข้อมูลเพิ่มเติม.
ตัวอย่างเช่นในการใช้วัตถุเข้ารหัสคุณต้องกำหนดโครงสร้าง obs_encoder_info และกรอกข้อมูลและการเรียกกลับที่เกี่ยวข้องกับตัวเข้ารหัสของคุณ:
/* my-encoder.ค */ . ] โครงสร้าง my_encoder_encoder = = .รหัสประจำตัว = = "my_encoder", . = = obs_encoder_video, .ตัวแปลงสัญญาณ = = , .get_name = = my_encoder_name, . = = my_encoder_create, .ทำลาย = = my_encoder_destroy, .เข้ารหัส = = my_encoder_encode, . , .get_extra_data = = , .get_sei_data my_encoder_sei, .get_video_info = =
จากนั้นใน my-plugin..
/* my-plugin.ค */ [. ] ภายนอก โครงสร้าง obs_encoder_info my_encoder; .ค */ obs_module_load(โมฆะ) obs_register_encoder(&my_encoder); [. กลับ จริง; >
โน๊ตสำคัญ: การตั้งค่าตัวเข้ารหัสในปัจจุบันมีค่าการตั้งค่าทั่วไปที่คาดหวังไว้เล็กน้อยซึ่งควรมีการตั้งชื่อที่เฉพาะเจาะจง:
- “ บิตเรต” – ค่านี้ควรใช้สำหรับทั้งวิดีโอและเครื่องเข้ารหัสเสียง: บิตเรตในกิโลบิต.
- “ rate_control” – นี่คือการตั้งค่าที่ใช้สำหรับการเข้ารหัสวิดีโอ. โดยทั่วไปคาดว่าจะมีการควบคุมอัตรา“ CBR” อย่างน้อย. การควบคุมอัตราทั่วไปอื่น ๆ คือ“ VBR”,“ CQP”.
- “ keyint_sec” – . (หมายเหตุผู้แต่ง: สิ่งนี้น่าจะเป็น “คำปราศรัย” ในเฟรม.)
ตัวอย่างของ encoders:
- เข้ารหัสวิดีโอ:
- ตัวเข้ารหัส ffmpeg nvenc
- ตัวเข้ารหัส QuickSync
บริการ
บริการคือการใช้งานที่กำหนดเองของบริการสตรีมมิ่งซึ่งใช้กับเอาต์พุตที่สตรีม. ตัวอย่างเช่นคุณอาจมีการใช้งานที่กำหนดเองสำหรับการสตรีมไปยัง Twitch และอีกอันสำหรับ YouTube เพื่อให้สามารถเข้าสู่ระบบและใช้ APIs เพื่อทำสิ่งต่าง ๆ เช่นรับเซิร์ฟเวอร์ RTMP หรือควบคุมช่อง. libobs/obs-service.ไฟล์ H เป็นส่วนหัวเฉพาะสำหรับการใช้บริการ. ดูการอ้างอิงบริการ 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-plugin.c คุณจะเรียก obs_register_service () ใน obs_module_load () เพื่อลงทะเบียนบริการด้วย libobs.
.ค */ [. ภายนอก obs_service_info my_service; /* กำหนดไว้ในบริการของฉัน. บูล ( obs_register_service(&my_service); [. กลับ ; >
วัตถุบริการที่มีอยู่เพียงสองชิ้นเท่านั้นคือ “บริการ RTMP ทั่วไป” และ “บริการ RTMP ที่กำหนดเอง” ในปลั๊กอิน/RTMP-Services
การตั้งค่า
การตั้งค่า (ดู libobs/obs-data.h) ใช้เพื่อรับหรือตั้งค่าข้อมูลการตั้งค่าโดยทั่วไปที่เกี่ยวข้องกับวัตถุ libobs และสามารถบันทึกและโหลดผ่านข้อความ JSON. ดูการอ้างอิงข้อมูล API (obs_data_t) สำหรับข้อมูลเพิ่มเติม.
ที่ obs_data_t เทียบเท่ากับวัตถุ JSON ซึ่งเป็นตารางสตริงของวัตถุย่อยและ obs_data_array_t ใช้ในทำนองเดียวกันเพื่อเก็บอาร์เรย์ของ obs_data_t .
เพื่อสร้างไฟล์ 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_t *, const ถ่าน ชื่อ, const ถ่าน *วาล์ว ส่งออก โมฆะ obs_data_set_int(obs_data_t *, const ถ่าน *ชื่อ, ยาว ยาว วาล์ว ส่งออก โมฆะ *ข้อมูล, const ถ่าน *ชื่อ, วาล์ว); ส่งออก โมฆะ obs_data_set_bool( *ข้อมูล, const ถ่าน *ชื่อ, บูล วาล์ว); ส่งออก โมฆะ obs_data_set_obj(obs_data_t *ข้อมูล, const ถ่าน *ชื่อ, obs_data_t *OBJ ส่งออก โมฆะ obs_data_set_array(obs_data_t *ข้อมูล, const ถ่าน *ชื่อ, obs_data_array_t *อาร์เรย์);
ในทำนองเดียวกันเพื่อรับค่าจากไฟล์ obs_data_t วัตถุคุณใช้หนึ่งในฟังก์ชั่นต่อไปนี้:
/ * รับฟังก์ชั่น */ ส่งออก const ถ่าน *obs_data_get_string( *ข้อมูล, const ); ส่งออก ยาว ยาว obs_data_get_int( *, const ถ่าน * ส่งออก สองเท่า obs_data_get_doubleobs_data_t *ข้อมูล, const *ชื่อ); ส่งออก บูล obs_data_get_bool(obs_data_t *ข้อมูล, const ถ่าน *ชื่อ); ส่งออก obs_data_get_obj( , const ถ่าน *ชื่อ); ส่งออก obs_data_array_t *(obs_data_t ข้อมูล, ถ่าน *ชื่อ
obs_data_t วัตถุยังสามารถตั้งค่าเริ่มต้น. สิ่งนี้ช่วยให้ความสามารถในการควบคุมสิ่งที่ส่งคืนหากไม่มีค่าที่กำหนดให้กับสตริงเฉพาะใน obs_data_t . วัตถุ Libobs แต่ละชิ้นมี get_defaults การโทรกลับซึ่งอนุญาตให้ตั้งค่าการตั้งค่าเริ่มต้นสำหรับวัตถุในการสร้าง.
ฟังก์ชั่นเหล่านี้ควบคุมค่าเริ่มต้นมีดังนี้:
. */ ส่งออก โมฆะ obs_data_set_default_string(obs_data_t ข้อมูล, const *, const ถ่าน *วาล์ว); ส่งออก โมฆะ obs_data_set_default_int(obs_data_t *ข้อมูล, const ถ่าน *, วาล์ว); ส่งออก โมฆะ (obs_data_t *, const ถ่าน *ชื่อ, สองเท่า วาล์ว obs_data_set_default_bool( *ข้อมูล, const ถ่าน *ชื่อ, บูล วาล์ว); ส่งออก โมฆะ obs_data_set_default_obj(obs_data_t *ข้อมูล, const ถ่าน *ชื่อ, obs_data_t *OBJ);
คุณสมบัติ
คุณสมบัติ (ดู libobs/obs-properties.h) ใช้เพื่อสร้างอินเทอร์เฟซผู้ใช้โดยอัตโนมัติเพื่อแก้ไขการตั้งค่าสำหรับวัตถุ libobs (ถ้าต้องการ). แต่ละวัตถุ libobs มี get_properties การโทรกลับซึ่งใช้ในการสร้างคุณสมบัติ. คุณสมบัติ API กำหนดคุณสมบัติเฉพาะที่เชื่อมโยงกับการตั้งค่าของวัตถุและส่วนหน้าใช้คุณสมบัติเหล่านั้นเพื่อสร้างวิดเจ็ตเพื่อให้ผู้ใช้สามารถปรับเปลี่ยนการตั้งค่า. ตัวอย่างเช่นหากคุณมีการตั้งค่าบูลีนคุณจะใช้ obs_properties_add_bool () เพื่อให้ผู้ใช้สามารถเปลี่ยนการตั้งค่านั้นได้. ดูการอ้างอิงคุณสมบัติ API (obs_properties_t) สำหรับข้อมูลเพิ่มเติม.
ตัวอย่างนี้:
คงที่ obs_properties_t *my_source_properties(โมฆะ *) obs_properties_t ppts obs_properties_create(); obs_properties_add_bool(ppts, "my_bool", obs_module_text("MyBool")); unused_parameter(ข้อมูล); ppts; > [. โครงสร้าง obs_source_info my_source .get_properties = = my_source_properties, [. ]
พารามิเตอร์เป็นข้อมูลของวัตถุหากมีวัตถุ. โดยทั่วไปจะไม่ได้ใช้และอาจไม่ควรใช้ถ้าเป็นไปได้. มันอาจเป็นโมฆะหากคุณสมบัติถูกดึงโดยไม่มีวัตถุที่เกี่ยวข้อง.
คุณสมบัติสามารถแก้ไขได้ขึ้นอยู่กับการตั้งค่าที่แสดง. .
ตัวอย่างเช่นหากคุณต้องการคุณสมบัติบูลีน A เพื่อซ่อนคุณสมบัติข้อความ b:
คงที่ (obs_properties_t *, obs_property_t *, obs_data_t *การตั้งค่า) บูล เปิดใช้งาน = = (การตั้งค่า, "SETT_A"); P = = obs_properties_get(ppts, "SETET_B"); obs_property_set_enabled(P, เปิดใช้งาน); /* ส่งคืนจริงเพื่ออัปเดตวิดเจ็ตคุณสมบัติเท็จ มิฉะนั้น */ กลับ จริง > [. ] คงที่ obs_properties_t *my_source_properties(โมฆะ *ข้อมูล) *ppts (); obs_property_t *P; P (ppts, "SETT_A", obs_module_text("settia" obs_property_set_modified_callback(P, SETET_A_MODIFIED); obs_properties_add_text(ppts, "SETET_B", "settb", obs_text_default กลับ ppts; >
การแปลเป็นภาษาท้องถิ่น
โดยทั่วไปแล้วปลั๊กอินส่วนใหญ่ที่รวมกับ Obs Studio จะใช้วิธีการแปลภาษาแบบ ini-file อย่างง่ายซึ่งแต่ละไฟล์เป็นภาษาที่แตกต่างกัน. เมื่อใช้วิธีนี้ Macro OBS_MODULE_USE_DEFAULT_LOCALE () จะใช้มาโครซึ่งจะโหลด/ทำลายข้อมูลสถานที่โดยอัตโนมัติโดยไม่ต้องใช้ความพยายามพิเศษในส่วนของปลั๊กอินโดยอัตโนมัติ. จากนั้นฟังก์ชั่น obs_module_text () (ซึ่งประกาศโดยอัตโนมัติเป็นภายนอกโดย libobs/obs-module.h) ใช้เมื่อต้องการการค้นหาข้อความ.
มีการส่งออกสองโมดูลที่ใช้ในการโหลด/ทำลายตำแหน่ง: การส่งออก obs_module_set_locale () และการส่งออก obs_module_free_locale (). . หากคุณต้องการใช้งานการใช้งานที่ตั้งเองสำหรับปลั๊กอินของคุณคุณต้องการกำหนดการส่งออกเหล่านี้พร้อมกับ OBS_MODULE_TEXT () ภายนอกตัวเองแทนที่จะพึ่งพา Macro Obs_Module_USE_DEFAULT_LOCALE () มาโคร.
©ลิขสิทธิ์ 2017-2023, Lain Bailey.
OBS Studio รองรับปลั๊กอินที่หลากหลายที่ให้แหล่งข้อมูลรูปแบบใหม่ตัวกรองและคุณสมบัติ. ปลั๊กอินบางตัวยังอนุญาตให้ Obs Studio สื่อสารกับฮาร์ดแวร์บางชนิดเช่นดาดฟ้า Elgato Stream.
ปลั๊กอินบางตัวยังมีให้สำหรับผู้ใช้ Linux ผ่าน Flathub.
ความเข้ากันได้
ปลั๊กอินส่วนใหญ่ได้รับการพัฒนาให้สามารถใช้งานได้ในทุกแพลตฟอร์มที่มี OBS Studio. อย่างไรก็ตามมีบางกรณีที่ปลั๊กอินอาจไม่สามารถใช้งานได้กับสำเนาของคุณในสตูดิโอของคุณ:
- ปลั๊กอินมีให้เฉพาะในแพลตฟอร์มเดียว (i.อี. Windows ไม่ใช่ macOS)
- ปลั๊กอินไม่สามารถใช้ได้สำหรับสถาปัตยกรรมเดียวกัน (i.. x86_64 ไม่ใช่ arm64)
- ปลั๊กอินยังไม่ได้รับการอัปเดตสำหรับ Obs Studio เวอร์ชันที่คุณใช้
เพื่อดูว่าปลั๊กอินมีอะไรบ้างสำหรับแพลตฟอร์มบน Obs Studio 28..
ปลั๊กอินที่ได้รับความนิยมมากที่สุดของ Obs Studio จำนวนมากมาพร้อมกับผู้ติดตั้ง. .
หากคุณต้องการติดตั้งปลั๊กอินด้วยตนเองไฟล์ที่เกี่ยวข้องอาจต้องไปในโฟลเดอร์เหล่านี้. โปรดตรวจสอบเอกสารของปลั๊กอินก่อน.
(ผู้ใช้ทั้งหมด)
C: \ program files \ obs-studio \ obs-plugins \ 64 บิต
หน้าต่าง
.2.4 และก่อนเท่านั้น)C: \ program files \ obs-studio \ obs-plugins \ 32bit
หน้าต่าง (ผู้ใช้คนเดียว)
%appdata%\ obs-studio \ obs-plugins
แม็กอส
~/.config/obs-studio/ปลั๊กอิน
(Flatpak)หากคุณติดตั้ง Obs Studio ไปยังตำแหน่งที่กำหนดเองหรือใช้โหมดพกพาคุณจะต้องเปลี่ยนโฟลเดอร์เป้าหมายของตัวติดตั้งเป็นตำแหน่งที่กำหนดเองของคุณ โฟลเดอร์.
สารบัญ
- libobs/obs..