微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试在 C++ 应用程序中使用来自 ffmpeg 的 libavdevice 的输出

如何解决尝试在 C++ 应用程序中使用来自 ffmpeg 的 libavdevice 的输出

我正在尝试在我公司正在开发的视频流应用中添加对 Decklink 设备的支持。我们使用 C++ 和 FFMpeg 作为处理库。其他类型的输入和输出正在工作。添加对decklink输入的支持真的很容易,它很有效(至少在我们测试过的设备上——DeckLink SDI Quad)。但是对于输出......到目前为止,我已经为此奋斗了 3 天,但没有任何结果。我找不到任何文档,也找不到任何代码示例,我应该如何初始化 AVFormatContext 和其他需要的部分。

通过阅读FFMpeg 的decklink avdevice 代码,我设法达到了AVFormatContext 不再抱怨数据格式不正确的地步。我使用wrapped_avframe 和pcm_s16le 作为编解码器,我正在将视频和音频参数设置(转换)为设备接受的值,我正在发送带有av_interleaved_write_frame 的AVPackets,但它不起作用。正在接受几个数据包,生成了几个 libDeckLinkAPI.so 线程,并且它只是锁定 - 我的输出线程锁定了对 av_interleaved_write_frame 的一些 80-ish 调用。这是一个僵局,它永远不会更进一步。调试器只显示它正在等待某些东西:

#0  futex_wait_cancelable (private=<optimized out>,expected=0,futex_word=0x7fe34c0402c8) at ../sysdeps/nptl/futex-internal.h:183
#1  __pthread_cond_wait_common (abstime=0x0,clockid=0,mutex=0x7fe34c040178,cond=0x7fe34c0402a0) at pthread_cond_wait.c:508
#2  __pthread_cond_wait (cond=0x7fe34c0402a0,mutex=0x7fe34c040178) at pthread_cond_wait.c:638
#3  0x00007fe35c69bd04 in ?? () from /lib/libDeckLinkAPI.so
#4  0x00007fe371394ac7 in ?? () from /lib/libavdevice.so.58
#5  0x00007fe370f249ad in ?? () from /lib/libavformat.so.58
#6  0x00007fe370f26615 in av_interleaved_write_frame () from /lib/libavformat.so.58

我显然做错了什么,但我找不到什么...... 任何人都可以向我指出一些文档或(工作)代码示例应该如何完成?

提前致谢:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。