[완료]media player가 실행되는 내부 과정을 알고싶습니다..

lucadi의 이미지

제가 동영상 player code를 분석하려고합니다..

요 몇일 했는데도, 너무 맨땅에 헤딩하는 기분이 들어서, 동영상이 실행되는

내부적인 흐름을 대충이라도 알았으면 합니다..

1) 제가 생각하기에는 전체적인 그림은 인코딩된 동영상 데이타(*.avi, *.mpeg)등이 코덱에 의해서
디코딩된후, 디코딩된 데이터가 play되는 것으로 판단하고 있습니다..
그리고, play된다는 것은 각각의 프레임(하나의 화면)이 연속적으로 streaming 된다고 생각했습니다.

2) 그렇다면, 코드상에서 디코딩에 관련된 함수를 실행한후, 디코딩된 데이터를 play를 시켜야 할텐데요,
소스를 따라가다 보면, 디코딩(코덱)에 관련된 함수를 호출 하는 것 같지 않습니다..
거의 대부분의 실제 실행은 gtk 함수가 실행

3) 코덱과 gtk의 관계도 궁금합니다.
코덱에서 디코딩을 한후, 각각의 프레임(하나의화면)까지 추출한 후 이 결과를 gtk를 이용해서
화면에 뿌려주는 것인지, 아니면, 코덱에서는 단지 디코딩만을 하고, gtk에서 디코딩된 데이터에서
프레임을 추출한 후 화면에 뿌려주는것(streaming)까지 하는 것이지 궁금합니다..

1),2),3) 모두 제가 개인적으로 생각한 내용이구요.. 아마도 제가 잘못 생각하고 있는 내용이 많을것
같습니다. 잘못된 내용 지적해주시구요.. 제 생각에 동영상을 재생할때의 대부분의 작업은, 프레임을
추출하는 작업과 이 프레임들을 연속적으로 streaming해주는 것이라고 생각하고 있습니다..
아직 코덱이 정확이 뭔지도 모르고 gtk 다큐먼트도 정독하기 전입니다.. 제가 왠지 삽질할것 같은
불길한 예감이 들어서, 프레임을 뽑아내거나, streaming에 관련된 대표적인 함수 등이 있다면,
알려주시면, 제가 왠지 몇일은 덜 삽질할것 같습니다..
그리고, 코덱과 gtk와의 관계는 정말 궁금하구요...
제가 잠깐 본 코드는 gnome_mplayer이고 마지막으로는 mplayer를 분석하려고 합니다..

위 내용과 관련이 없더라고, 코드를 이해하기위해 필요한 내용있으면 말씀해 주세요..
감사합니다..

klara의 이미지

gtk와 미디어 플레이어는 아무런 연관이 없습니다-_-;
디코딩하고 플레이하는 과정의 흐름을 알고 싶으시면, 한번 ffmpeg tutorial을 찾아보세요.
ffmpeg을 이용해서 디코딩하고, 싱크 맞춰서 플레이하는 tutorial입니다.
여기서 더 알고 싶으시면 이제 코덱공부하시면서 디코딩을 어떻게 하는가를 공부해보시면 되겠죠.

lucadi의 이미지

아...동영상플레이어와 관련이 없으면, gnome_mplayer에서 호출되고있는 gtk_함수들의 정체들은 뭔가요??
저는 이 함수들때문에 gtk가 재생과 밀접한 관계가 있다고 생각했거든요...

klara의 이미지

gtk는 GUI를위한 라이브러리입니다.
gnome기반의 어플은 모두 gtk로만들어졌습니다.

madman93의 이미지

일단 gtk쪽은 모두 버리세요
mplayer의 콘솔쪽만을 일단 보시는게 가장 좋습니다.

그리고 난 다음에 동영상이 어떻게 gtk와 연관을 시켜 줄 수 있는지를 보시는게 좋습니다.

일단
1. 동영상에 관한 포맷 분석이 이루어 져야 합니다.
- 처음에는 세부적인 작업이 필요 없기때문에 포맷 분석을 완벽하게 할 필요는 없습니
대충은 알고 계셔야 합니다. 물론 계속 하실려면 완전히 몸에 숙지를 하고 계셔야 하지만 동영상 플레이가 목적인 님에게는 재생 관련 부분만 숙지 하셔도 좋습니다.

2. 디코딩 함수 즉,, 코덱이 어떻게 호출 되는가?
- avi 파일 포맷을 예로 들면 4개의 문자로 된 코덱을 지정하는 부분이 있습니다.
이른바 FourCC라고 합니다. DivX코덱으로 된 영상은 DIVX (divx) XVID코덱으로 된 것은 XVID(xvid) 이런식으로 avi 동영상 파일 포맷안에 FourCC정보가 있습니다. 이 정보를 기준으로 코덱의 디코딩 함수가 호출이 됩니다.
이 부분은 비단 리눅스에 한정된것이 아니라 다른 운영체제에서도 마찬가지 입니다.
윈도우즈에서 곰플레이어로 재생시 코덱이 없으면 자동으로 링크주소를 보여주는되요
이 부분도 FourCC정보를 기준으로 알 수 있습니다.

3. 디코딩된 데이터를 연속으로 뿌리기??? --> 재생이죠

디코딩된 데이터를 화면상에 연속으로 뿌리는 것은 렌더링(rendering)합니다.
즉 영상 재생이겠죠
이미 디코딩된 데이터는 하나의 그림화일과 같습니다.
이 데이터에 Bitmap 구조를 더하면 Bitmap화일이 되는것이죠
Rendering 기술은 여러가지가 있으니 찾아 보시면 되겠습니다.

대충 이렇습니다. 글로 대충 설명을 드리자니 어려움이 많군요

---------------------------------------------
svn + trac + my project --> success ???
---------------------------------------------

---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------

lucadi의 이미지

한달짜리 삽질을 막아주셔서 감사합니다..

지금, 동영상 포맷 쪽이랑 ffmpeg tutorial과 mplayer 쪽으로 해서 공부하는걸로
방향을 잡았습니다..

무지..어려울것 같지만, 그래도 방향이 보이니깐, 답답하지 않아서 좋아요..

너무 감사합니다...

silasoni의 이미지

ffmpeg tutorial

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.