FFMPEG(5)
-
특정 버전의 FFmpeg를 Android용으로 크로스컴파일하는 방법 정리
zerodice0/ffmpeg-android-build 브랜치를 참고해주세요. Android NDK을 사용해서 특정 버전의 ffmpeg을 빌드하는 방법에 대해 알아봅시다. 최신 버전의 ffmpeg라면 ffmpeg-android-build의 build_android.sh/build_android_64.sh만 실행시키면 간단히 빌드되므로 굳이 이 글을 참조할 필요는 없습니다. 이렇게 별도의 브랜치를 작성하는 이유는, 최근 ffmpeg를 안드로이드 용으로 크로스 컴파일하는 방법을 검색하면 독립실행형 툴체인(Stand-alone toolchain)을 사용하는 방법만 나오기 때문입니다. 독립 실행형 툴체인은 이미 진즉에 Depreacted 됐죠. 그래서 예전 버전의 NDK를 사용하지 않으면 그 방법들로는 빌드할 ..
2021.03.31 -
[NDK] Colorspace Conversion 관련 삽질기
이상하게 요즘 삽질을 계속해서 하는 느낌이다. 이번에는 구글의 정책으로 인해 64bits를 지원하도록 NDK 라이브러리를 수정하는 과정에서, Colorspace Conversion의 문제로 삽질을 하게 됐다. 일단 현재 GPU를 사용하지 않고 Colorspace Conversion을 처리하기때문에 성능상에 문제가 있기는 하지만, 어느정도 안정적으로 처리하는 것 까지만 확인하고 삽질기를 작성하기로 했다. 2019년 8월 1일부터 64bits를 지원하지 않는 앱은, 구글 플레이에 업데이트 할 수 없다. NDK를 사용하지 않는다면 상관이 없겠지만, 영상 스트리밍과 관련된 기능을 사용하고 있었기 때문에 필요한 라이브러리를 ARM64-v8a 칩셋에 맞게끔 다시 빌드할 필요가 있었다. 대표적인 예가 바로 FFmpe..
2019.07.04 -
[삽질기록] RAW H.264(AVC)에 MP4컨테이너 씌우기 #4 / FFmpeg 재빌드(64bits)
RTP로 전달된 h264, h265 파일을 차곡차곡 RAW데이터로 저장한 뒤, FFmpeg를 이용해서 Muxing해보니 정상적으로 mp4파일이 생성됐다. 재생도 잘 된다. 파일이 생성되지 않는 것 같아서 잠시 당황했었는데, LG G5에서 PC에 파일 전송모드로 연결했을 때 파일을 제대로 표시하지 못하는 문제가 있었다. File Explorer 앱을 이용해서 확인해보니 파일 생성 및 Muxing에는 문제가 없어서, 일단 기능구현이 완성된 후 고민하기로 했다. 2019년 8월부터 64bits를 지원하지 않는 앱은 구글 플레이에 등록 및 업데이트가 불가능하기 때문에, FFmpeg를 다시 빌드하기로 했다. 이전의 빌드 스크립트에서 수정해야 할 곳은 다음과 같다. 이전의 빌드스크립트는 [삽질기록] RAW H.26..
2019.06.10 -
[삽질기록] RAW H.264(AVC)에 MP4컨테이너 씌우기 #3 / 테스트 코드를 이용하여 MP4 컨테이너 씌우기
MediaMuxer를 대신해서 FFmpeg를 사용하여 MP4 컨테이너를 씌우는 예제를 검색하다가, 깃허브에서 [ffmpeg-muxer, Akagi201](https://github.com/Akagi201/ffmpeg-muxer/blob/master/main.c) 코드를 발견했다. 정확히 Muxing을 하는 코드여서, 이 코드를 사용하여 테스트해보기로 한다. [삽질기록] RAW H.264(AVC)에 MP4컨테이너 씌우기 #2 / FFmpeg 빌드에서 muxer/demuxer모듈이 추가된 ffmpeg 라이브러리를 적용하고 빌드하니, 중간에 Got signal 에러를 뱉고는 앱이 멈춰버린다. 원인을 보니 오디오 파일을 입력하지 않았는데, 이로 인해서 코드 중간에 오동작이 발생해서 앱이 크러쉬되는 것이었다. 위..
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