我从你的问题中了解到,你有AVPackets并想播放视频。实际上这是两个问题; 1.解码你的数据包,和2.播放视频。
对于使用FFmpeg解码数据包,您应该查看AVPacket,AVCodecContext和avcodec_decode_video2的文档以获得一些想法;总的想法是要沿着线做一些事情(只是在浏览器中写到这,采取与一粒盐):
//the context, set this appropriately based on your video. See the above links for the documentation
AVCodecContext *decoder_context;
std::vector<AVPacket> packets; //assume this has your packets
...
AVFrame *decoded_frame = av_frame_alloc();
int ret = -1;
int got_frame = 0;
for(AVPacket packet : packets)
{
avcodec_get_frame_defaults(frame);
ret = avcodec_decode_video2(decoder_context, decoded_frame, &got_frame, &packet);
if (ret <= 0) {
//had an error decoding the current packet or couldn't decode the packet
break;
}
if(got_frame)
{
//send to whatever video player queue you're using/do whatever with the frame
...
}
got_frame = 0;
av_free_packet(&packet);
}
这是一个非常粗略的草图,但是这对于一般的想法你解码AVPackets的问题。至于你播放视频的问题,你有很多选择,这可能会更多地取决于你的客户。你所问的是一个非常大的问题,我建议你熟悉FFmpeg文档和the FFmpeg site提供的示例。希望有道理
感谢您的回答,我会花时间更深入地调查和理解FFmpeg。 – Sapphire 2013-04-17 06:21:47