C++ 如何使用FFMPEG播放存储为视频数据包的NAL单元的H.264流

C++ 如何使用FFMPEG播放存储为视频数据包的NAL单元的H.264流,c++,ffmpeg,video-streaming,h.264,C++,Ffmpeg,Video Streaming,H.264,我正在编写一个客户端-服务器系统,该系统使用FFMPEG库将H.264流解析为服务器端的NAL单元,然后使用通道编码将它们通过网络发送到客户端,在客户端,我的应用程序必须能够播放视频 问题是如何在我的应用程序中将接收到的AV数据包(NAL单元)作为视频流播放。 我发现它很有用,并将其用作服务器端和客户端的基础 一些与播放视频相关的示例代码或资源不是来自文件,而是来自使用FFMPEG库的程序中的数据将非常有用 我确信接收到的信息足以播放视频,因为我试图将接收到的数据保存为.h264或.mp4文件,

我正在编写一个客户端-服务器系统,该系统使用FFMPEG库将H.264流解析为服务器端的NAL单元,然后使用通道编码将它们通过网络发送到客户端,在客户端,我的应用程序必须能够播放视频

问题是如何在我的应用程序中将接收到的AV数据包(NAL单元)作为视频流播放。 我发现它很有用,并将其用作服务器端和客户端的基础

一些与播放视频相关的示例代码或资源不是来自文件,而是来自使用FFMPEG库的程序中的数据将非常有用


我确信接收到的信息足以播放视频,因为我试图将接收到的数据保存为.h264或.mp4文件,并且可以由VLC播放器播放。

根据我从您的问题中了解的情况,您有AV数据包,希望播放视频。实际上,这是两个问题;1.解码你的数据包,和2。播放视频

对于解码您的数据包,使用FFmpeg,您应该查看文档,并获得一些想法;一般的想法是,你想做一些事情(只是在浏览器中写下这一点,带着一粒盐)大致如下:

//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);
}
//在上下文中,根据您的视频进行适当设置。有关文档,请参见上面的链接
AVCodecContext*解码器上下文;

向量。希望这有意义

谢谢你的回答,我会花时间深入调查和了解FFmpeg。