使用appsink将视频发送到浏览器

时间:2018-06-26 14:34:09

标签: browser gstreamer

我有一个特定的设置,其中网页从我的节点服务器请求媒体文件。该请求是采用“ https://localhost/vid?w=800&h=448&ts=0&custid=45&camid=369”格式的网址。它请求包含时间戳ts的视频。我有另一个执行此操作的管道,可以抓取正确的视频。

因此,我创建了一个用于接收此视频(h265),进行多路分解,dec解析并解析并将其提供给appsink的管道。

代码如下: // **************************************************** **** /

const char *caps = "video/webm"; 
gchar *filePath = "mediafile.h265";
gchar *string = g_strdup_printf("filesrc location=\"%s\" do-timestamp=true name=filesrc ! \\
            matroskademux name=d d.video_0 ! queue ! h265parse ! libde265dec ! \\ 
            videoscale ! video/x-raw,width=%s,height=%s ! \\
            vp8enc cpu-used=16 end-usage=cbr target-bitrate=1024000 token-partitions=2 static-threshold=0 min-quantizer=4 max-quantizer=56 \\
            keyframe-max-dist=999999 threads=2 buffer-size=900000000 buffer-initial-size=800000000 buffer-optimal-size=9000000 resize-allowed=0 deadline=1 ! \\
            queue ! webmmux ! appsink caps=\"%s\" name=video_appsink",
            filePath, newSessionInfo->m_width.c_str(), newSessionInfo->m_height.c_str(), caps);

pipeline_main = (gst_parse_launch(string, NULL)); //GST_PIPELINE
g_free(string);

sink_main = GST_APP_SINK(gst_bin_get_by_name(GST_BIN(pipeline_main), "video_appsink"));

/* to be notified of messages from this pipeline, mostly EOS */
GstBus *bus = gst_element_get_bus(pipeline_main);
gst_bus_add_watch(bus, (GstBusFunc)onBusMessage, streamData);
gst_object_unref(bus);

g_object_set(G_OBJECT(sink_main), "emit-signals", TRUE, "sync", TRUE, NULL);
g_object_set(G_OBJECT(sink_main), "wait-on-eos", TRUE, NULL); //, "drop", TRUE

GstStateChangeReturn state_ret = gst_element_set_state(pipeline_main, GST_STATE_PLAYING);

// ********************************************* ******* /

在另一个函数中,我通过gst_app_sink_pull_sample从appsink中提取缓冲区,并将其通过我的节点服务器馈送到调用网页。

一切正常。但是,我有一个大问题。我无法在我的appsink上执行搜索请求以从特定位置提取缓冲区。

如果任何人对什么地方出了问题或什么地方不知道,甚至可行,那都将有所帮助。

提前谢谢

0 个答案:

没有答案