Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Browser 如何将gstreamer videosink嵌入浏览器_Browser_Gtk_Gstreamer - Fatal编程技术网

Browser 如何将gstreamer videosink嵌入浏览器

Browser 如何将gstreamer videosink嵌入浏览器,browser,gtk,gstreamer,Browser,Gtk,Gstreamer,我正在开发一个webkit内核浏览器插件。 大多数插件遵守NPAPI的规则。 调用NP_new函数后,浏览器应调用Npp_setwindows等。 但chrome浏览器不运行此功能。 它调用Np_destory直接完成实例。 所以我无法让浏览器的xid设置视频接收器。 你怎么能解决呢 当我使用firefox浏览器时,我可以得到xid。 不幸的是,当我使用gst_x_overlay_set_xwindow_id嵌入浏览器时。 浏览器崩溃了。 下面是一些测试代码 gst_init (NULL,

我正在开发一个webkit内核浏览器插件。 大多数插件遵守NPAPI的规则。 调用NP_new函数后,浏览器应调用Npp_setwindows等。 但chrome浏览器不运行此功能。 它调用Np_destory直接完成实例。 所以我无法让浏览器的xid设置视频接收器。 你怎么能解决呢

当我使用firefox浏览器时,我可以得到xid。 不幸的是,当我使用gst_x_overlay_set_xwindow_id嵌入浏览器时。 浏览器崩溃了。 下面是一些测试代码

  gst_init (NULL, NULL);

    player->pipeline = gst_element_factory_make ("playbin2", "playstation");
    LOGMSG("create playbin2");
    player->audio_sink = gst_element_factory_make ("alsasink", "audio-sink");
    if (NULL == player->audio_sink)
    {
        player->audio_sink = gst_element_factory_make ("autoaudiosink", "audio-sink");
        g_warning ("Could not create a GST audio_sink. Audio unavailable.");
    }

    player->video_sink = gst_element_factory_make ("xvimagesink", "video-sink");
    if (NULL == player->video_sink)
    {
        //pvrvideosink is used for some special solution ,but this case never used
        player->video_sink = gst_element_factory_make ("pvrvideosink","video-sink");

        g_warning ("Could not create a GST video_sink. Video unavailable.");
    }
   g_object_set (player->video_sink, "force-aspect-ratio", TRUE, NULL);

    sprintf(buff," \n pipleline:%p\n video:%p\n audio:%p\n uri:%s\n xid:%d",
               player->pipeline,player->video_sink,player->audio_sink,player->uri,player->xid);
    LOGMSG(buff);enter code here
// log shows all the content is ok
    g_object_set (player->pipeline, "video-sink", player->video_sink, NULL);
    g_object_set (player->pipeline, "audio-sink", player->audio_sink, NULL);
    g_object_set (player->pipeline, "uri",player->uri, NULL);

    player->bus = gst_element_get_bus (GST_ELEMENT (player->pipeline));
    gst_bus_add_watch(player->bus,(void *)process_events,player);

    LOGMSG("start set winid");
/*
chrome can not get the browser xid ,so it display the image in fullscreen way with the player 's own window. The firefox can not display the image at all. It crashed here.
*/
    if (player->xid != 0 )
    {
        gst_x_overlay_prepare_xwindow_id(GST_X_OVERLAY(GST_ELEMENT(player->video_sink)));
        gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(GST_ELEMENT(player->video_sink)),player->xid);

        gboolean spt = gst_x_overlay_set_render_rectangle
                       (GST_X_OVERLAY(GST_ELEMENT(player->video_sink)),10,10,480,270);
        if (!spt)
        {
            LOGMSG("not support the rectangle");
        }
        gst_x_overlay_expose(GST_X_OVERLAY(GST_ELEMENT(player->video_sink)));

    }

    LOGMSG("set xwinid finished");
    gst_element_set_state(player->pipeline,GST_STATE_PLAYING);

    loop = g_main_loop_new (NULL, FALSE);
    LOGMSG("start player loop");
    g_main_loop_run (loop); 

有人能给我一些关于这些的信息吗

致以最良好的祝愿,
forest

尝试使用

从你的应用程序中注释videosink和相关代码,你能听到音频吗?因为我使用“playbin2”,我认为很难注释videosink代码。但是如果我不使用gst_x_overlay_set_xwindow_id将播放区域嵌入浏览器,该插件可以构建自己的窗口并运行良好。上周有人向gstreamer-devel邮件列表发送了一封电子邮件,称有一个新版本可用。也许值得将您的版本更新为最新版本。