http://bbs.chinavideo.org/viewthread.php?tid=1247&extra=page%3D1
已经连续搞了好几天了,至今仍然没有太大突破,下面是我自己写的player的关键代码部分,还请大家都来看看哈;
简单解释一下,我得思路是,像解视频帧一样,用av_read_frame从文件中读取一帧,然后解码,将解码之后的pcm音频数据(?)直接写到audio设备(/dev/dsp)上,下面的fd文件操作符就是上述的audio设备;
我得问题有如下几个:
1、我这个播放器的这个思路对么?为什么我解码之后写到音频设备文件里后,只能听到声音快速闪过,而不能听到悦耳的声音?
2、解码之后的数据是pcm数据么?在播放它时,对于声卡的相关设置是否要与解码出来的pcm数据设置相一致,例如44100khz这个设置?
3、播放音频和pts有关系么?需要他来调整播放的快慢么?就像视频那样?
Read frames and play it on device /dev/mixer
while (av_read_frame (pFormatCtx, &packet) >= 0)
{
// Is this a packet from the audio stream?
if (packet.stream_index == audioStream)
{
// Decode audio frame
len = avcodec_decode_audio (pCodecCtx,
(int16_t *)audio_buf,
&data_size,
packet.data,
packet.size );
if ( len < 0 ){
printf("+----- error in decoding audio frame/n");
exit(0);
}
printf("len:%d", len);
printf("+----- audio frame i:%d, data_size:%d, packet.size:%ld, packet.pts:%ld, packet.dts:%ld/n", /
i++, data_size, packet.size, packet.pts, packet.dts);
write(fd, audio_buf, data_size);
usleep(40000);
}
else
{
printf("+----- this is not audio frame/n");
}
// Free the packet that was allocated by av_read_frame
av_free_packet (&packet);
}