이번 글은 굉장히 간단할 것 같다. C 언어로 작성된 내용을 C++에서 링크에서 사용하는 것은 다른 언어에 비해 아주 쉽다. 지난 번 글에서 이용한 remuxing.c 에 있는 main 함수를 C++에서 사용할 수 있도록 작업을 진행한다.
https://craftsmanship.tistory.com/108
C 영역에서의 작업
우선, C의 main함수를 C++에서 링크할 수 있도록 이름을 변경한다.
int main(int argc, char **argv) -> int remux(int argc, char **argv)
remux() 함수 선언이 필요하므로, remuxing.h를 작성한다.
#pragma once
int remux(int argc, char **argv);
C++ 영역에서의 작업
main.cpp 를 만들고, 여기에서 remux() 를 호출한다.
extern "C" {
#include "remuxing.h"
}
int main(int argc, char* argv[]) {
return remux(argc, argv);
}
여기에서 중요한 것이 extern "C" 영역 내에 인클루드를 하는 것이다. C와 C++의 컴파일했을 때의 심볼 네이밍 규칙이 달라서, C++에서 C의 심볼을 알아먹도록 만드려면 이 작업이 필요하다.
cmake에 추가
파일 확장자에 따라서 컴파일러가 자동으로 구동이 되기 때문에 추가한 파일에 대한 정보만 CMakeLists.txt 에 추가해주면 된다.
cmake_minimum_required(VERSION 3.0)
project(remuxing)
set(CMAKE_CXX_STANDARD 17)
find_package(FFMPEG)
add_executable(remuxing remuxing.c main.cpp remuxing.h)
target_include_directories(remuxing PRIVATE ${FFMPEG_INCLUDE_DIRS})
target_link_libraries(remuxing PRIVATE ${FFMPEG_LIBRARIES})
소스 저장소
작성한 코드는 깃헙에 업데이트한다.
https://github.com/moonyl/rtsp-to-web-live/tree/wrapping
'잡(job)기술 > ffmpeg 라이브러리' 카테고리의 다른 글
Remux 클래스로 전환 (0) | 2022.04.06 |
---|---|
명령 라인 처리 옮기기 (0) | 2022.04.01 |
remuxing.c 빌드하기 (0) | 2022.03.28 |
av_frame_free에 대한 고찰 (0) | 2018.03.13 |
Audio sample과 frame (0) | 2018.03.13 |