gstreamermm:如何提取 Gst::P layBin 的最后一帧视频
gstreamermm: How can I extract the last video frame of a Gst::PlayBin
我尝试使用 gstreamermm 1.0 提取视频的最后一帧,并与示例 https://github.com/GNOME/gstreamermm/blob/master/examples/media_player_gtkmm/player_window.cc 密切合作,但我只得到白色像素。
如何将流的最后一帧视频提取为原始 rgba 或 bgra 数据?
void
MediaStream::setup ()
{
player = Gst::PlayBin::create ("player");
vsink = Gst::XImageSink::create ("vsink");
player -> set_property ("video-sink", vsink);
player -> signal_video_changed () .connect (sigc::mem_fun (*this, &MediaStream::on_video_changed));
}
void
MediaStream::on_video_changed ()
{
Glib::RefPtr <Gst::Pad> pad = player -> get_video_pad (0);
if (pad)
pad -> add_probe (Gst::PAD_PROBE_TYPE_BUFFER, sigc::mem_fun (*this, &MediaStream::on_video_pad_got_buffer));
}
Gst::PadProbeReturn
MediaStream::on_video_pad_got_buffer (const Glib::RefPtr <Gst::Pad> & pad, const Gst::PadProbeInfo & data)
{
const auto width = vsink -> get_width ();
const auto height = vsink -> get_height ();
std::vector <uint8_t> image (width * height * 4);
// Got no data
data .get_buffer () -> extract (0, image .data (), image .size ());
return Gst::PAD_PROBE_OK;
}
错过C++的 C 版本工作正常:
const auto sample = gst_base_sink_get_last_sample (vsink -> Gst::BaseSink::gobj ());
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- lower_bound()返回最后一个元素
- 从控制台中删除最后打印的元素
- 获取向量C++中第一个值和最后一个值的和
- 如何在c++中录制具有精确帧时间戳的视频
- 获取用C/C++打印的最后一个字符串
- 如何在QT中的自定义视频小工具t上绘制矩形
- 读取最后一行代码算法 - c++ 时出现问题
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为什么这个程序返回最后一个单词而不是最长的单词?
- 如何使用OpenCV-C++编写*.mp4视频?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么我的最后一个 ELSE 条件无法正确执行
- 如何在最后一步使用CryptDecrypt解决NTE_BAD_DATA
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- OpenCV QT,显示视频的帧(不使用while循环)
- Opencv 视频帧.我只能看到最后一帧
- gstreamermm:如何提取 Gst::P layBin 的最后一帧视频