ffmpeg을 이용해 Qt(C++)로 동영상 플레이어를 만들때..

pogusm의 이미지

기본 개념이 없어서 질문 드립니다..

ffmpeg 라이브러리를 설치하고,
http://code.google.com/p/qtffmpegwrapper/ 에서 샘플 소스코드를 다운로드 받아서
컴파일해서 실행해 보았습니다. (첨부 이미지 참고)

기본적으로 동영상 파일을 디코딩 해서 1프레임씩 보여주는 프로그램입니다.

QPixmap p;
image2Pixmap(frame,p);
ui->labelVideoFrame->setPixmap(p);

프레임 이미지는 위의 방법으로 QLabel에 출력됩니다.

그렇다면,
실제로 동영상 플레이어를 Qt로 만든다고 하면..
그냥 QLabel에 연속적으로 이미지를 출력해 주면 되는건가요?

아니면, 위 예제는 그냥 기본 원리를 구현하는것뿐이고..
실제로 동영상을 구현하려면 다른 방법을 이용해야하는건가요? (만약 그렇다면 어떤 방법으로 동영상을 출력을 해야 하나요?)

조언 부탁드립니다

굽신굽신

File attachments: 
첨부파일 크기
Image icon QTFFmpegWrapper.JPG90.14 KB
semmal의 이미지

원리로 따지자면 연속적으로 이미지를 출력해주는 건 맞는데,
알고리즘에 따라서, 변화된 부분만 업데이트 하는 경우도 있고,
실질적으로 보자면, 그냥 위젯상에 이미지 다 뿌리는건 상당히 느린 작업이라, 트릭이나 저수준 API를 많이 씁니다.
오픈소스로 공개된 동영상 플레이어를 살펴보는게 공부하는데는 가장 좋을 것 같습니다.

------------------------------
How many legs does a dog have?

pogusm의 이미지

"변화된 부분만 업데이트 하는 방법"을 직접 개발하기는 어려울거 같은데..
혹시 openGL을 이용해 출력하면 openGL에서 알아서 처리해 주거나 그런건 없을까요?

그리고
트릭이나 저수준 API를 쓴다는건 구체적으로 무슨 뜻인가요?

저수준 API라는건.. QT에서 제공하는 라이브러리함수가 아닌 windows.h 에 있는 API를 이용해서 출력하는 건가요??

트릭이라는건 감도 안잡히네요 ㅠㅠ

ps. 검색을 해보니... io.h 가 '저수준파일' 라고 하는데.... 모르겠네요 ㅠㅠ
( http://edps5091.tistory.com/entry/bitmap%EC%A0%80%EC%88%98%EC%A4%80-%EC%B6%9C%EB%A0%A5API )

semmal의 이미지

동영상을 직접 처리하려면, 최소한 동영상과 관련된 알고리즘을 제대로 알고있어야 하지 않을까 싶습니다.

OpenGL은 그저 3디 그래픽스를 처리하기 위한 도구일 뿐이지 어떤 알고리즘도 알아서 처리해주지 않습니다.

어떤 트릭을 쓰는지는 동영상 알고리즘이나 동영상 프로그램 소스를 뒤져보면 찾으실 수 있을 겁니다.

제가 저수준 API라고 하는 것은 어디서 제공하는 것이든, 하드웨어를 거의 직접 처리하는 API를 말합니다.

감도 안잡힌다면, 동영상 알고리즘이나 그래픽스 라이브러리 등, 먼저 필요한 지식부터 제대로 습득하셨으면 합니다.

------------------------------
How many legs does a dog have?

pogusm의 이미지

동영상 플레이어라는게 정말 복잡한거군요.. ㅠㅠ

어쨌든, 답변 감사합니다.

댓글 달기

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