理论上,当用户访问我的网站时,他们可以看到视频播放但听不到声音(这是正确的方式)。有时,音频将随视频自动播放,这不是我想要的。
我想知道是否有一种方法可以通过Python和Firefox检测是否正在播放任何音频?我的内部测试将加载页面并执行相当多的Selenium检查,以确保一切都正常。我想添加一个测试,通过Python或Selenium检查音频是否正在播放并标记它。
有什么想法吗?
我有相似的问题。我处理很多网络音频。我必须自动检查音频退化、音频播放等。我在Groovy或Ruby中找不到一个合适的库(我没有检查Python),所以我调用了一个已安装的程序(sox),它会实时检查音频是否被听到。
这是我的Groovy调用/脚本:
def audioCheck = "sox -t coreaudio Soundflower /Users/me/project/record.wav silence 1 0.1 1% 1 .1 1%".execute()
audioCheck.waitFor()
println "EXIT VALUE FOR SOX IS: ${audioCheck.exitValue()}"
if(audioCheck.exitValue() == 0){
// some stuff would happen now, if exit code is 0
}
关于Core Audio和“Soundflower”
在sox调用中,使用-t coreaudio指定音频板(在Linux上可能会使用alsa代替“coreaudio”,而“coreaudio”是OSX的音频接口)。“Soundflower”参数是我在Soundflower中创建的通道。这对我来说很重要,因为我正在进行音频质量检查时需要隔离录制声音。例如,如果您使用默认通道(如alsa default或coreaudio default),它会捕捉麦克风的声音……所以如果旁边的人打喷嚏……测试就毁了。
使用虚拟音频通道(如在OSX上使用Soundflower),你可以将所有音频“输出”都放到“Soundflower”中,然后运行sox命令……这样你只会听到从虚拟通道出来的系统音频。
您也可以使用默认通道(但是当听到房间里的其他噪音时,它会停止录制)。
我使用Groovy任务异步运行该代码……因此该代码被包装在类似以下代码块中:
def listener = task { ... my script above ... }
由于它是异步监听的,因此它不会阻塞测试的其余部分。
Sox 命令
实际使用的sox实时命令来自于这个人的视频(查看一下,因为他使用了一些不同的参数):
https://www.youtube.com/watch?v=Q5ntlKE0ze4
扩展它
我进一步推动了它,能够自动记录浏览器播放的音频,然后使用PESQ算法确定记录的音频与原始播放的音频有多接近。如果你对此感兴趣,请随意查看我的文章:
http://sdet.us/webrtc-audio-quality-automation-with-pesq/
Python PCAP Scraping
也许与你正在做的事情无关,但我也尝试使用Pyshark库从数据包捕获中重建音频……这更复杂,也许更脆弱。但如果感兴趣,这是我的实现: