• gstreamer让playbin能够播放rtp over udp流数据


    最近一段时间在研究传屏低延迟传输相关的一些东西。本来想使用gstreamer来验证下rtp over udp传送h264 nal数据相关

    的,结果发现竟然不能用playbin来播放rtp的数据!诚然,这也有其原因,因为rtp需要一些带外数据,这是不能简单通过流

    来检查的,然而也没有手段简单传入sdp给playbin,让其正常工作。没有办法,在gstreamer-devel和https://bugzilla.gnome.org

    bug管理平台上搜了一圈,有人碰到类似的问题,但是没有完整的解决方案,于是完善了rtpsrc的插件,可以支持类似下面的播放:

    gst-launch-1.0 playbin uri="rtp://10.9.44.117:5000?media=video&clock-rate=90000&encoding-name=H264&payload=96&do-retransmission=true&latency-ms=50&rtp-profile=1&rtx-host=192.168.31.141&rtx-port=5006"
    

     这样子感觉方便了不少,直接可以通过uri 查询参数把配置信息传递给udpsrc ,构造caps参数,对,没错,新插件rtpsrc的作用

    就是起一个桥梁作用,本质还是利用udpsrc和rtpbin一起能协同工作,构造后大致的pipeline类似下面这样:

    // RTP receiver (example)
    // receives h264 encoded RTP video on port 5000, RTCP is received on  port 5001.  
    // the receiver RTCP reports are sent to port 5005
    //-----------------------RtpSrc-------------
    //|            .-------.      .----------. |   .---------.   .-------.   .-----------.
    //| RTP        |udpsrc |      | rtpbin   | |   |h264depay|   |h264dec|   |xvimagesink|
    //| port=5000  |      src->recv_rtp recv_rtp->sink     src->sink   src->sink         |
    //|            '-------'      |          | |   '---------'   '-------'   '-----------'
    //|                           |          | |-------------------------    
    //|                           |          |     .-------.            |    
    //|                           |          |     |udpsink|  RTCP      | 
    //|                           |    send_rtcp->sink     | port=5005  |
    //|            .-------.      |          |     '-------' sync=false |
    //| RTCP       |udpsrc |      |          |               async=false|
    //| port=5001  |     src->recv_rtcp      |                          |
    //|            '-------'      '----------'                          | 
    //------------------------------------------------------------------|
    

    代码已经以补丁的形式,提交到了bugzilla,能不能被合并,或者什么时候被合并进主分支,我不太清楚,但是它至少是可以正常工作的,

    有这方面需求的同仁,可以移步这里:https://bugzilla.gnome.org/show_bug.cgi?id=703111 ,去合并进入自己的gstreamer sdk中,

    应该能使您的生活更轻松一些。

  • 相关阅读:
    Oracle表空间管理
    Oracle创建函数
    Oracle触发器
    Oracle概要文件
    Oracle结构控制语句
    比较实用的网站
    Java23种设计模式之单例模式
    Java 对象属性的遍历
    JQuery 多个ID对象绑定一个click事件
    好习惯的养成****
  • 原文地址:https://www.cnblogs.com/shakin/p/6142219.html
Copyright © 2020-2023  润新知