gstreamer 配置+剖析编解码

打印 上一主题 下一主题

主题 455|帖子 455|积分 1365

一. 安装gstreamer

1.1 Windows下安装

官网链接:https://gstreamer.freedesktop.org/download/#windows

两个都要下载。安装的时间,在custom选择安装路径。然后返回上一步选择complete完全安装,两个安装方式一样。

1.2 配置情况

将 D:\gstreamer\1.0\msvc_x86_64\bin 添加至情况变量
在vs工程中使用:

  • 在c/c++ -------通例--------附加包罗目次 增长如下目次
   D:\gstreamer\1.0\msvc_x86_64\include\gstreamer-1.0
D:\gstreamer\1.0\msvc_x86_64\include\glib-2.0
D:\gstreamer\1.0\msvc_x86_64\include\libxml2
D:\gstreamer\1.0\msvc_x86_64\include
  

  • 链接器----通例----附加库目次,增长 如下目次
   D:\gstreamer\1.0\msvc_x86_64\lib
  

  • 链接器----输入-----附加依赖性 增长
   gobject-2.0.lib;glib-2.0.lib;gstreamer-1.0.lib
  

  • 调试----情况
   path=%path%;F:\gstreamer\1.0\x86\bin
  1.3 Ubuntu下安装

起首更新系统的软件包
  1. sudo apt-get update
复制代码
  1. sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
复制代码
安装完成后,检查GStreamer是否安装正确。
  1. gst-inspect-1.0 --version
复制代码
表现版本说明成功安装。
二. 测试

2.1 命令行测试

  1. gst-launch-1.0.exe -v playbin uri=file:/C:\\Users\\26366\\Desktop\\宣传片成片.mp4
复制代码
输出视频即为成功。
2.2 c++测试

  1. // GstreamerHelloWorld.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
  2. //
  3. #include <iostream>
  4. #include <gst/gst.h>
  5. #include <glib.h>
  6. int main(int  argc, char* argv[]) {
  7.         GstElement* pipeline;
  8.         GstElement* source, * filter, * sink;
  9.         //init
  10.         gst_init(&argc, &argv);
  11.         //creat pipeline
  12.         pipeline = gst_pipeline_new("my-pipline");
  13.         create elements
  14.         source = gst_element_factory_make("fakesrc", "source");
  15.         filter = gst_element_factory_make("identity", "filter");
  16.         sink = gst_element_factory_make("fakesink", "sink");
  17.         //将元组添加到管道中
  18.         gst_bin_add_many(GST_BIN(pipeline), source, filter, sink, NULL);
  19.         //连接
  20.         if (!gst_element_link_many(source, filter, sink, NULL)) {
  21.                 g_warning("failed to link elements\n");
  22.                 std::cout << "failed to link elements!\n";
  23.         }
  24.         else
  25.         {
  26.                 std::cout << "Hello GStreamer!\n";
  27.         }
  28.         /*在链接不同的组件之前,你需要确保这些组件都被加在同一个箱柜中,
  29.         因为将一个组件加载到一个箱柜中会破坏该组件已存在的一些链接关系。
  30.         同时,你不能直接链接不在同一箱柜或管道中的组件。*/
  31.         return 0;
  32. }
复制代码
输出Hello GStreamer!即为配置成功。
三.应用

3.1 例一:udp裸流,未使用RTP封装

编码:
  1. gst-launch-1.0 filesrc location=C:\\Users\\26366\\Desktop\\宣传片成片.mp4 ! qtdemux ! avdec_h264 ! x264enc ! udpsink host=192.168.0.105 port=5600
复制代码
对应解码:
  1. gst-launch-1.0 udpsrc port=5600 ! h264parse ! avdec_h264 ! videoconvert ! autovideosink
复制代码
c++解码:
  1. // GstreamerHelloWorld.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
  2. //
  3. #include <iostream>
  4. #include <gst/gst.h>
  5. #include <glib.h>
  6. static GstElement* pipeline = nullptr;
  7. static GstBus* bus = nullptr;
  8. static GstMessage* msg = nullptr;
  9. // 回调函数,用于处理 GStreamer 消息
  10. static gboolean  on_message(GstBus* bus, GstMessage* msg, gpointer data) {
  11.         GError* err;
  12.         gchar* debug_info;
  13.         switch (GST_MESSAGE_TYPE(msg)) {
  14.         case GST_MESSAGE_ERROR:
  15.                 gst_message_parse_error(msg, &err, &debug_info);
  16.                 g_printerr("Error received from element %s: %s\n", GST_OBJECT_NAME(msg->src), err->message);
  17.                 g_printerr("Debugging information: %s\n", debug_info ? debug_info : "none");
  18.                 g_clear_error(&err);
  19.                 g_free(debug_info);
  20.                 g_main_loop_quit((GMainLoop*)data);
  21.                 break;
  22.         default:
  23.                 break;
  24.         }
  25.         return TRUE;
  26. }
  27. int main(int  argc, char* argv[]) {
  28.         gst_init(&argc, &argv);
  29.         gst_debug_set_active(TRUE);
  30.         gst_debug_set_default_threshold(GST_LEVEL_DEBUG);
  31.         GMainLoop* loop = g_main_loop_new(NULL, FALSE);
  32.         // 创建 GStreamer 管道
  33.         pipeline = gst_parse_launch("udpsrc port=5600 ! h264parse ! avdec_h264 ! videoconvert ! autovideosink", NULL);
  34.         bus = gst_element_get_bus(pipeline);
  35.         gst_bus_add_watch(bus, on_message, loop);
  36.         gst_object_unref(bus);
  37.         // 开始播放
  38.         gst_element_set_state(pipeline, GST_STATE_PLAYING);
  39.         // 运行主循环
  40.         g_print("Playing stream...\n");
  41.         g_main_loop_run(loop);
  42.         // 清理
  43.         gst_element_set_state(pipeline, GST_STATE_NULL);
  44.         gst_object_unref(pipeline);
  45.         g_main_loop_unref(loop);
  46.         return 0;
  47. }
复制代码
3.2 例二,使用RTP封装

编码
  1. gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! 'video/x-raw,format=(string)NV12,width=640,height=480,framerate=(fraction)30/1' ! queue ! x264enc  ! udpsink host=127.0.0.1 port=5000 sync=false
复制代码
解码:
  1. gst-launch-1.0 udpsrc port=5000 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
  2.     ! rtpjitterbuffer latency=200 \
  3.     ! rtspsrc ! avdec_h264 ! videoconvert ! autovideosink
复制代码
参数表明:


  • udpsrc port=5000:设置 GStreamer 从 UDP 端口 5000 接收数据。(可替换:rtspsrc ,filesrc ,v4l2src)
  • caps:设置接收数据的属性,包罗媒体范例(video)、时钟频率(90000,对应于 90 kHz的时钟,常用于视频)、编码名称(H264)。
  • rtpjitterbuffer:用于处理网络抖动,latency参数设置为缓冲区的延迟时间(单元为纳秒)。
  • rtspsrc:使用 RTP 流,需要使用 rtspsrc 而不是 udpsrc
  • avdec_h264:H.264 视频解码器。
  • videoconvert:用于转换视频到表现装备支持的格式。
  • autovideosink:自动选择一个合适的视频渲染器(例如,X 服务器或 GL 渲染器)用来展示视频。
   gst-launch-1.0 udpsrc port=14556 caps=“application/x-rtp, media=(string)video, clock-rate=(int)90000, enc
oding-name=(string)H264” ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表