[완료]ffmpeg 소스 구조 파악에 도움될 만한 리소스가 있나요?

oosap의 이미지

웹, 서적 중에서요...
소스만 가지고는 함수 호출을 따라가지지가 않습니다. 함수포인터와 마크로 함수로 쉽게 따라가지 못하게 만들어놓은 것 같아요...
...

답변 감사합니다.

익명_사용자의 이미지

일부러 그런것이 아니라, ffmpeg 구조 자체가 워낙 복잡해서 그런것입니다.
ffmpeg이 제공하는 기능들을 확장성있고, 잘 모듈화 되어있는 구조로 유지하기 위해
어쩔수 없는 선택입니다.

제가 알기론, ffmpeg은 in-line comment말고는 딱히 잘 설명된 튜토리얼이나
문서를 찾기 힘들어서 그냥 직접 보면서 맨땅에 헤딩하는것이 가장 나은 선택입니다.

ffmpeg 구조를 살펴봐야 하는 이유가 ffmpeg과 비슷한 framework를 만들거나
ffmpeg내부구조를 hacking하는거라면, 당연히 맨땅에 헤딩하듯이 보셔야하는것이고요.

그게 아니라, 그냥 ffmpeg을 이용해서 multimedia-contents encoder, decoder, transcoder, streaming-server 등을
구현하고 싶으신것이면, ffmpeg 소스가 아니라
ffmpeg을 이용하는 프로그램들인, ffplay, vlc 같은 프로그램 소스를 보는게 더 나은선택입니다.

제가 비슷한 쓰레드에서도 답글을 단적이 있는데,
혹 목표가, 미디어 재생기 같은것 만드는것이면, ffmpeg보다 libvlc, gstreamer, phonon등을 사용하시는게
훨신 나은선택이고,
encoder/transcoder/streaming-server같은것 만들고 싶으면, command-line interface로 ffmpeg, mplayer, vlc를f
이용하는것이 나은선택입니다. ffmpeg과 mplayer 모두 command-line interface로 다른 프로그램들과
손쉽게 통신할수 있도록, 편리한 interface들이 다 마련되어있습니다. 가령 mplayer는 slave-mode 그런식으로
background에서 돌아가는 데몬처럼 동작하는 방식도 있습니다.
vlc도 마찬가지로 강력합니다.

oosap의 이미지

답변 감사드립니다.
그리고 제가 실력이 없는게 맞는 것 같습니다. 코드 분석이 안되는 부분은 gdb 를 써야 분석이 되더라구요. backtrace 해가면서..
그리고 또 메일리스트에 물어보니 답변을 많이 주시더군요.
command-line interface 는 좋은 힌트입니다만 제가 사용할 수는 없군요..
감사합니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

양지훈의 이미지

이클립스(리눅스, 맥 기반을 추천)를 사용하시면 편리하게 트레이싱하면서 분석하실수 있습니다.

구조 자체가 복잡하긴하지만 한번 알고 나면 어느정도 내가 필요한 기능을 위해서 튜닝을 할수 있습니다.

어느정도 맨땅에 헤딩은 필요하지만 분석불가능한 구조는 아닙니다.

그나마 FFmpeg홈페이지에 최근에 도큐먼트들이 친절하게 업데이트 되어서 다른 여타 웹사이트보단 FFmpeg홈페이지가 제일 괜찮은것 같습니다.

oosap의 이미지

답글 감사합니다. 본문에서 감사표시를 했는데 그러고보니 마지막 분께 감사표시가 안된 것 같아 답글로 다시 씁니다. 조금 보니까 분석이 그렇게 어렵지는 않더라구요. 트레이스가 필요해서 좀 불편하죠.
알려주신 정보는 저 뿐만 아니라 다른 분들께도 도움이 많이 될 것 같습니다.

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.