• 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 )"

  • 相关阅读:
    手动编译安装Nginx
    Vue2.0开发之——webpack基础-打包发布项目(10)
    冬季来到安化云台山,你来得正是时候
    WordPress主题网站首页添加好看的四格小工具教程
    【ElasticSearch】基于Docker 部署 ElasticSearch 和 Kibana,使用 Kibana 操作索引库,以及实现对文档的增删改查
    什么是线程池?
    安装 docker 可视化工具 portainer
    JAVA计算机毕业设计基于网络平台个人博客系统Mybatis+系统+数据库+调试部署
    2023年第三届HiPChips解读
    k8s 读书笔记 - kubernetes 是什么以及我们为什么要使用它?
  • 原文地址:https://blog.csdn.net/qq_33301482/article/details/133363837