原始 h.264 比特流解码
raw h.264 bitstream decoding
我可以从相机获取原始的 h.264 帧。 (它不包含任何网络 headers,例如 rtsp、http)。
它们是 h.264 原始数据。
我将这些数据逐帧推送到queue。
我用谷歌搜索了许多 ffmpeg 示例,它使用 avformat_open_input() 和本地文件路径或网络路径。
当我将帧保存到文件并使用 avformat_open_input().
时,我可以看到视频
我的问题是我想实时解码帧,而不是在将其保存为文件之后。
有人对此有任何想法吗?
谢谢!
你不需要avformat,你需要avcodec。 avformat 用于解析容器和协议。 avcodec 用于编码和解码基本流(您已有的)。
AVPacket avpkt; int err, frame_decoded = 0;
AVCodec *codec = avcodec_find_decoder ( AV_CODEC_ID_H264 );
AVCodecContext *codecCtx = avcodec_alloc_context3 ( codec );
avcodec_open2 ( codecCtx, codec, NULL );
// Set avpkt data and size here
err = avcodec_decode_video2 ( codecCtx, avframe, &frame_decoded, &avpkt );
我可以从相机获取原始的 h.264 帧。 (它不包含任何网络 headers,例如 rtsp、http)。 它们是 h.264 原始数据。 我将这些数据逐帧推送到queue。 我用谷歌搜索了许多 ffmpeg 示例,它使用 avformat_open_input() 和本地文件路径或网络路径。 当我将帧保存到文件并使用 avformat_open_input().
时,我可以看到视频我的问题是我想实时解码帧,而不是在将其保存为文件之后。 有人对此有任何想法吗?
谢谢!
你不需要avformat,你需要avcodec。 avformat 用于解析容器和协议。 avcodec 用于编码和解码基本流(您已有的)。
AVPacket avpkt; int err, frame_decoded = 0;
AVCodec *codec = avcodec_find_decoder ( AV_CODEC_ID_H264 );
AVCodecContext *codecCtx = avcodec_alloc_context3 ( codec );
avcodec_open2 ( codecCtx, codec, NULL );
// Set avpkt data and size here
err = avcodec_decode_video2 ( codecCtx, avframe, &frame_decoded, &avpkt );