Programming(201)
-
[삽질기록] RAW H.264(AVC)에 MP4컨테이너 씌우기 #2 / FFmpeg 빌드
ffmpeg를 사용해서 muxing을 하기 위해 파일을 여니, ffmpeg avcodec_open2 returns -22 if I change my speaker configuration, stackoverflow의 글처럼, avcodec_open2에서 -22를 리턴하는 상황이 발생했다. 차이점이라면 Stackoverflow의 글에서는 스피커와 관련된 설정을 변경했다고 하고, 나의 경우에는 아무런 설정의 변경이 없었다는 것 정도. 알고보니 ffmpeg에 mux/demux관련된 모듈이 빠져있어서 발생하는 문제로, ffmpeg를 다시 빌드해야 해결할 수 있을 것 같았다. 일단 기본적인 내용은 ffmpeg for android 빌드, not to be programmer 글과 윈도우에서 AndroidStudi..
2019.06.03 -
[삽질기록] RAW H.264(AVC)에 MP4컨테이너 씌우기 #1
h264는 코덱이고 mp4는 컨테이너이다. 컨테이너와 코덱의 차이점에 대해서는 코덱이 뭔가요? (코덱과 컨테이너의 차이) by Michael Fitzer, 교양있는 교양채널에 잘 기술되어있으니 참조하도록 하자. 단순하게 말하면 h264로 압축된 데이터를 mp4파일로 만들기 위해서는, mp4컨테이너 파일을 만들어주기만 하면 된다. 몹시 심플한 얘기처럼 들리지만, 생각보다 산 넘어 산인 상황이 반복되고 있다. 이 내용을 기록해두면 언젠가 쓸모있을 것 같아서, 시간이 날 때마다 조금씩 기록하기로 했다. Android의 MediaCodec, MediaExtractor, MediaMuxer. 컨테이너를 생성하고, 컨테이너에 영상과 오디오 데이터를 집어넣는 과정을 먹싱(Muxing)이라고 한다. 먹싱에 대한 자세한..
2019.05.29 -
Flutter 관련 자료 정리
Build Native Mobile Apps with Flutter, Udacity https://classroom.udacity.com/courses/ud905 Flutter Resources Documentation:https://docs.flutter.io/ Github:https://github.com/flutter/flutter StackOverflow:https://stackoverflow.com/questions/tagged/flutter Gitter:https://gitter.im/flutter/flutter Effective Dart Guide:https://www.dartlang.org/guides/language/effective-dart Dart Tips:https://www.dar..
2019.05.26 -
[Android/Java] 파일 출력(FileOutputStream)관련 삽질 기록
문제 해결에 도움이 됐던 글들은 아래와 같습니다. FileOutputStream, Android Developers 안드로이드 바이너리(binary) 파일 입출력 1. [File, FileOutputStream, FileInputStream, BufferedOutputStream, BufferedInputStream] (Android Binary File I/O 1), 개발자를 위한 레시피 [자바][IO] 텍스트 파일 생성하고 파일에 텍스트 쓰기 (3) - FileOutputStream 활용, Astronaut's Note Android에서 바이너리 데이터를 출력하는 경우 FileOutputStream을 사용하면 쉽게 파일을 출력할 수 있다. byte[] data = "Hello".getBytes(); ..
2019.05.23 -
5-1. 다이나믹 프로그래밍
다이나믹 프로그래밍 큰 문제를 작은 문제로 나눠서 푸는 알고리즘을 말한다. Devide and Conquere와 비슷하지만, 큰 문제를 작은 문제로 나눴을 때 작은 문제들 중 동일한 문제를 계산하지 않는다는 차이점이 있다. 두 가지 속성을 만족해야 다이나믹 프로그래밍으로 문제를 풀 수 있다. 겹치는 부분 문제가 나타난다. (Overlapping Subproblem) 최적 부분 구조가 나타난다. (Optimal Substructure) 즉, 문제의 정답을 작은 문제의 정답에서 구할 수 있다. 다이나믹 프로그래밍에서 각 문제는 한 번만 풀어야 한다. 따라서, 정답을 한 번 구했으면 정답을 어딘가에 저장해놓는다. 이런 방법을 Memoization이라고 한다. 다이나믹 프로그래밍을 해결하는 방법에는 Top-do..
2019.05.20 -
4-4. BFS
BFS BFS의 목적은 임의의 정점에서 시작해서, 모든 정점을 한 번씩 방문하는 것이다. 모든 가중치가 1일 때, BFS는 최단거리를 구하는 알고리즘이 된다. BFS를 이용해서 최단거리를 구하기 위해서는, 다음과 같은 유형의 문제여야 한다. 최소 비용 문제여야 한다. 모든 간선의 가중치는 1이어야한다. 정점과 간선의 갯수에 제한이 있어야 한다. 다시 말하면, 문제에서 주어진 시간 및 메모리 제한을 만족시킬 수 있어야 한다. 간선을 이용했을 때 이동할 수 있는 가짓수가 다른 경우, 다른 정점이라고 봐야 한다. 이런 경우에는 그래프를 쪼개서 생각해봐야 한다는 점을 주의하자. 2178 미로 탐색, 백준 온라인 저지 (1, 1)에서 (N, M)으로 가는 가장 빠른 길을 구하는 문제이다. DFS 탐색으로는 문제를..
2019.05.17