2/26/2017

FFmpeg 기본정보 (자료수집)

1. FFmpeg 기본과 개념

앞의 FF는 (Fast Forward)의미로 사용이 되고, mpeg은 MPEG 영상 표준그룹에서 왔다고 한다.
현재 번역 수준으로 정확한 구성과 개념을 알고 추후 Porting할 기회와 사용할 기회가 있다면,
다시한번 정리 해야겠다.

  • FFmpeg Main Site

  https://ffmpeg.org/


1.1 Command Line Tools 

Wiki에 설명이 너무 자세히 잘 나와 있어서, 너무 감사할 뿐이며, 사용방법도 쉽게 이해가 갔다.


  1. ffmpeg : 기본 encode를 하는 command tool이라고 한다. 
  2. ffserver : Stream 전송을 위해 HTTP and RTSP를 사용하는 Server로 사용되어진다.
  3. ffplay   : 기본 decode를 하는 media player로 SDL 과 FFmpeg library를 이용한다고 한다.
  4. ffprobe : media에 대한 정보를 알기위해 사용되어지는 것 같다. 


1.2 Libraries

  1. libswresample:  audio resampling하는 포함 하고 있다고 한다. 
  2. libavresample:  audio resampleing 기능을 가지고 있다고 하며, libav project에서 왔다고 한다. 
  3. libavcodec: audio/video encoders and decoders 기능을 가지고 있는 핵심기능이다. 
  4. libavformat: audio/video를 muxer 와 demuxer 기능을 가지고 있다. 
  5. libavutil : ffmpeg과 별개로 암호화 및 암축을 위해 다양한 hash function들을 제공하는것 같다.
  6. libpostproc: h.263기반의 video postprocessing routine이라고 하는데 왠지 H.264의 NAL과 유사할 것 같다.  
  7. libswscale: video image scaling 과 color space /pixelformat conversion 기능을 담당.
  8. libavfilter: video/audio에 적용이 되어지는 filter 기능인 것 같다. 
   
*resampling은 audio mixer 기능으로 자주 사용이 되며, sample rate를 변경하거나 할때도 
  사용되 될 것 같다.
현재 내가 사용했던 CPU를 보면 Audio Mixer기능은 Hardware에 의존적인 부분이 많았는데, FFmpeg에서 이부분을 까지 되는것 같아 너무 좋다. 

*scale 역시 pixel conversion이나, video crop 및 scale부분은 좀더 확인을 해봐야 겠다. 
*filter 는 video/audio filter인 것 같은데 지원되는 것이 무엇인지 좀 자세히 알아봐야겠다.  


  https://en.wikipedia.org/wiki/FFmpeg
  https://ko.wikipedia.org/wiki/FFmpeg


1.3 FFmpeg의 전체 관련문서 

FFmpeg Site에서는 상위 관련된 자세한 문서 및 개념이 설명이 되어 있으며, 이를 이해하는데 있어 너무 좋은 것 같다.
하지만 자료가 너무 많아 필요한 부분만 읽고 숙지해야겠다.
현재 나의 관심은 OpenCL 과 Neon 모드가 모두 지원이 되는 것이 었는데,문서를 보니 option 사항에 잘 수록되어있다. 


  https://ffmpeg.org/documentation.html


현재 대충 동작 방식과 Library 구성은 이해를


2. FFmpeg의 동작 

사실 이부분까지는 크게 관심을 두지 않았는데, 아래의 사이트에서 쉽게 이해할 수 있도록
제공을 해주고 있어 쉽게 이해가 갔다.

  http://d2.naver.com/helloworld/8794


3. FFmpeg의 Porting 

FFmpeg의 porting 아직 본인도 실행을 못해봤지만, 많은 open source가 그렇하듯이,
약간의 삽질과 관련오류를 알면 가능하리라 본다.

한가지 더 좋은 대안으로는 이미 Porting된 Solution을 사용을 하면 더 괜찮을 것 같다.
FFmepg을 ARM의 Neon Mode를 이용하여 사용하기 때문에 BSP에서 이를 제공하는 것을 찾아 이를 가져다 쓰면 될 것 같다.


아직 본인도 못해봤으며, 사실 궁금하기도 하다,

3.1 Android FFmpeg Porting 

  1. Android NDK 설치 
  2. Android FFMPEG Porting 
  3. JNI 연결 

  http://howto.homelinux.com/wiki/AndroidFFMPEG
  http://vinsol.com/blog/2014/07/30/cross-compiling-ffmpeg-with-x264-for-android/