gpt4 book ai didi

c++ - 流媒体。将 appsink 写入 filesink

转载 作者:行者123 更新时间:2023-11-28 02:34:18 27 4
gpt4 key购买 nike

我已经为 appsrc 编写了一个代码到 appsink 并且它可以工作。我看到了实际的缓冲区。它以 H264(vpuenc=avc) 编码。现在我想把它保存在一个文件(filesink)中。我如何处理它?

应用:

int main(int argc, char *argv[]) {

gst_init (NULL, NULL);

GstElement *pipeline, *sink;
gchar *descr;
GError *error = NULL;
GstAppSink *appsink;

descr = g_strdup_printf (
"mfw_v4lsrc device=/dev/video1 capture_mode=0 ! " // grab from mipi camera
"ffmpegcolorspace ! vpuenc codec=avc ! "
"appsink name=sink"
);
pipeline = gst_parse_launch (descr, &error);
if (error != NULL) {
g_print ("could not construct pipeline: %s\n", error->message);
g_error_free (error);
exit (-1);
}

gst_element_set_state(pipeline, GST_STATE_PAUSED);
sink = gst_bin_get_by_name (GST_BIN (pipeline), "sink");
appsink = (GstAppSink *) sink;
gst_app_sink_set_max_buffers ( appsink, 2); // limit number of buffers queued
gst_app_sink_set_drop( appsink, true ); // drop old buffers in queue when full

gst_element_set_state (pipeline, GST_STATE_PLAYING);


int i = 0;
while( !gst_app_sink_is_eos(appsink) )
{

GstBuffer *buffer = gst_app_sink_pull_buffer(appsink);
uint8_t* data = (uint8_t*)GST_BUFFER_DATA(buffer);
uint32_t size = GST_BUFFER_SIZE(buffer);

gst_buffer_unref(buffer);
}
return 0; }

最佳答案

如果如评论中所述,您真正想知道的是如何在 GStreamer 中制作网络视频流,您可能应该关闭此问题,因为您走错了路。您不需要为此使用 appsink 或 filesink。您需要研究的是与 RTP、RTSP、RTMP、MPEGTS 甚至 MJPEG(如果您的图像尺寸足够小)相关的 GStreamer 元素。

这里有两个基本的发送/接收视频流管道:

gst-launch-0.10 v4l2src ! ffmpegcolorspace ! videoscale ! video/x-raw-yuv,width=640,height=480 ! vpuenc ! h264parse ! rtph264pay ! udpsink host=localhost port=5555

gst-launch-0.10 udpsrc port=5555 ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264depay ! h264parse ! ffdec_h264 ! videoconvert ! ximagesink

关于c++ - 流媒体。将 appsink 写入 filesink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28040857/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com