首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ALSA引起GStreamer视频问题

ALSA引起GStreamer视频问题
EN

Stack Overflow用户
提问于 2021-04-13 22:46:57
回答 1查看 101关注 0票数 1

我正在使用GStreamer从一个带有皮卡姆模块和USB麦克风的Pi3B上传输实时视频/音频。我的最终目标是在实时视频/音频流中使用来自一个USB麦克风的音频,并将其作为python脚本的输入。我知道这可以用ALSA插件来完成,并且能够用这个/etc/asound.conf配置来演示它:

代码语言:javascript
复制
pcm.myTest {
    type dsnoop
    ipc_key 2241234
    slave {
        pcm "hw:1,0"
        channels 1
    }
}

pcm.!default {
        type asym
        playback.pcm {
                type plug
                slave.pcm "hw:0,0"
        }
        capture.pcm {
                type plug
                slave.pcm "myTest"
        }
}

视频/音频流使用以下GStreamer设置工作得很好,但我无法在其他应用程序中使用麦克风(注意"hw:1,0"):

代码语言:javascript
复制
#!/bin/bash
gst-launch-1.0 -v rpicamsrc vflip=true hflip=false \
               name=src preview=0 fullscreen=0 bitrate=10000000 \
               annotation-mode=time annotation-text-size=20 \
               ! video/x-h264,width=960,height=540,framerate=24/1 \
               ! h264parse \
               ! rtph264pay config-interval=1 pt=96 \
               ! queue max-size-bytes=0 max-size-buffers=0 \
               ! udpsink host=192.168.1.101 port=5001 \
               alsasrc device=hw:1,0 \
               ! audioconvert \
               ! audioresample \
               ! opusenc \
               ! rtpopuspay \
               ! queue max-size-bytes=0 max-size-buffers=0 \
               ! udpsink host=192.168.1.101 port=5002

下面(使用dsnoop)在视频流中引起了一个问题,它看起来像是某种同步问题,它不是一个很好的24帧每秒,而是每2-3秒得到一帧。音频继续工作良好,我能够同时在其他应用中使用USB麦克风。

代码语言:javascript
复制
#!/bin/bash
gst-launch-1.0 -v rpicamsrc vflip=true hflip=false \
               name=src preview=0 fullscreen=0 bitrate=10000000 \
               annotation-mode=time annotation-text-size=20 \
               ! video/x-h264,width=960,height=540,framerate=24/1 \
               ! h264parse \
               ! rtph264pay config-interval=1 pt=96 \
               ! queue max-size-bytes=0 max-size-buffers=0 \
               ! udpsink host=192.168.1.101 port=5001 \
               alsasrc device=plug:myTest \
               ! audioconvert \
               ! audioresample \
               ! opusenc \
               ! rtpopuspay \
               ! queue max-size-bytes=0 max-size-buffers=0 \
               ! udpsink host=192.168.1.101 port=5002

我尝试了一些东西,我已经发现在一些外围相关的论坛,但没有效果,我觉得有点卡住了。你们中有谁建议让一个流很好地发挥dsnoop,以便我可以避免为这个项目购买另一个麦克风?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-25 00:53:30

对于后人来说,我从GStreamer开发者论坛那里得到了一个很好的提示。

provide-clock=false添加到alsasrc行就可以了!因此,GStreamer调用变成:

代码语言:javascript
复制
#!/bin/bash
gst-launch-1.0 -v rpicamsrc vflip=true hflip=false \
               name=src preview=0 fullscreen=0 bitrate=10000000 \
               annotation-mode=time annotation-text-size=20 \
               ! video/x-h264,width=960,height=540,framerate=24/1 \
               ! h264parse \
               ! rtph264pay config-interval=1 pt=96 \
               ! queue max-size-bytes=0 max-size-buffers=0 \
               ! udpsink host=192.168.1.101 port=5001 \
               alsasrc device=plug:myTest provide-clock=false\
               ! audioconvert \
               ! audioresample \
               ! opusenc \
               ! rtpopuspay \
               ! queue max-size-bytes=0 max-size-buffers=0 \
               ! udpsink host=192.168.1.101 port=5002

这种方法的一个小副作用是音频与视频不同步,大约0.5秒。我很想知道,是否有一种方法可以更好地同步两者,或者这只是尝试使用dsnoop设备和gstreamer时不可避免的权衡之一?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67083324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档