뻘짓

libvpx를 통한 인코딩 예제

극단적으로 간단하게만 작성해본다. 유용하지 않은 예제일 수도 있다.

 

#include <stdio.h>
#include "./vpx_version.h"
#include "vpx/vpx_codec.h"
#include "vpx/vpx_image.h"
#include "vpx/vpx_integer.h"
#include "vpx/vpx_encoder.h"
#include "vpx/vpx_decoder.h"
#include "vpx_ports/msvc.h"
#include "vp9/vp9_iface_common.h"
#include "vp9/vp9_cx_iface.h"
 
int main()
{
    vpx_codec_iface_t* vpx;
    vpx_image_t* vpximg;
    vpx_codec_ctx_t codec;
    vpx_codec_enc_cfg cfg;
    int i = 0;
    int flag;
 
    vpx = vpx_codec_vp9_cx(); /*vp9 컨텍스트 생성*/
    vpx_codec_enc_config_default(vpx, &cfg, 0); /*기본 설정정보 불러오기*/
    /*디테일한 설정 조정*/
    cfg.g_timebase.den = 60;
    cfg.g_w = 1920;
    cfg.g_h = 1080;
    cfg.rc_target_bitrate = 1600;
    vpx_codec_enc_init(&codec, vpx, &cfg, 0); /*설정 정보를 기반으로 코덱 초기화*/
    vpximg = vpx_img_alloc(NULL, VPX_IMG_FMT_I420, 192010804); /*이미지 프레임 할당*/
 
    /*아무것도 들어있지 않은 이미지를 계속 연이어 인코딩 해보자.*/
    while(1){
        if (i % 60 == 0) flag = 1else flag = 0/*60 프레임마다 I 프레임 생성*/
        vpx_codec_encode(&codec, vpximg, i++1, flag, VPX_DL_REALTIME); /*실시간 품질로 인코딩*/
        printf("processed %d frame ...\r",i);
    }
    return 0;
}
cs

 

엄청 느리다. 초당 4-5 프레임 정도 나오는 것 같다.

하드웨어 가속을 받을 수 있는 방법을 알아봐야겠다.

OpenCV를 활용하여 해보고 싶다면, 이 친구의 뻘짓을 참고하자. >> hwan001.tistory.com/82

 

[OpenCV] 노트북 카메라 영상 실시간 전송하기

1. 목적 - [프로젝트> 그룹> 커뮤니케이션] 중 화상 회의/영상 채팅 기술을 구현하기 위한 연습코드 - TCP/IP 연결이 성립된 상태에서 1:1로 실시간 단방향 영상 전송을 구현 2. 구성 - 노트북 카메라

hwan001.tistory.com

libvpx 를 이용하여 이 내용을 적절히 볶아내면 될 것 같은데...