동영상/mp3 플레이어와 같은 미디어 플레이어에서 seek 를 어떤 식으로 구현을 해야되나요?

하얀하늘이의 이미지

다름이 아니라 제가 간단한 동영상/MP3 플레이어의 스킨부분을 구현하는 부분을 하게 되었는데요. (대학생 입니다.)
GTK를 이용해서 기본 틀을 만들어 놓았는데 seek 부분과 Volume 부분을 어떻게 해야하는지 몰라서 몇일째 막혀 있습니다.
xmms 와 mplayer 의 소스를 분석해볼려고 시도할려고 했는데 막상 소스를 보니 막막해서 ㅠ- ㅠ 훑어보기만 하고 깊이있게 보진 못했습니다. 사실 play, pause 같은 것도 구현하는 방법을 모르지만 seek 를 구현하는 방법을 알게 되면 자연히 play, pause 를 구현할 수 있겠다라고 생각해서 seek 를 집중적으로 보고 있습니다. 이 seek 를 어떤 식으로 구현해야 되는지 알려주세요. 다른 미디어플레이어의 소스를 분석해서 seek를 구현하는게 제일 빠른 방법이나요?ㅠ 엄청 복잡하던데 ㅠ- ㅠ ...
그리고 다른 사람이 하는 부분인데요. 아직 동영상 구현을 하지 못했습니다. 동영상 구현을 하지 못한 상태에서 seek 나 play같은 부분을 완성 혹은 대충이라도 구현할 수 있나요?

thyoo의 이미지

제 생각에는 플레이 포즈 스탑을 먼저 구현하는 게
나을 것 같군요.
최악의 경우에도 플레이 스탑은 동작할 테니까요.

CBR의 경우에는 비교적 간단합니다.
비트레이트가 정해져 있으므로 미디어 파일상의 옵셋과
플레이백 시간이 대체로 비례합니다.
Audio의 경우에는 바로 프레임 헤더만 찾아서 재생하면 됩니다.

Video가 끼면 복잡해지는데
Video안의 P,B-picture는 다른 프레임에 의존적이므로
그것만으로는 디코딩이 불가능합니다.
그자체로도 디코딩이 가능한 I-picture를 찾아야 합니다.
찾은 I-picture 프레임부터 재생하면 됩니다.
(물론, Video/Auido 싱크 맞추는 부분은 구현돼 있어야겠지요)

VBR은 Accuracy가 상관없다면 평균Bitrate로 CBR처럼 하면되구요.
정확도를 요하면 천상 첨부터 Scan하는 수 밖에 없읍니다.
___________________________________
Less is More (Robert Browning)

___________________________________
Less is More (Robert Browning)

하얀하늘이의 이미지

플레이 포즈 스탑 먼저 구현하겠습니다. 생각해보니 기본적으로 플레이라도 되어야겠네요 ㅠ- ㅠ
답글 감사합니다 ^- ^ 허나 제 실력이 얕아 thyoo님이 답글을 이해할 수가 없네요 ㅠ
thyoo 님의 글은 먼저 오디오나 비디오가 다 구현된 상태(OSD와 같은)에서 플레이 포즈 스탑을 구현할 수 있다는 건가요?
흐음 ㅠ-ㅠ 혹시 간단한 오디오/비디오 플레이어를 알고 계신지 ㅠ-ㅠ xmms는 너무 복잡하구 , 소스 분석이 그나마 빠른 길 같은데 ㅠ

kasi의 이미지

저도 지금 미디어 재생기를 만들고 있습니다. mfc + ffmpeg + win32 api

를이용해서 만들고 있습니다. 볼률 조절하는 부분이 SDL소스에 보면 있더군요(어제 확인^^;)

만약 음원이 스테레오라면 16bit니까 음원에 2바이트씩 전부 1부터 0사이의

값을 곱해주면 출력이 작아져 볼륨 조절 효과가 납니다.

아래와 같이 되있더군요

#define ADJUST_VOLUME(s, v)	(s = (s*v)/SDL_MIX_MAXVOLUME)
#define ADJUST_VOLUME_U8(s, v)	(s = (((s-128)*v)/SDL_MIX_MAXVOLUME)+128

아직 저도 만드는 중이라서 해보지는 않았지만 아마 될꺼라 생각합니다
(아니라면 답글 달아주세요..;;)

mplayer 저도 볼려고 생각했는데 복잡하더군요.

ffplay.c 라고 간단하게 만들어진 재생기가 있습니다. 기능은 별로 없지만

참조하기에는 좋은거 같아요

하얀하늘이의 이미지

ffplay.c 를 어디서 구할 수 있나요? 구글에서 검색해보니 ffmpeg 에 포함되어 있는 거 같은데 ffmpeg을 받으면 되나요?

댓글 달기

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