- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 link 中的复用示例中我正在尝试使用 avcodec_send_frame()
和 avcodec_receive_packet()
而不是 avcodec_encode_audio2()
/avcodec_encode_video2()
因为它们已被弃用。在
352 ret = avcodec_encode_audio2(c, &pkt, frame, &got_packet);
353 if (ret < 0) {
354 fprintf(stderr, "Error encoding audio frame: %s\n", av_err2str(ret));
355 exit(1);
356 }
357
358 if (got_packet) {
359 ret = write_frame(oc, &c->time_base, ost->st, &pkt);
360 if (ret < 0) {
361 fprintf(stderr, "Error while writing audio frame: %s\n",
362 av_err2str(ret));
363 exit(1);
364 }
365 }
366
367 return (frame || got_packet) ? 0 : 1;
并且在
522 ret = avcodec_encode_video2(c, &pkt, frame, &got_packet);
523 if (ret < 0) {
524 fprintf(stderr, "Error encoding video frame: %s\n", av_err2str(ret));
525 exit(1);
526 }
527
528 if (got_packet) {
529 ret = write_frame(oc, &c->time_base, ost->st, &pkt);
530 } else {
531 ret = 0;
532 }
533
534 if (ret < 0) {
535 fprintf(stderr, "Error while writing video frame: %s\n", av_err2str(ret));
536 exit(1);
537 }
538
539 return (frame || got_packet) ? 0 : 1;
分配什么
got_packet
使用
avcodec_send_frame()
时的变量和
avcodec_receive_packet()
功能以及如果我这样做如何更改代码?到目前为止我已经尝试过了
ret = avcodec_send_frame(c, frame);
if (ret < 0) {
fprintf(stderr, "Error sending the frame to the audio encoder\n");
exit(1);
}
if (ret = 0) {
got_packet = avcodec_receive_packet(c, &pkt);
if (got_packet == AVERROR(EAGAIN) || got_packet == AVERROR_EOF){
fprintf(stderr, "Error receiving packet\n");
return -1;}
else if (got_packet < 0) {
fprintf(stderr, "Error encoding audio frame\n");
exit(1);
}
ret1 = write_frame(oc, &c->time_base, ost->st, &pkt);
if (ret1 < 0) {
fprintf(stderr, "Error while writing audio frame: %s\n",
av_err2str(ret1));
exit(1);
}
av_packet_unref(&pkt);
}
return (frame || got_packet) ? 0 : 1;
但不工作,我很难让它工作。
最佳答案
在 avcodec_encode_video2()
, got_packet_ptr
将是 0
当输出数据包为空时。 got_packet_ptr
将等于 1
当输出数据包非空并且在排空模式下(在文件结束的情况下)NULL
发送至avcodec_encode_video2()
直到所有缓冲项都被刷新,之后它变为 0
再次。
在新 API 中,返回值来自 avcodec_receive_packet()
将等于 0
当缓冲区已满或进入排空模式时,类似于got_packet_ptr
等于 1
. avcodec_receive_packet()
否则返回负错误代码 AVERROR(EAGAIN)
这意味着输出在当前状态下不可用 - 用户必须尝试发送输入或 AVERROR_EOF
即,编码器已完全刷新,将不再有输出数据包。
使用 muxing.c
中的新 API以下方式的示例对我有用:
ret = avcodec_send_frame(c, frame);
if (ret < 0) {
fprintf(stderr, "Error sending a frame for encoding\n");
exit(1);
}
while (ret >= 0) {
ret = avcodec_receive_packet(c, &pkt);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF){
return (ret==AVERROR(EAGAIN)) ? 0:1;
}
else if (ret < 0) {
fprintf(stderr, "Error during encoding\n");
exit(1);
}
ret = write_frame(oc, &c->time_base, ost->st, &pkt);
if (ret < 0) {
fprintf(stderr, "Error while writing video frame: %s\n", av_err2str(ret));
exit(1);
}
av_packet_unref(&pkt);
}
return (frame) ? 0 : 1;
关于ffmpeg - 如何用 avcodec_send_frame() 和 avcodec_receive_packet() 替换 avcodec_encode_audio2()/avcodec_encode_video2()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59470927/
我正在尝试创建一个转换器,它将用一组图像制作视频。一切都在它的位置,AVFormatContext,AVCodecContext,AVCodec。我正在从 UIImage 创建 YUV AVFrame
有相关的答案,但没有回答我的问题。我正在使用 FFmpeg api 仅对 mpeg1video 进行内部编码,我想从第一帧开始立即从编码器中获取数据包,但我从 avcodec_receive_pack
我尝试使用 ffmpeg API 从一系列输入图像创建视频。 首先我从输入文件中读取 AVFrame 然后传递给 avcodec_send_frame() , 但是当我调用 avcodec_get_p
我尝试使用 ffmpeg 捕获 Windows 屏幕。 一切正常,但 avcodec_receive_packet 返回错误 AVERROR(EAGAIN) 我无法理解为什么会这样。 有人可以给建议吗
我正在尝试将 CMSampleBufferRef 转换为 AVPacket 并将其写入文件,但不推荐使用 avcodec_encode_video2() 方法,调用新的 API avcodec_rec
在 link 中的复用示例中我正在尝试使用 avcodec_send_frame()和 avcodec_receive_packet()而不是 avcodec_encode_audio2()/avco
我是一名优秀的程序员,十分优秀!