분류 전체보기
-
안드로이드 32bit 기기에서 2GB 이상 파일 다루기안드로이드 2019. 12. 12. 17:40
32bit 기기에서 2GB 이상의 파일을 다뤄야 할 일이 있었다. 막 찾아보던 중 -D_LARGEFILE_SOURCE 와 -D_FILE_OFFSET_BITS=64 이렇게 두가지 옵션을 주면 기존의 32bit용 자료형들이 64bit 형식으로 바뀐다고 하더라. 예) off_t -> off64_t 그래서 적용해봤더니 어림도 없지. 전혀 안된다. 좀 더 찾아봤더니 AndroidMinSdk가 24 이상으로 설정되있어야 한단다. 바로 build.gradle로 가서 설정해봤더니 이번에도 안됬다. 도대체 어떻게 설정하는건지 찾아보니까 APP_PLATFORM := android-24 으로 옵션을 추가설정 해주면 됐다. 결론 : Application.mk 에 아래 두 줄을 넣어주면 된다. APP_CFLAGS := -D_L..
-
MPEG-DASH란?카테고리 없음 2019. 8. 7. 10:42
MPEG-DASH의 DASH는 Dynamic Adaptive Streaming over HTTP의 약자이다. 약자를 보면 알겠듯이 MPEG-DASH방식으로 인코딩 된 영상은 스트리밍 시에 사용된다. 스트리밍이란 인터넷에서 데이터를 연속적으로 전송하여 실시간으로 재생하는 것을 의미한다. 즉, YOUTUBE, NETFLIX 등과 같이 인터넷에서 영상을 볼 수 있는 서비스에 사용되는 기술이다. 현재 YOUTUBE는 MPEG-DASH 방식의 영상을 사용하고 있다. 그래서 이 방식의 장점이 뭘까? 다른 여러 스트리밍 지원을 위한 인코딩 방식들이 있을텐데 왜 유튜브는 이 방식을 사용하는 걸까? MPEG-DASH는 여러가지 화질의 영상을 미리 만들어 놓는다. 그리고 사용자의 네트워크 환경에 따라 맞는 화질을 보내주는..
-
[C++] opencv를 이용한 영상캡처Windows 프로그래밍 2019. 5. 27. 18:15
영상 캡처를 해야할 일이 있어서 방법을 찾던 중 opencv의 VideoCapture 클래스를 이용하면 쉽게 캡처가 가능하다는 것을 알게 되었다. 이를 이용해 캡처하는 방법을 알아보자. 코드는 아래와 같다. /* #include #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" using namespace cv; using namespace std; */ 위 헤더파일들을 include 해주고 using namespace를 추가해주면 코드가 짧아진다♥ VideoCapture cap(cpath); // cpath에는 캡처할 영상의 경로를 넣는다 if (!cap.isOpened()) { cout frame; strings..
-
EME (Encrypted Media Extension)란?보안 2019. 4. 12. 16:05
EME는 Encrypted Media Extension의 약자로, DRM이 걸려있는 영상 컨텐츠를 사용자가 단말기에서 보안 프로그램 설치 없이 사용할 수 있게 해주는 기술이다. 사실 번지르르한 설명 전 EME 를 짧게 설명한다면 아래와 같이 요약할 수 있다. DRM 솔루션 이용시 필요한 보안 프로그램을 대기업(구글, MS, 애플)이 브라우저(크롬, 엣지, 사파리)에 미리 심어둔 것 그래서 보안 프로그램 설치가 따로 필요 없는 것이다. 그럼 이제 EME 가 어떤 방식으로 동작하는지 살펴보자. EME를 적용하기 위해선 암호화된 영상이 저장되어있는 스토리지 서버 와 복호화 키가 들어있는 라이센스 서버 , 그리고 CDM 이 기본적으로 필요하다. 넷플릭스를 예로 들어보자. A씨가 넷플릭스에 접속해 로그인을 한다...
-
소켓과 MFC를 이용한 채팅 프로그램 개발하기 - 클라이언트편Windows 프로그래밍 2019. 3. 6. 18:07
서버편 보고오기 지난 서버편에 이은 클라이언트 개발 편이다.클라이언트에서는 서버와 달리 소켓 통신을 위해선 하나의 클래스만 있으면 된다. 서버에서처럼 CConnectSocket이라는 클래스를 CSocket 클래스를 기본 클래스로 받아 생성한다.코드는 짧고 쉽다. #include "stdafx.h" #include "CConnectSocket.h" #include "SocketClientDlg.h" CConnectSocket::CConnectSocket() { } CConnectSocket::~CConnectSocket() { } void CConnectSocket::OnClose(int nErrorCode) // 서버와의 연결이 종료되었을 때 { ShutDown(); Close(); CSocket::On..
-
소켓과 MFC를 이용한 채팅 프로그램 개발하기 - 서버편Windows 프로그래밍 2019. 3. 6. 10:28
소켓은 내 컴퓨터가 상대방과 통신하기 위해 사용하는 통로(?) 라고 볼 수 있다.소켓은 있는데 왜 말켓, 소Dog은 없지 이런 소켓을 이용한 채팅 프로그램을 만들어 볼 것이다. 레알 16강탈락 경★축☆ 전체적인 흐름은 소켓 서버와 소켓 클라이언트가 존재하고, 서버는 클라이언트가 보내는 메시지를 다른클라이언트들에게 모두 전달하는 역할을 수행하게 할 것이다. 먼저 소켓 서버를 만들어보자.소켓 서버에는 클라이언트의 메시지를 기다리며 계속 대기하는 CListenSocket 클래스, 클라이언트의 추가 등클라이언트와 관련된 작업을 수행하는 CClientSocket 클래스 이렇게 2가지 클래스를 생성한다. 그리고 이 클래스들을 생성할 때는 아래와 같이 CSocket 클래스를 기본 클래스에 추가해주어야 한다. 먼저 C..
-
Little Endian, Big Endian보안 2019. 2. 20. 11:44
공부하던 중 리틀 엔디안과 빅 엔디안에 대한 내용이 나와 글을 적게 되었다. 결론부터 얘기하자면 리틀 엔디안은 메모리 끝에서부터 값을 채워넣는 방식이고, 빅 엔디안은 0번지부터 차례대로 값을 채워넣는 방식이다.예를 들어, 0x12345678 이라는 데이터가 있다면, 각각 아래와 같이 들어가게 된다.눈으로 그냥 보기에는 빅 엔디안이 보기도 쉽고 편할 것이다. 하지만 두 방식의 장단점이 있다. 먼저 빅 엔디안은 우리가 수를 읽는 방식과 같은 순서로 값이 들어가기 때문에 디버깅이나 리버싱 작업을 더편하게 할 수 있다는 장점이 있다.두 번째로 우리가 수의 크기를 비교할 때 어떻게 하는지 생각해보자. 두 수를 비교할 때 어디서부터 보는가?당연히 높은 자리수부터 비교한다. 이땐 메모리 앞쪽에 높은 자리 수가 자리하..
-
블록체인 작업증명 C++로 구현하기보안 2019. 2. 19. 17:52
블록체인 알고리즘은 비트코인으로 인해 사람들에게 많이 알려지게 되었다. 블록체인 알고리즘에서는 작업증명(POW - Proof Of Work) 이라는 과정을 통해 특정 거래내역이 신뢰할 수있는 정보인지 확인한다. 난 간단하게 작업증명 과정을 c++로 구현해 보았다. 그럼 이제 코드를 보자. #include #include "KISA_SHA256/KISA_SHA256.h" typedef struct blockheader { BYTE previousBlockHash[257]; // 전 블록의 거래내역을 해쉬 한 값 }; typedef struct block { int blockSize; // 거래내역 크기 blockheader header; // 위에 있는 블록헤더 int transactionCount = 0..