본문 바로가기
잡(job)기술/ffmpeg 라이브러리

remuxing.c 를 c++로 wrapping하기

by 무니이구나 2022. 3. 30.

이번 글은 굉장히 간단할 것 같다. C 언어로 작성된 내용을 C++에서 링크에서 사용하는 것은 다른 언어에 비해 아주 쉽다. 지난 번 글에서 이용한 remuxing.c 에 있는 main 함수를 C++에서 사용할 수 있도록 작업을 진행한다.

https://craftsmanship.tistory.com/108

 

remuxing.c 빌드하기

영상 혹은 음성 데이터를 처리하는 업무를 종종 하게 된다. ffmpeg 라이브러리 도움을 많이 받는다. 특정 포멧의 미디어 데이터를 입력으로 해서 다른 포멧의 미디어 데이터를 만들어내야 하는 기

craftsmanship.tistory.com

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

 

GitHub - moonyl/rtsp-to-web-live

Contribute to moonyl/rtsp-to-web-live development by creating an account on GitHub.

github.com

 

'잡(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