gstreamer学习笔记

gstreamer学习笔记

      • 1. GStreamer中文教程
        • 1.1. GStreamer的elements仅有四种状态
      • 2. demo
        • 2.1. hello-world

1. GStreamer中文教程

GStreamer中文教程
gstreamer-example代码列子

1.1. GStreamer的elements仅有四种状态

GStreamer的elements仅有四种状态,四种状态从NULL<->READY<->PAUSE<->PLAYING必须依次切换,即使越级切换状态成功也是接口内部完成了相关的操作。

  • GST_STATE_NULL:默认状态,在这个状态不会申请任何资源,当element的引用计数变为0时必须处于NULL状态。其他状态切换到这个状态会释放掉所有已申请的资源。
  • GST_STATE_READY:在这个状态下element会申请相关的全局资源,但不涉及stream数据。简单来说就是NULL->READY仅是打开相关的硬件设备,申请buffer;PLAYING->READY就是把停止读取stream数据。
  • GST_STATE_PAUSE:这个状态实际是GStreamer中最常见的一个状态,在这个阶段pipeline打开了stream但并未处理它,例如sink element已经读取到了视频文件的第一帧并准备播放。
  • GST_STATE_PLAYING:PLAYING状态和PAUSE状态实际并没有区别,只是PLAYING允许clock 润run。

2. demo

2.1. hello-world

代码将打开一个窗口并显示一个带有音频的电影。由于这段媒体是从网络上获取的,所以可能需要等待几秒才会显示窗口,等待时间取决于网络连接的速度。
01_helloworld.c

#include 

int main (int argc, char *argv[])
{
 GstElement *pipeline;
 GstBus *bus;
 GstMessage *msg;

 /* Initialize GStreamer */
 gst_init (&argc, &argv);

 /* Build the pipeline */
 pipeline =
     gst_parse_launch
    ("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm",
     NULL);

 /* Start playing */
 gst_element_set_state (pipeline, GST_STATE_PLAYING);

 /* Wait until error or EOS */
 bus = gst_element_get_bus (pipeline);
 msg =
     gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE,
     GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

 /* Free resources */
 if (msg != NULL)
   gst_message_unref (msg);
 gst_object_unref (bus);
 gst_element_set_state (pipeline, GST_STATE_NULL);
 gst_object_unref (pipeline);
 return 0;
}
  • 手动编译
pkg-config --cflags --libs gstreamer-1.0
gcc 01_helloworld.c -o 01_helloworld `pkg-config --cflags --libs gstreamer-1.0`
./01_helloworld
  • CMake构建
    CMakeLists.txt
cmake_minimum_required(VERSION 3.10)

project(01_helloworld)
set(CMAKE_CXX_STANDARD 11)

include(FindPkgConfig)# equals `pkg-config --cflags --libs gstreamer-1.0`
pkg_check_modules(GST   REQUIRED gstreamer-1.0)
pkg_check_modules(GSTAPP REQUIRED gstreamer-app-1.0)

include_directories(
   ${GST_INCLUDE_DIRS}
   ${GSTAPP_INCLUDE_DIRS}
)

link_directories(
   ${GST_LIBRARY_DIRS}
   ${GSTAPP_LIBRARY_DIRS}
)

add_executable(${PROJECT_NAME}
  01_helloworld.c
)

target_link_libraries(${PROJECT_NAME}
   ${GST_LIBRARIES}
   ${GSTAPP_LIBRARIES}
)

cmake -H. -Bbuild/
cd build
make
./basic-tutorial-1

你可能感兴趣的:(人工智能,gstreamer,人工智能)