小弟用VC6.0跟C语言开发的播放器,但是播放没声音
小弟用VC6.0和C语言开发的播放器,但是播放没声音。
如题,我写的播放器中,用到了FFMPEG和SDL来开发,现在只是一个播放器,但是无论怎样,都没播放出声音,运行也没出错,由于小弟第一次做播放器,所以可能缺了一些步骤,望各位高人智点一下

如题,我写的播放器中,用到了FFMPEG和SDL来开发,现在只是一个播放器,但是无论怎样,都没播放出声音,运行也没出错,由于小弟第一次做播放器,所以可能缺了一些步骤,望各位高人智点一下
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libsdl/SDL.h"
#include "libsdl/SDL_thread.h"
#include <stdio.h>
#include <string.h>
#if defined __MINGW32__ || defined WIN32
#undef main /* Prevents SDL from overriding main() */
#endif
#define SDL_AUDIO_BUFFER_SIZE 1024
typedef struct PacketQueue{
AVPacketList *first_pkt,*last_pkt;
int nb_packets;
int size;
SDL_mutex *mutex;
SDL_cond *cond;
}PacketQueue;
PacketQueue audioq;
int quit = 0;
void packet_queue_init(PacketQueue *q){
memset(q,0,sizeof(PacketQueue));
q->mutex = SDL_CreateMutex();
q->cond = SDL_CreateCond();
}
int packet_queue_put(PacketQueue *q,AVPacket *pkt){
AVPacketList *pkt1;
if(av_dup_packet(pkt)<0)
return - 1;
pkt1 = av_malloc(sizeof(AVPacketList));
if(!pkt1){
puts("Warning:memory malloc fail!");
return -1;
}
pkt1->pkt = *pkt;
pkt1->next = NULL;
SDL_LockMutex(q->mutex);
if(!q->last_pkt)
q->first_pkt = pkt1;
else
q->last_pkt->next = pkt1;
q->last_pkt = pkt1;
q->nb_packets++;
q->size += pkt1->pkt.size;
SDL_CondSignal(q->cond);
SDL_UnlockMutex(q->mutex);
return 0;
}
static int packet_queue_get(PacketQueue *q,AVPacket *pkt,int block){
AVPacketList *pkt1;
int ret;
SDL_LockMutex(q->mutex);
for(;;){
if(quit){
ret = -1;
break;
}
pkt1 = q->first_pkt;
if(pkt1){
q->first_pkt = pkt1->next;
if(!q->first_pkt)
q->last_pkt = NULL;
q->nb_packets--;
q->size -= pkt1->pkt.size;
*pkt = pkt1->pkt;
av_free(pkt1);
ret = 1;
break;
}
else
if(!block){
ret = 0;
break;
}
else{
SDL_CondWait(q->cond,q->mutex);
}
}
SDL_UnlockMutex(q->mutex);
return ret;
}
int audio_decode_frame(AVCodecContext *aCodecCtx,uint8_t *audio_buf,int buf_size){