• nx平台视频推流


    #include
    #include rtsp-server/rtsp-server.h>
    #define DEFAULT_RTSP_PORT "8554"
    ​//./test-launch2 --gst-debug-level=3 "(v4l2src device=/dev/video2 ! nvvidconv ! omxh265enc  !  rtph265pay name=pay0 pt=0 )"
    static char *port = (char *) DEFAULT_RTSP_PORT;

    static GOptionEntry entries[] = {
      {"port", 'p', 0, G_OPTION_ARG_STRING, &port,
          "Port to listen on (default: " DEFAULT_RTSP_PORT ")", "PORT"},
      {NULL}
    };

    int main (int argc, char *argv[])
    {
      GMainLoop *loop;
      GstRTSPServer *server;
      GstRTSPMountPoints *mounts;
      GstRTSPMediaFactory *factory;
      GOptionContext *optctx;
      GError *error = NULL;

      optctx = g_option_context_new (" - Test RTSP Server, Launch\n\n"
          "Example: \"( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )\"");
      g_option_context_add_main_entries (optctx, entries, NULL);
      g_option_context_add_group (optctx, gst_init_get_option_group ());
      if (!g_option_context_parse (optctx, &argc, &argv, &error)) {
        g_printerr ("Error parsing options: %s\n", error->message);
        g_option_context_free (optctx);
        g_clear_error (&error);
        return -1;
      }
      g_option_context_free (optctx);

      loop = g_main_loop_new (NULL, FALSE);

      /* create a server instance */
      server = gst_rtsp_server_new ();
      g_object_set (server, "service", port, NULL);

      /* get the mount points for this server, every server has a default object
       * that be used to map uri mount points to media factories */
      mounts = gst_rtsp_server_get_mount_points (server);

      /* make a media factory for a test stream. The default media factory can use
       * gst-launch syntax to create pipelines.
       * any launch line works as long as it contains elements named pay%d. Each
       * element with pay%d names will be a stream */
      factory = gst_rtsp_media_factory_new ();
      gst_rtsp_media_factory_set_launch (factory, argv[1]);

       //新增加 客户端之间共享管道 不用重新建立
      gst_rtsp_media_factory_set_shared (factory, TRUE);
      
      /* attach the test factory to the /test url */
      gst_rtsp_mount_points_add_factory (mounts, "/test", factory);

      /* don't need the ref to the mapper anymore */
      g_object_unref (mounts);

      /* attach the server to the default maincontext */
      gst_rtsp_server_attach (server, NULL);

      /* start serving */
      g_print ("stream ready at rtsp://127.0.0.1:%s/test\n", port);
      g_main_loop_run (loop);

      return 0;
    }

    编译:

    //gcc test-launch2.c -o test-launch2 $(pkg-config --cflags --libs gstreamer-rtsp-server-1.0 gstreamer-1.0)

    硬件解码:
    ./test-launch2 --gst-debug-level=3 "(v4l2src device=/dev/video2 ! nvvidconv ! omxh264enc  !  rtph264pay name=pay0 pt=0 )"

    软件解码:
    ./test-launch2 --gst-debug-level=3 "( v4l2src device=/dev/video2 ! videoconvert! videoscale ! video/x-raw, width=640, height=480, framerate=25/1 ! queue ! x264enc bitrate=2048 !  rtph264pay name=pay0 pt=96 )"

  • 相关阅读:
    docker安装elastic search和kibana
    黑马旅游网-JavaWeb学成练手小项目-包含老师资料
    字节跳动社招内推,长期有效,长期有效,长期有效
    vscode config
    面试官:Redis如何保证高可用?
    集成学习与随机森林
    知识表示学习(四):TransD
    OTA升级常见错误码汇总-CSDN博客
    Transformer实战-evaluate is all you need
    无需公网IP,在家SSH远程连接公司内网服务器「cpolar内网穿透」
  • 原文地址:https://blog.csdn.net/qq_33301482/article/details/133363837