Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Gstreamer pipeline in Qt multimedia



  • Hi there,

    I am currently working on TI Jacinto 6 EVM board. I have qml app that displays four video output from 4 rtsp cameras. But there are few bugs in gstreamer which makes the app to crash . alt text

    So is there any way to know the underlying gstreamer pipeline which is used to stream videos?
    I have tried to set the environment variable GST_DEBUG but with that output its almost impossible to understand what pipeline qt is using at backend. Any help??

    Regards,
    Sam


  • Qt Champions 2019

    @Sam_George said in Gstreamer pipeline in Qt multemedia:

    But there are few bugs in gstreamer which makes the app to crash

    Are you sure it is not something in your app?



  • No its just simple Mediaplayer app..

    Window {
        id:cameraTestWindow
        visible: true
        width: 1900
        height:1200
        Component.onCompleted: {
            mediaplayer1.play()
            
        }
        
        Rectangle {
            id:mainrect
            anchors.fill: parent
            color:"black"
            
            
            MediaPlayer {
                id: mediaplayer1
                source: "rtsp://admin:password@192.168.15.51:554/cam/realmonitor?channel=1&subtype=1"
                onPlaying: {
                    mediaplayer2.play()
                }
            }
            
            VideoOutput {
                id:videoOp1
                x:620//250//90//0
                y:80//30//0
                width:352//530//320
                height:288//250//240
                source: mediaplayer1
                MouseArea {
                    anchors.fill: parent
                    onClicked: {
                        
                        videoOp1.width = 1100;
                        videoOp1.height = 850;
                        videoOp2.visible = false
                        videoOp3.visible = false
                        videoOp4.visible = false
                    }
                    onDoubleClicked: {
                        
                        videoOp1.width = 352;
                        videoOp1.height = 288;
                        videoOp2.visible = true
                        videoOp3.visible = true
                        videoOp4.visible = true
                        
                    }
                }
                
            }
            
            
            MediaPlayer {
                id: mediaplayer2
                source: "rtsp://admin:password@192.168.15.52:554/cam/realmonitor?channel=1&subtype=1"
                onPlaying: {
                    mediaplayer3.play()
                }
            }
            
            VideoOutput {
                id:videoOp2
                x:1170//250//90//0
                y:80//30//0
                width:352//530//320
                height:288//250//240
                source: mediaplayer2
                MouseArea {
                    width: 352
                    height: 282
                    anchors.fill: parent
                    onClicked: {
                        
                        videoOp2.width = 1100;
                        videoOp2.height = 850;
                        videoOp2.x = 620
                        videoOp1.visible = false
                        videoOp3.visible = false
                        videoOp4.visible = false
                    }
                    onDoubleClicked: {
                        
                        videoOp2.width = 352;
                        videoOp2.height = 288;
                        videoOp2.x = 1170
                        videoOp1.visible = true
                        videoOp3.visible = true
                        videoOp4.visible = true
                        
                    }
                }
            }
            
            MediaPlayer {
                id: mediaplayer3
                source: "rtsp://admin:password@192.168.15.53:554/cam/realmonitor?channel=1&subtype=1"
                onPlaying: {
                    mediaplayer4.play()
                }
            }
            
            VideoOutput {
                id:videoOp3
                x:620//250//90//0
                y:505//30//0
                width:352//530//320
                height:288//250//240
                source: mediaplayer3
                MouseArea {
                    anchors.fill: parent
                    onClicked: {                    
                        videoOp3.width = 1100;
                        videoOp3.height = 850;
                        videoOp3.y = 80;
                        videoOp1.visible = false
                        videoOp2.visible = false
                        videoOp4.visible = false
                    }
                    onDoubleClicked: {                    
                        videoOp3.width = 352;
                        videoOp3.height = 288;
                        videoOp3.y = 505;
                        videoOp1.visible = true
                        videoOp2.visible = true
                        videoOp4.visible = true                    
                    }
                }
            }        
            MediaPlayer {
                id: mediaplayer4
                source: "rtsp://admin:password@192.168.15.54:554/cam/realmonitor?channel=1&subtype=1"
            }
            
            VideoOutput {
                id:videoOp4
                x:1170//250//90//0
                y:505//30//0
                width:352//530//320
                height:288//250//240
                source: mediaplayer4
                MouseArea {
                    anchors.fill: parent
                    onClicked: {
                        videoOp4.width = 1100;
                        videoOp4.height = 850;
                        videoOp4.x = 620
                        videoOp4.y = 80
                        videoOp1.visible = false
                        videoOp2.visible = false
                        videoOp3.visible = false
                    }
                    onDoubleClicked: {                    
                        videoOp4.width = 352;
                        videoOp4.height = 288;
                        videoOp4.x = 1170
                        videoOp4.y = 505
                        videoOp1.visible = true
                        videoOp2.visible = true
                        videoOp3.visible = true                    
                    }
                }
            }
        }
    }
    
    
    


  • @Sam_George said in Gstreamer pipeline in Qt multemedia:
    It always shows some failure in buffer allocation whenever that green color patch appears. And there are times when the app works perfectly. The error log which i get is,

    ../git/libdce_linux.c:115:    dce_buf_lock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_release: Error: unable to release buffer
    ../git/libdce_linux.c:145:    dce_buf_unlock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_use: Error: unable to declare buffer use
    ../git/libdce_linux.c:115:    dce_buf_lock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_use: Error: unable to declare buffer use
    ../git/libdce_linux.c:115:    dce_buf_lock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_use: Error: unable to declare buffer use
    ../git/libdce_linux.c:115:    dce_buf_lock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_release: Error: unable to release buffer
    ../git/libdce_linux.c:145:    dce_buf_unlock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_use: Error: unable to declare buffer use
    ../git/libdce_linux.c:115:    dce_buf_lock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_use: Error: unable to declare buffer use
    ../git/libdce_linux.c:115:    dce_buf_lock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_release: Error: unable to release buffer
    ../git/libdce_linux.c:145:    dce_buf_unlock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_use: Error: unable to declare buffer use
    ../git/libdce_linux.c:115:    dce_buf_lock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_release: Error: unable to release buffer
    ../git/libdce_linux.c:145:    dce_buf_unlock    ERROR: Failed eError == DCE_EOK error val -5MmRpc_use: Error: unable to declare buffer use
    [ 1539.100785] rpmsg_rpc rpmsg-dce: unwinding UVA to RDA translations! translation = 1
    [ 1539.140317] rpmsg_rpc rpmsg-dce: failed to translate all pointers for remote core!
    ../git/libdce_linux.c:115:d    ce_buf_lock    ERROR: Failed eError == DE_EOK error val -5MmRpc_call: Error: write failed
    

    So if i get to known what pipeline qml uses at backend, can help us to make the patch accordingly.


  • Lifetime Qt Champion

    Hi,

    You can find the code related to GStreamer in the corresponding plugin folder.



  • @SGaist , I just want to understand how qt multemedia implements gstreamer at the backend. Is there any way?


  • Lifetime Qt Champion

    Yes, by reading the code of the plugin. You'll see how the pipeline is created.



  • Sorry for late response, but QMediaPlayer uses just playbin gst element,

    so simply gst-launch-1.0 playbin is a way to test QMediaPlayer

    and now it is possible to dump dot files by GST_DEBUG_DUMP_DOT_DIR=. ./app

    to see actual pipeline (it will be playbin)


Log in to reply