前言
这篇文章关于ffmpeg的解决方案仅提供参考,如有错误,欢迎指正。
播放、暂停
在音视频播放的时候,我们均是将读取到的Packet放入到队列中,然后再从队列中取出packet进行解码播放。所以在播放、暂停时可以在队列的取出上面做文章。
int FFmpegMusic::get(AVPacket *avPacket) {
LOGE("取出队列")
pthread_mutex_lock(&mutex);
while (isPlay){
if(!queue.empty()&&isPause){
LOGE("ispause %d",isPause);
//如果队列中有数据可以拿出来
if(av_packet_ref(avPacket,queue.front())){
break;
}
//取成功了,弹出队列,销毁packet
AVPacket *packet2 = queue.front();
queue.pop();
av_free(packet2);
break;
} else{
LOGE("音频执行wait")
LOGE("ispause %d",isPause);
pthread_cond_wait(&cond,&mutex);
}
}
pthread_mutex_unlock(&mutex);
return 0;
}