동영상 디코딩 시 오디오 비디오 동기를 맞추는 방법

kasi의 이미지

ffmpeg + win32 이용해서 동영상 재생기를 만들려고 하고있습니다.

아직 이해가 안가는 부분이 있지만

ffplay.c를 보면서 ffmpeg api는 그럭저럭 이해했고

흐름 같은것도 대부분 알것 같습니다.

아직 이해가 안가는 부분이 동영상 디코딩시

디코딩 된 비디오 하고 오디오 데이터 재생 동기를 어떻게 맞추는가를 잘 모르겠습니다.

동영상 재생시 비디오 오디오 데이터간의 동기를 어떻게 맞추는지

간략하게나마 알려주셨으면 감사하겠습니다. ㅜ_ㅜ

thyoo의 이미지

Stream의 재생 기준 시간은 System Layer에 있읍니다.
PS의 경우 SCR(System Clock Reference) TS의 경우 PCR(Program Clock Reference)이라고 합니다.

System 상위 계층인
MPEG PES Pkt(Packet)에 PTS(Presentation TimeStamp)가 들어 있읍니다.
해당 패킷(정확하게는 Frame)의 재생 타이밍인 PTS는 Clock Reference를 기준으로 기록돼 있읍니다.
PTS가 없는 경우라도 Audio는 Access Unit 들어오는 순서대로
Video는 Picture(또는 Frame) Type (I, P, B-picture)으로 재생순서를 알 수 있고 Frame Rate를 알고 있으므로 재생 가능합니다.

Player는 내부 시계를 가지고 있으며, 수신한 Clock Reference로 내부 시계를 보정합니다.
// Local 재생이 아닌 경우
Local Machine이 아니고 Streaming Server에서 Stream을 받고 있다면 Server의 Performance나 Network 사정에 의해서 Network(PCR) Jitter가 발생합니다. Jitter에 대비한 버퍼링이 필요하고 CBR이 아닌 VBR(Variable BitRate)의 경우Bitrate Smoothing등의 알고리즘을 적용하는 경우도 있읍니다.

Player Backend(Renderer)는
내부 시계를 기준으로 PTS에 따라 비디오 오디오를 각각 표시 또는 발음합니다. Backend는 만약 기준 시간에 늦은 Frame이 있으면 Drop합니다. Audio와 Video는 따로 따로 재생하지만 결과적으로 기준시에 맞춰져 립싱크가 맞습니다.
___________________________________
Less is More (Robert Browning)

___________________________________
Less is More (Robert Browning)

kasi의 이미지

답변 감사합니다.

멀티미디어 관련 수업을 들은적이 없어서

이해가 쉽게 되지는 않습니다만 ㅜㅜ

이해 안갔던 ffplay의 변수 몇가지에 대해서 이해가 가네요.

관련 자료를 더 찾아봐야겠습니다.^-^

댓글 달기

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