Aplicaciones basadas en Gstreamer

La capa superior de la aplicación comprende cómo crear una aplicación de reproducción de video basada en la API de gstreamer.

2.1 Reproducción de MP3 basada en la API de gstreamer

Un proceso básico

1. Inicialice gst e inicie un bucle principal.

2. Defina una canalización y los elementos necesarios en la canalización, como el receptor del decodificador de origen, etc.

3. Configure cierta información sobre los componentes necesarios.

4. Tome el autobús y controle los mensajes del autobús.

5. Llame a gst_bin_add_many para formar una canalización a partir de cada elemento y luego llame a gst_element_link_many para vincular estos componentes.

6. Establezca el estado de la canalización en reproducción.

7. Comience a ejecutar este bucle principal.

8. En la función de devolución de llamada de escucha del bus, si se monitorea el evento al final del archivo, salga del bucle principal.

9. Ejemplo de código:


  

 GMainLoop *loop;

    GstElement *pipeline,*source,*decoder,*sink;//定义组件

    GstBus *bus;

    gst_init(&argc,&argv);

    loop = g_main_loop_new(NULL,FALSE);//创建主循环,在执行 g_main_loop_run后正式开始循环

    if(argc != 2)

    {

        g_printerr("Usage:%s <mp3 filename>\n",argv[0]);

        return -1;

    }

    //创建管道和组件

    pipeline = gst_pipeline_new("audio-player");

    source = gst_element_factory_make("filesrc","file-source");

    decoder = gst_element_factory_make("mad","mad-decoder");

    sink = gst_element_factory_make("autoaudiosink","audio-output");

    if(!pipeline||!source||!decoder||!sink){

        g_printerr("One element could not be created.Exiting.\n");

        return -1;

    }



    //设置 source的location 参数。即 文件地址.

    g_object_set(G_OBJECT(source),"location",argv[1],NULL);



    //得到 管道的消息总线

    bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));

   //添加消息监视器

    gst_bus_add_watch(bus,bus_call,loop);

    gst_object_unref(bus);



    //把组件添加到管道中.管道是一个特殊的组件,可以更好的让数据流动

    gst_bin_add_many(GST_BIN(pipeline),source,decoder,sink,NULL);



   //依次连接组件

   gst_element_link_many(source,decoder,sink,NULL);



   //开始播放

    gst_element_set_state(pipeline,GST_STATE_PLAYING);

    g_print("Running\n");



    //开始循环

    g_main_loop_run(loop);

    g_print("Returned,stopping playback\n");

    gst_element_set_state(pipeline,GST_STATE_NULL);

    gst_object_unref(GST_OBJECT(pipeline));

    return 0;

2.2 cuartos multimedia

  qt opera a través de QMediaPlayer. QMediaPlayer integra operaciones que incluyen salida de audio y lectura de archivos de audio en la parte inferior. Es un núcleo de reproductor encapsulado de alto nivel. Al llamarlo, puede ingresar reproducción de video y audio en cualquier formato y reproducirlo. Ajuste de estado.

    Código para usar QMediaPlayer para reproducir una pieza musical

player = new QMediaPlayer;

player->setMedia(QMediaContent(QUrl::fromLocalFile("coolsong.mp3")));

player->play();

El primer paso: crear un objeto QMediaplayer; el segundo paso: configurar el archivo multimedia actualmente reproducido; el tercer paso: reproducir.

Gstreamer implementa la capa inferior de QMediaPlayer a través de una serie de encapsulaciones.

  

 proceso específico

    Después de una serie de llamadas, todas las operaciones de QMediaPlayer se llamarán a QGstreamerPlayerSession. En el constructor de QGstreamerPlayerSession, llame a gst_element_factory_make("playbin3", NULL);

Se creó el canal playbin de gstreamer, se configuraron videoSink y AudioSink de playbin, se monitoreó el bus y finalmente se configuraron funciones de devolución de llamada para algunos mensajes. Como se muestra en la figura siguiente, todas las operaciones de pausa, parada y otras operaciones de control de reproducción de QMediaPlayer finalmente establecen diferentes estados para este contenedor de reproducción. Como operación de reproducción: gst_element_set_state(m_playbin, GST_STATE_PLAYING)

 

Después de comprender los conceptos y procesos básicos de gstreamer, es necesario profundizar en el código fuente de gstreamer para comprender el mecanismo de funcionamiento de gstreamer.

Supongo que te gusta

Origin blog.csdn.net/H2008066215019910120/article/details/112564981
Recomendado
Clasificación