我有一个特定的设置,其中网页从我的节点服务器请求媒体文件。该请求是采用“ 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上执行搜索请求以从特定位置提取缓冲区。
如果任何人对什么地方出了问题或什么地方不知道,甚至可行,那都将有所帮助。
提前谢谢