Ffmpeg 如何复制从av_read_帧接收的AVPicture。什么是正确的方法?
我一直在尝试用android编写一个rtsp播放器。我是新手。并想知道如何存储从av_read_帧检索到的数据包以供进一步使用。 [例如,不同的线程来解码它Ffmpeg 如何复制从av_read_帧接收的AVPicture。什么是正确的方法?,ffmpeg,streaming,video-streaming,sdl,sdl-2,Ffmpeg,Streaming,Video Streaming,Sdl,Sdl 2,我一直在尝试用android编写一个rtsp播放器。我是新手。并想知道如何存储从av_read_帧检索到的数据包以供进一步使用。 [例如,不同的线程来解码它 while (1) { av_read_frame(pFormatCtx, &packet) >= 0) { if (packet.stream_index == videoStream) { sendPacketToLInkedList ( packet); } sendPacket
while (1)
{
av_read_frame(pFormatCtx, &packet) >= 0) {
if (packet.stream_index == videoStream) {
sendPacketToLInkedList ( packet);
}
sendPacketToLinkedList (AVPacket *pkt)
{
AVPacket *refPacket;
refPacket = pkt; // How log will it be valid ??
}
我只是想知道从av_read_帧检索到的数据包有效期有多长?。ffmpeg实际上有一些:
int-av\u-read\u帧(AVFormatContext*s,AVPacket*pkt)
如果pkt->buf为空,则数据包在下一个av_read_frame()或avformat_close_input()之前有效。否则,数据包将无限期有效。在这两种情况下,当不再需要数据包时,必须使用av_free_数据包释放数据包。对于视频,数据包只包含一帧。对于音频,如果每个帧具有已知的固定大小(例如PCM或ADPCM数据),则它包含整数个帧。如果音频帧具有可变大小(例如,MPEG音频),则它包含一个帧
如果您想要
av\u read\u frame()
-分配的AVPacket
s在周围停留更长时间,总会有。谢谢您的回复。如果pkt->buf,您的意思是在执行av_读取_帧之后?还是以前?所以如果pkt buf为NULL,那么我们需要执行av_copy_packet(),否则,我不需要复制,对吗?如果我错了,请纠正我?据我所知,如果pkt->buf
在av\u read\u frame()
之前是NULL
(即,您只需memset()
ted分配的堆栈AVPacket
),您需要av\u copy\u packet()
。