플러그인 – OBS Studio 29.1.3 문서화, 플러그인 가이드 | OBS
Contents
리눅스
(flatpak)
. 오디오/비디오 캡처 및/또는 출력, 녹음, RTMP 스트림으로의 출력, x264의 인코딩 기능은 플러그인 모듈을 통해 달성되는 모든 것의 예입니다.
플러그인은 소스, 출력, 인코더 및 서비스를 구현할 수 있습니다.
첫 번째 플러그인을 작성합니다? 우리는 당신을 시작하기 위해 기본 템플릿 플러그인을 제공합니다.
이들은 플러그인에서 일반적으로 사용하는 주목할만한 헤더입니다
- ..
- libobs/obs.H – 주요 libobs 헤더. 이 파일에는 다음 파일이 자동으로 포함됩니다
- .H – 플러그인 모듈에서 소스를 구현하는 데 사용됩니다
- .H – 플러그인 모듈에서 출력 구현에 사용됩니다
- libobs/obs-encoder.H – 플러그인 모듈에서 인코더 구현에 사용됩니다
- libobs/obs-service.
- .H – libobs 객체의 설정 관리에 사용됩니다
- libobs/obs-properties.H – libobs 객체의 특성을 생성하는 데 사용됩니다
- libobs/그래픽/그래픽.H – 그래픽 렌더링에 사용됩니다
공통 디렉토리 구조 및 cmakelist.txt
소스 파일이 구성되는 공통 방법은 플러그인 초기화를위한 하나의 파일을 갖는 것입니다. 그런 다음 구현중인 각 개별 개체에 대한 특정 파일. 예를 들어 ‘My-Plugin’이라는 플러그인을 만들려면 My-Plugin과 같은 것이 있습니다.C 플러그인 초기화가 완료된 경우 My-Source.C 사용자 정의 소스의 정의, my-output의 정의.C 사용자 정의 출력의 정의 등.
이것은 기본 플러그인 모듈의 공통 디렉토리 구조의 예입니다
나의-플러그인/데이터/장소/en-우리를.이니 나의-플러그인/cmakelists.txt -/나의-플러그인.씨 나의-플러그인/나의-.씨 나의-플러그인/-.씨 나의-/나의-인코더.씨 나의-플러그인/나의-서비스.씨
이것은 일반적인 cmakelists의 예일 것입니다.이 파일과 관련된 TXT 파일 :
# my-plugin/cmakelists.txt project (my-plugin) 세트 (my -plugin_sources my-plugin..C 내 출력...c) Add_library (my-plugin module $) target_link_libraries (my-plugin libobs) install_obs_plugin_with_data (my-plugin data)
기본 플러그인 모듈을 만들려면 Libobs/Obs-Module을 포함해야합니다. . OBS_MODULE_LOAD () 함수에서 사용자 정의 소스, 출력, 인코더 또는 서비스 등록. 자세한 내용은 모듈 API 참조를 참조하십시오.
다음은 My-Plugin의 예입니다.
/* 마이 플루인.씨 */ / * 공통 함수를 정의합니다 (필수) */ OBS_DECLARE_MODULE() / * 일반적인 INI 기반 로케일 (선택 사항) */ OBS_MODULE_USE_DEFAULT_LOCALE(, "en-us")) 통근자 구조 /* 내 소스에서 정의되었습니다.씨 */ 구조 OBS_OUTPUT_INFO ; /* 내 출력에 정의되었습니다.씨 */ 통근자 구조 OBS_ENCODER_INFO ; /* 내 인코더에 정의되었습니다.씨 */ 통근자 구조 OBS_SERVICE_INFO my_service; /* 내 서비스에 정의되었습니다.씨 */ 부 OBS_MODULE_LOAD)) &이었다my_source); OBS_REGISTER_OUTPUT(&이었다); OBS_REGISTER_ENCODER&이었다 OBS_REGISTER_SERVICE(my_service); 반품 ; >
소스는 비디오 및/또는 오디오를 스트림에 렌더링하는 데 사용됩니다. 디스플레이/게임/오디오 캡처, 비디오 재생, 이미지 표시 또는 오디오 재생과 같은 것. 소스는 오디오 및 비디오 필터뿐만 아니라 전환을 구현하는 데 사용될 수도 있습니다. .H 파일은 소스 구현을위한 전용 헤더입니다. 자세한 내용은 소스 API 참조 (OBS_SOURCE_T)를 참조하십시오.
예를 들어 소스 개체를 구현하려면 OBS_SOURCE_INFO 구조를 정의하고 소스와 관련된 정보 및 콜백으로 작성해야합니다
/* 내 소스.씨 */ [의 뜻. ]] 구조 OBS_SORCE_INFO my_source .ID = "my_source", .유형 OBS_SORCE_TYPE_INPUT, . , . = my_source_name, . = , .파괴하다 = my_source_destroy, . = , .video_render my_source_render, .get_width , .get_height =
.C, OBS_MODULE_LOAD ()에서 OBS_REGISTER_SOURCE ()에게 전화하여 소스를 libobs로 등록합니다.
. . ]] OBS_SORCE_INFO my_source /* 내 소스에서 정의되었습니다. 부 OBS_MODULE_LOAD()) OBS_REGISTER_SOURCE(&이었다my_source [의 뜻. ]] 반품 진실; >
출처의 간단한 예 :
- 동기 비디오 출처 : 이미지 소스
- 비동기 비디오 출처 : 랜덤 텍스처 테스트 소스
- 오디오 소스 : 사인 웨이브 테스트 소스
- 비디오 필터 : 테스트 비디오 필터
- 오디오 필터 : 게인 오디오 필터
출력
. . . libobs/Obs-Opput.. .
예를 들어 출력 객체를 구현하려면 OBS_OUTPUT_INFO 구조를 정의하고 출력과 관련된 정보 및 콜백으로 작성해야합니다
/* 내 출력. [의 뜻. ]] 구조 my_output .ID = , .깃발 = OBS_OUTPUT_ENCODED, . my_output_name, .만들다 = my_output_create, . = my_output_destroy, .시작 = my_output_start, .멈추다 = , . = my_output_data, .get_total_bytes my_output_total_bytes, .encoded_video_codecs , . =
..
/* 마이 플루인. . 통근자 OBS_OUTPUT_INFO ; .씨 */ 부 OBS_MODULE_LOAD무효의)) &이었다my_output); [의 뜻. ]] 반품 진실;
-
- RTMP 스트림 출력
인코더
. x264, Nvenc, Quicksync는 인코더 구현의 예입니다. libobs/obs-encoder.H 파일은 인코더 구현을위한 전용 헤더입니다. .
예를 들어, 인코더 객체를 구현하려면 OBS_ENCODER_INFO 구조를 정의하고 인코더와 관련된 정보 및 콜백으로 작성해야합니다
/* 마이 코더. . ]] 구조 my_encoder_encoder = .ID = "my_encoder", . , . , . my_encoder_name, .만들다 = , . = my_encoder_destroy, .인코딩 = my_encoder_encode, .업데이트 = , .get_extra_data my_encoder_extra_data, .get_sei_data = my_encoder_sei, .get_video_info = my_encoder_video_info >;
..
.씨 */ . 통근자 구조 OBS_ENCODER_INFO ; .씨 */ 부 무효의)) OBS_REGISTER_ENCODER . 진실; >
중요 사항:
- “비트 레이트” – .
- “rate_control” – 비디오 인코더에 사용되는 설정입니다. . 다른 일반적인 속도 컨트롤은 “VBR”, “CQP”입니다.
- “keyint_sec” – 비디오 인코더의 경우 키 프레임 간격 값을 몇 초 만에 또는 가장 가까운 근사치를 설정합니다. (저자의 메모 : 이것은 프레임에서 “keyint”였을 것입니다.
인코더의 예 :
- 비디오 인코더 :
- X264 인코더
- FFMPEG NVENC 인코더
- QuickSync 인코더
. . libobs/obs-service.. .
(저자 주 :이 글을 쓰는 시점에서 서비스 API가 불완전합니다)
. . ]] my_service_service .ID , .get_name = , . , . , . , .업데이트 my_service_update, . = , . my_service_key
..
/* 마이 플루인.씨 */ [의 뜻. 통근자 OBS_SERVICE_INFO ; /* 내 서비스에 정의되었습니다.씨 */ 부 OBS_MODULE_LOAD(무효의 OBS_REGISTER_SERVICE( . >
유일한 두 가지 기존 서비스 객체는 플러그인/rtmp-services의 “공통 RTMP 서비스”및 “사용자 정의 RTMP 서비스”객체입니다
설정
설정 (libobs/obs-data 참조.h) 일반적으로 libobs 객체와 관련된 설정 데이터를 얻거나 설정하는 데 사용되며 JSON 텍스트를 통해 저장 및로드 할 수 있습니다. .
OBS_DATA_T JSON 객체와 동일하며, 여기서 서브 객체의 문자열 테이블과 OBS_DATA_ARRAY_T 비슷하게 배열을 저장하는 데 사용됩니다 JSON 어레이와 유사한 개체 (동일하지는 않지만).
만들기 위해 또는 Object, OBS_DATA_CREATE () 또는 OBS_DATA_ARRAY_CREATE () 함수를 호출합니다. OBS_DATA_T 그리고 객체는 참조 계산되므로 객체가 끝나면 OBS_DATA_RELEASE () 또는 OBS_DATA_ARRAY_RELEASE ()를 호출하여 해당 참조를 해제합니다. 언제든지 또는 객체는 함수에 의해 반환되며, 참조는 증가하므로 매번 해당 참조를 해제해야합니다.
값을 설정합니다 OBS_DATA_T 객체, 다음 기능 중 하나를 사용합니다
/ * 함수 설정 */ 내보내다 무효의 ( , 이름, Const *발); 무효의 ( *, Const 숯 , 긴 긴 내보내다 OBS_DATA_SET_DOUBLE 데이터, Const 숯 , 더블 발 무효의 OBS_DATA_SET_BOOLOBS_DATA_T *데이터, Const 숯 이름, 부 발 무효의 OBS_DATA_SET_OBJOBS_DATA_T , Const 이름, obj 내보내다 무효의 OBS_DATA_SET_ARRAYOBS_DATA_T *, ,
마찬가지로, an에서 값을 얻습니다 OBS_DATA_T
/ * 기능 받기 */ Const 숯 *(OBS_DATA_T 데이터, Const *); 긴 긴 ( 데이터, Const 숯 더블 ( *데이터, Const OBS_DATA_GET_BOOL( , ); OBS_DATA_T OBS_DATA_GET_OBJ(OBS_DATA_T 데이터, 숯 이름); 내보내다 OBS_DATA_ARRAY_T OBS_DATA_T *데이터, Const 이름
OBS_DATA_T . OBS_DATA_T 해당 데이터가 JSON 문자열 또는 JSON 파일에서로드 된 경우 개체. 각 libobs 객체는 또한 a를 가지고 있습니다 get_defaults .
이러한 함수는 기본값이 다음과 같습니다
/* 기본값 함수. 내보내다 OBS_DATA_SET_DEFAULT_STRING( 데이터, Const , Const 숯 *); 무효의 OBS_DATA_SET_DEFAULT_INT , 이름, ); 무효의 데이터, Const *, 더블 ); 내보내다 , , 부 발 (OBS_DATA_T *데이터, Const 숯 이름, OBS_DATA_T *obj
속성
속성 (libobs/obs-properties 참조.. 각 libobs 객체는 다음에 있습니다 get_properties 속성을 생성하는 데 사용되는 콜백. . . .
*무효의 *데이터)) OBS_PROPERTIES_T *ppts = OBS_PROPERTIES_CREATE ppts, "my_bool", OBS_MODULE_TEXT ); 반품 > [의 뜻. ]] 구조 OBS_SORCE_INFO .get_properties my_source_properties, [의 뜻. >;
객체가있는 경우 매개 변수는 객체의 데이터입니다. . 특성이 관련된 물체없이 검색되면 무효 일 수 있습니다.
. .
예를 들어, 부울 속성을 원한다면 A 텍스트 속성을 숨기려고합니다. b :
공전 부 *ppts, *, OBS_DATA_GET_BOOL, ); 피 OBS_PROPERTIES_GET(, , 활성화); 진실; . ]] *my_source_properties *)) *ppts (); OBS_PROPERTY_T *피 , , "Setinga")); OBS_PROPERTY_SET_MODIFIED_CALLBACK피, setting_a_modified , "설정_B", OBS_MODULE_TEXT, OBS_TEXT_DEFAULT); ;
현지화
. 이 메소드를 사용할 때는 플러그인의 일부에 추가 노력없이 로케일 데이터를 자동으로로드/파괴하는 OBS_MODULE_USE_DEFAULT_LOCALE () 매크로가 사용됩니다. .h) 텍스트 조회가 필요할 때 사용됩니다.
로케일을로드/파괴하는 데 사용되는 모듈이 두 가지가 있습니다 : OBS_MODULE_SET_LOCALE () EXPORT 및 OBS_MODULE_FREE_LOCALE () EXPORT. . 플러그인에 대한 사용자 정의 로케일 구현을 구현하려면 OBS_MODULE_SEXT () MACRO에 의존하는 대신 OBS_MODULE_TEXT ()과 함께 이러한 내보내기를 정의하려고합니다.
.
플러그인 가이드
OBS Studio는 새로운 종류의 소스, 필터 및 기능을 제공하는 다양한 플러그인을 지원합니다. 일부 플러그인은 OBS Studio가 Elgato Stream Deck과 같은 특정 종류의 하드웨어와 통신 할 수 있습니다.
.
호환성
대부분의 플러그인은 OBS 스튜디오를 사용할 수있는 모든 플랫폼에서 사용할 수 있도록 개발되었습니다. 그러나 플러그인이 OBS Studio 사본과 호환되지 않는 경우가 있습니다
- 플러그인은 하나의 플랫폼에서만 사용할 수 있습니다 (i.이자형.
- .이자형. x86_64, ARM64가 아님)
- 사용중인 OBS Studio 버전에 대한 플러그인이 업데이트되지 않았습니다
.0, OBS Studio 28 플러그인 호환성 목록 참조.
플러그인을 설치하거나 제거하십시오
OBS Studio의 가장 인기있는 플러그인은 설치자와 함께 제공됩니다. 일반적으로 아래 나열된 위치에 플러그인을 설치합니다.
플러그인을 수동으로 설치 해야하는 경우 관련 파일 이이 폴더로 들어가야 할 것입니다. 먼저 플러그인의 문서를 확인하십시오.
창 (모든 사용자들)
C : \ Program Files \ Obs-Studio \ Obs-Plugins \ 64bit
창
..4 및 사전 만)C : \ Program Files \ Obs-Studio \ Obs-Plugins \ 32bit
창 (단일 사용자)
%AppData%\ Obs-Studio \ Obs-Plugins
~/라이브러리/애플리케이션 지원/Obs-Studio/플러그인
.
FlatPak을 사용하여 플러그인을 설치하십시오
OBS Studio를 사용자 정의 위치에 설치하거나 휴대용 모드를 사용하는 경우 설치 프로그램의 대상 폴더를 사용자 정의 위치로 변경해야합니다 폴더.
목차
- libobs/obs.H – 주요 libobs 헤더. 이 파일에는 다음 파일이 자동으로 포함됩니다