- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑如何设计一个循环,从互联网读取帧,馈送到 ffmpeg 解码器,然后从 ffmpeg 接收以发送到渲染。
考虑这个伪代码循环:
while true {
auto packet = receive_packet_from_network();
avcodec_send_packet(packet);
auto frame = alloc_empty_frame();
int r = avcodec_receive_frame(&frame);
if (r==0) {
send_to_render(frame);
}
}
做
avcodec_send_packet
或
avcodec_receive_frame
block 或 ffmpeg 有一个内部线程?我担心这个循环,因为它等待来自网络的数据包,所以它有一些延迟。我想做这样的事情:
//thread 1
while true {
auto packet = receive_packet_from_network();
avcodec_send_packet(packet);
}
//thread 2
while true {
auto frame = alloc_empty_frame();
int r = avcodec_receive_frame(&frame);
if (r==0) {
send_to_render(frame);
}
}
但是,现在,如果
avcodec_receive_frame
不阻塞,那么这个循环会跑得太快,每秒几百万次。
最佳答案
事件驱动,像这样:
while true {
auto packet = receive_packet_from_network();
std::async(std::launch::async, [packet]() {
avcodec_send_packet(packet);
auto frame = alloc_empty_frame();
do{
int r = avcodec_receive_frame(&frame);
if (r == 0) {
send_to_render(frame);
}
}while(r == 0)
});}
关于c++ - 是否 avcodec_receive_frame 和 avcodec_send_packet block /如何设计 ffmpeg 解码循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64114447/
vcodec_receive_frame函数没有接收到其余的帧。我测试了视频总共有 132 帧,它只收到了 125 帧 在视频结尾丢失 7 帧 .如何找回丢失的帧? 但是奇怪的事情发生了。如您所见,我
我正在尝试解码帧,但内存使用量随着每一帧(更具体地说,每次调用 avcodec_send_packet)而增长,直到最后代码因 bad_alloc 而崩溃。这是基本的解码循环: int rfret =
我正在使用 ffmpeg 库对 MPEG 传输流中的视频进行解码、缩放和重新编码。我刚刚从源代码重新编译到 v3.3.2,并从旧的 avcodec_decode_video2() API 更改为新的发
我是 FFmpeg 的新手。使用 nice repo(https://github.com/leandromoreira/ffmpeg-libav-tutorial) 学习时,在 hello_worl
我正在使用 QOpenGL 小部件绘制框架。但是,我正在努力使用 avcodec_receive_frame 获取帧。它在 else if (ret == AVERROR(EAGAIN)) block
我正在学习在我的引擎中使用 ffmpeg, 我想解码视频流的第一帧并将其输出到图像文件。 我试过了,就是不知道为什么它返回-11。 我的代码:(最后 5 行代码中的错误,第 70-74 行) Link
我正在关注本教程:http://dranger.com/ffmpeg/tutorial01.html 并试图更改一些已弃用的功能,所以我不得不尝试使用 avcodec_send_packet和 avc
我正在考虑如何设计一个循环,从互联网读取帧,馈送到 ffmpeg 解码器,然后从 ffmpeg 接收以发送到渲染。 考虑这个伪代码循环: while true { auto packet =
我是一名优秀的程序员,十分优秀!