av_find_best_stream 与 avcodec_find_decoder 的解码器 return
Decoder return of av_find_best_stream vs. avcodec_find_decoder
libav 的 av_find_best_stream
函数(libav 11.7、Windows、i686、GPL)的文档指定了一个参数,该参数可用于接收指向适当 AVCodec
的指针:
decoder_ret - if non-NULL, returns the decoder for the selected stream
还有一个 avcodec_find_decoder
函数可以找到给定 ID 的 AVCodec
。
不过官方demuxing + decoding example使用av_find_best_stream
找流,却选择用avcodec_find_decoder
找编解码器代替av_find_best_stream
的编解码器return参数:
ret = av_find_best_stream(fmt_ctx, type, -1, -1, NULL, 0);
...
stream_index = ret;
st = fmt_ctx->streams[stream_index];
...
/* find decoder for the stream */
dec = avcodec_find_decoder(st->codecpar->codec_id);
与类似的东西相反:
ret = av_find_best_stream(fmt_ctx, type, -1, -1, &dec, 0);
我的问题很简单:使用 av_find_best_stream
的 return 参数与使用 avcodec_find_decoder
查找 AVCodec
之间有区别吗?
我问的原因是因为示例选择使用 avcodec_find_decoder
而不是看似更方便的 return 参数,我无法判断示例是否出于特定原因或不是。文档本身有点参差不齐且不连贯,因此很难判断这样的事情是否出于特定的重要原因而完成。我不知道这个例子是在暗示它 "should" 是那样做的,还是例子作者这样做是出于一些更随意的个人原因。
av_find_best_stream
在内部使用 avcodec_find_decoder
的方式与您的代码示例中的方式几乎相同。然而,当向它请求解码器时,av_find_best_stream
的行为发生了变化——即,它将尝试在每个候选流上使用 avcodec_find_decoder
,如果失败,它将丢弃候选并继续下一个。最后它将 return 与其解码器一起进行最佳流式传输。如果不请求解码器,它只会 return 最佳流而不检查它是否可以解码。
因此,如果您只想获取单个 video/audio 流并且您不打算编写一些自定义流选择逻辑,那么我会说使用 av_find_best_stream
获取解码器没有任何缺点.
libav 的 av_find_best_stream
函数(libav 11.7、Windows、i686、GPL)的文档指定了一个参数,该参数可用于接收指向适当 AVCodec
的指针:
decoder_ret - if non-NULL, returns the decoder for the selected stream
还有一个 avcodec_find_decoder
函数可以找到给定 ID 的 AVCodec
。
不过官方demuxing + decoding example使用av_find_best_stream
找流,却选择用avcodec_find_decoder
找编解码器代替av_find_best_stream
的编解码器return参数:
ret = av_find_best_stream(fmt_ctx, type, -1, -1, NULL, 0);
...
stream_index = ret;
st = fmt_ctx->streams[stream_index];
...
/* find decoder for the stream */
dec = avcodec_find_decoder(st->codecpar->codec_id);
与类似的东西相反:
ret = av_find_best_stream(fmt_ctx, type, -1, -1, &dec, 0);
我的问题很简单:使用 av_find_best_stream
的 return 参数与使用 avcodec_find_decoder
查找 AVCodec
之间有区别吗?
我问的原因是因为示例选择使用 avcodec_find_decoder
而不是看似更方便的 return 参数,我无法判断示例是否出于特定原因或不是。文档本身有点参差不齐且不连贯,因此很难判断这样的事情是否出于特定的重要原因而完成。我不知道这个例子是在暗示它 "should" 是那样做的,还是例子作者这样做是出于一些更随意的个人原因。
av_find_best_stream
在内部使用 avcodec_find_decoder
的方式与您的代码示例中的方式几乎相同。然而,当向它请求解码器时,av_find_best_stream
的行为发生了变化——即,它将尝试在每个候选流上使用 avcodec_find_decoder
,如果失败,它将丢弃候选并继续下一个。最后它将 return 与其解码器一起进行最佳流式传输。如果不请求解码器,它只会 return 最佳流而不检查它是否可以解码。
因此,如果您只想获取单个 video/audio 流并且您不打算编写一些自定义流选择逻辑,那么我会说使用 av_find_best_stream
获取解码器没有任何缺点.