- 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/
我正在尝试解码帧,但内存使用量随着每一帧(更具体地说,每次调用 avcodec_send_packet)而增长,直到最后代码因 bad_alloc 而崩溃。这是基本的解码循环: int rfret =
我正在使用 ffmpeg 库对 MPEG 传输流中的视频进行解码、缩放和重新编码。我刚刚从源代码重新编译到 v3.3.2,并从旧的 avcodec_decode_video2() API 更改为新的发
我正在尝试从来自 mp4 容器的压缩数据中解码数据包。我已经获得了 AVCodecContext,并从 avreadframe() 获得了数据包。问题是当我尝试解码数据包时,eclipse 一直说无法
以下基于 ffmpeg 的代码片段正在 Windows VC2012、VC20155、VC2017 上构建和运行。 在 Ubuntu LTS 16.04 上使用 gcc,这给了我一些问题,更具体地说,
我正在尝试优化一款播放视频的软件,它在内部使用 FFmpeg 库进行解码。我们发现,在一些大型(4K,60fps)视频中,解码一帧的时间有时比应该显示该帧的时间要长;遗憾的是,由于问题域,简单地缓冲/
Windows 10 x64,ffmpeg: 3.1, 预建 dll 这里绝对是新手。 我正在尝试一个非常基本的案例来解码视频文件中的帧,但每次尝试都失败了。最终的代码片段如下所示: #define
我正在考虑如何设计一个循环,从互联网读取帧,馈送到 ffmpeg 解码器,然后从 ffmpeg 接收以发送到渲染。 考虑这个伪代码循环: while true { auto packet =
我是一名优秀的程序员,十分优秀!