[转载]从ffmpeg中提取audio player??


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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值