将Webm视频从URL流式传输到C ++ windows.h应用程序

时间:2019-11-27 20:26:29

标签: c++ windows winapi

我正在使用C ++制作自己的Windows应用程序。我想在此应用程序中播放一个.webm视频,但我想从一个URL播放它,而不是从我将.exe放入的目录中加载它。运行Windows 10,仅使用Emacs和g ++进行编写/编译。

有人知道我该怎么做吗?我需要什么包括,有可能等吗?

注意:webm视频也可以转换为mp4。

为澄清起见,“ Windows应用程序”是指其中之一:

HWND hwnd = CreateWindowEx(0, CLASS_NAME, L"WindowName", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,  CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

我想继续使用它,因为我可以用它制作一个漂亮的,无边界的窗口!

2 个答案:

答案 0 :(得分:1)

sample使用了IMFPMediaPlayer::CreateMediaItemFromURL,您可以将URL直接传递给函数PlayMediaFile,例如:

WCHAR uri[] = L"http://dl5.webmfiles.org/big-buck-bunny_trailer.webm";
hr = PlayMediaFile(hwnd, uri);

答案 1 :(得分:0)

将gstreamer与uridecodebin一起使用(您需要设置uri属性)。可能需要在src和接收器之间添加额外的autovideoconvert和/或videoscale元素。

GstElement *pipeline = gst_pipeline_new ("xvoverlay");
GstElement *src = gst_element_factory_make ("uridecodebin", NULL);
GstElement *sink = gst_element_factory_make ("d3dvideosink", NULL);

g_object_set (G_OBJECT (src), "uri","some_url", NULL);

gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
gst_element_link (src, sink);
gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (sink), (guintptr)hwnd);
GstStateChangeReturn sret = gst_element_set_state (pipeline,
  GST_STATE_PLAYING);

如果已安装gstreamer,请使用以下方法测试设置:

gst-launch-1.0 uridecodebin uri="http://dl5.webmfiles.org/big-buck-bunny_trailer.webm" ! d3dvideosink