ffmpeg으로 디코딩해서 alsa로 출력하는 간단한 C/C++예제 코드 없을까요?
글쓴이: klara / 작성시간: 일, 2008/08/17 - 11:50오후
만들고 있는 동영상 플레이어의 백엔드로, ffmpeg을 써볼까해서, ffmpeg tutorial을 보면서 따라해보고있습니다.
그런데, tutorial에는 SDL을 이용하고 있는데에 반해, 전 Qt를 이용하고 있으니 무조건 따라하기가 불가능하네요.
일단 비디오는 싱크는 무시하고 프레임별로 뽑아와서 표시하는데까진 간단하게 할 수 있었습니다.
다음으로 오디오 출력을 해볼려고 하는데, tutorial에는 오디오 프레임을 디코딩에서 SDL로 넘겨버리기 때문에, Qt를 이용하는 저로썬 다른 방법을 찾아보아야 했습니다.
그러다가 ffmpeg으로 디코딩하는 akode라는 라이브러리를 찾았지만, 출력부분이 추상화되있고 각 드라이버가 플러그인으로 짜여있어서 예제로 참고하기엔 너무 복잡하더라구요.
어떻게 출력해야될지도 모르는데 첨부터 추상화시켜서 짜는건 힘들기때문에, 일단은 alsa로 출력하는걸 목표로 짜볼려고 하는데요, 최대한 간단하게, 오디오파일을 ffmpeg으로 디코딩하고 alsa로 출력하는 참고할만한 C/C++ 소스 코드가 없을까요?
Forums:
다른 플레이어에서
일단 구현된 예제를 보는것이 좋을 듯 합니다.
제 개인적인 의견입니다만
alsa보다는 oss쪽이 구현을 먼저 해 보는것이 간단하지 않을까요?
---------------------------------------------
리눅스가 싫다 우분투가 좋다
---------------------------------------------
---------------------------------------------
git init
git add .
git commit -am "project init"
---------------------------------------------
답변감사합니다. oss쪽
답변감사합니다.
oss쪽이 좀더 쓰기 편한가요...?
alsa를 선택한이유가, alsa쪽이 oss보다 더 많이 쓰이는 듯한 인상이 있고, 당장 제 컴퓨터에서도 oss로 출력하도록 프로그램을 설정하면 문제가 발생하는 경우가 있곤 해서입니다.
FFmpeg홈페이지에 관련 프로젝트들이 소개되있는 것을 알았습니다.
한번 이것들을 뒤져봐야겠네요.
ffmpeg의 경우 다음과
ffmpeg의 경우 다음과 같이 decoding을 할 수있습니다.
wav데이타가 나오면 이것을 사운드 장치에 출력으로 넣으시면 Qt에서도 쓸 수 있습니다.
AVCodecContext* ctx = avcodec_alloc_context();
ctx->codec_type = CODEC_TYPE_AUDIO;
ctx->codec_id = 적절한 코덱 ID;
ctx->channels = 채널;
ctx->sample_rate = 샘플레이트;
// 코덱오픈
AVCodec* codec = avcodec_find_decoder(ctx->codec_id);
avcodec_open(ctx, codec);
avcodec_decode_audio2() 함수로 decoding하면 decoding된 wav데이타가 나옵니다. 이것을 그대로 플레이 시키면 됩니다.
korone.net qt programming site
답변해주셔서
답변해주셔서 감사합니다.
사실 avcodec_decode_audio2()를 호출하는 곳까진 짜봤는데, 이걸로 뭘 어떻게 해야할지가 막막합니다-_-;
튜토리얼에서는 여기서 넘어온 데이터를 다시 SDL쪽으로 넘겨주니까 이걸 이용해서 어떻게 출력하면 될듯한데, 그 '어떻게'를 몰라서 막힌 상태입니다.
먼저 alsa library 를 이용해서 wave file 을 재생하는 application 을
먼저 작업해보시면 응용할 수 있는 선택의 폭이 넓어집니다. 제 생각으로는 FFMPEG 이 연동가능한 output 을 파악한 뒤에 원하는 방식으로 연결하는 것이 좋을 듯 합니다.
답변감사합니다.
답변감사합니다. 말씀하신대로 일단은 wav파일 재생을 해봐야겠네요.
그런데 '연동가능'하다는게 무슨 뜻인지 잘 모르겠습니다. FFmpeg으로 디코딩까지만 해주고, 출력은 프로그래머가 해줘야되는것 아니었나요...?
댓글 달기