buildroot ffmpeg 及 PJSIP安装使用详解

server/2025/1/11 20:43:37/

目录

  • buildroot pjsip安装
    • 编译
    • 声卡验证
  • buildroot ffmpeg常用命令
  • arecord & aplay 声卡调测命令
    • 开发板接USB音箱
    • 开发板自带音箱

  • 硬件: rk3568平台, 系统: buildroot, 交叉编译pjsip,并介绍pjsip录放音常用测试验证命令, 以及ffmpeg音视频频采集命令。

buildroot_pjsip_4">buildroot pjsip安装

编译

 ./configure CC=/home/ney/test/sdk419/RK356x/buildroot/output/rockchip_rk3568/host/bin/aarch64-buildroot-linux-gnu-gcc CXX=/home/ney/test/sdk419/RK356x/buildroot/output/rockchip_rk3568/host/bin/aarch64-buildroot-linux-gnu-g++  --host=arm-linux-gnueabihf  --enable-static --prefix=/home/ney/tool/pjproject-2.13.1/tmp --disable-libwebrtc --disable-libyuv  --disable-sslmake dep && make
#链接失败Relocations in generic ELF (EM: 62)
#原因一: 是同一目录编译过x86版本,没有clean干净
#原因二: configure 参数中未配置CXX,部分程序是用CXX编译的。
make cleanrm -rf /pjsip-apps/build/output/ ./pjmedia/build/output/ ./pjlib-util/build/output/ ./pjnath/build/output/ ./pjnath/build/output ./pjlib/build/output./pjsua-arm-unknown-linux-gnueabihf --capture-dev=0 --playback-dev=0

声卡验证

#放音验证,确认pjsua使用了正常的声卡
./pjsua --play-file file.wav#指定 录音及放音设备
./pjsua-arm-unknown-linux-gnueabihf --playback-dev=0 --capture-dev=0 --log-level=5 --play-file file.wav##使用pjsip提供的工具录音, 其使用的是pulse接口库。【 PulseAudio Sound Server】
oot@RK356X:~/pjsip-bin/samples/arm-unknown-linux-gnueabihf# ./recfile file.wav 
01:36:50.744         os_core_unix.c !pjlib 2.13.1 for POSIX initialized
01:36:50.794             alsa_dev.c  Added sound device pulse
01:36:50.801             alsa_dev.c  Added sound device default
01:36:50.808             alsa_dev.c  Added sound device sysdefault:CARD=rockchiprk809co
01:36:50.809             alsa_dev.c  Added sound device sysdefault:CARD=ROCKCHIPSPDIF
01:36:50.811             alsa_dev.c  Added sound device sysdefault:CARD=rockchiphdmi
01:36:50.824             alsa_dev.c  ALSA driver found 5 devices
01:36:50.824             alsa_dev.c  ALSA initialized
01:36:50.824                  pjlib  select() I/O Queue created (0x33397108)
01:36:50.828           wav_writer.c  File writer 'file.wav' created: samp.rate=44100, bufsize=4KB
01:36:50.828             alsa_dev.c  open_capture: Open capture device 'pulse'
01:36:50.837             alsa_dev.c  Opened device alsa(pulse) for capture, sample rate=44100, ch=2, bits=16, period size=441 frames, latency=100 ms
01:36:50.838             alsa_dev.c !ca_thread_func(12982): Set thread priority for audio capture thread.
Recodring file.wav..

buildroot__ffmpeg_52">buildroot ffmpeg常用命令

#使用命令方式采集视频: 指的是从屏幕的左上角(x=100, y=200)的位置,录制分辨率为1024×768的视频
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 v-out.mp4#可以使用ALSA同时录制声音
ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i hw:0 av-out.mkv#采用命令录制摄像头采集的视频:
ffmpeg -f video4linux2 -s 320*240 -r 10 -i /dev/video9 test.asf
ffmpeg -f video4linux2 -i "/dev/video9" -vcodec libx264 -pix_fmt yuv420p mycamera.h264
ffmpeg -f video4linux2 -s 320*240 -r 10 -i /dev/video9 test.asf -pix_fmt yuv420pffmpeg -f video4linux2 -s 320*240 -r 10 -i /dev/video9 test.asf root@RK356X:/# ffmpeg -f video4linux2 -s 320*240 -r 10 -i /dev/video9 test.asf Input #0, video4linux2,v4l2, from '/dev/video9':Duration: N/A, start: 154.045546, bitrate: 3686 kb/sStream #0:0: Video: rawvideo (NV12 / 0x3231564E), nv12, 640x480, 3686 kb/s, 1 fps, 1 tbr, 1000k tbn, 1000k tbc
Stream mapping:Stream #0:0 -> #0:0 (rawvideo (native) -> msmpeg4v3 (msmpeg4))
Press [q] to stop, [?] for help

aplay__81">arecord & aplay 声卡调测命令

开发板接USB音箱


arecord -D "plughw:3,0" -f S16_LE -r 44100 -d 5 -t wav file.wav
aplay -D "plughw:3,0"  file.wav

开发板自带音箱

#开发板自带音箱
arecord -D "plughw:0,0" -f S16_LE -r 44100 -d 5 -t wav file.wav
aplay -D "plughw:0,0"  file.wav
aplay -Dplughw:CARD=0 file.wav##
root@RK356X:~/pjsip-bin/samples/arm-unknown-linux-gnueabihf# aplay -l    
**** List of PLAYBACK Hardware Devices ****
card 0: rockchiprk809co [rockchip,rk809-codec], device 0: fe410000.i2s-rk817-hifi rk817-hifi-0 [fe410000.i2s-rk817-hifi rk817-hifi-0]Subdevices: 1/1Subdevice #0: subdevice #0
card 1: ROCKCHIPSPDIF [ROCKCHIP,SPDIF], device 0: fe460000.spdif-dit-hifi dit-hifi-0 [fe460000.spdif-dit-hifi dit-hifi-0]Subdevices: 1/1Subdevice #0: subdevice #0
card 2: rockchiphdmi [rockchip,hdmi], device 0: rockchip,hdmi i2s-hifi-0 [rockchip,hdmi i2s-hifi-0]Subdevices: 1/1Subdevice #0: subdevice #0
root@RK356X:~/pjsip-bin/samples/arm-unknown-linux-gnueabihf# aplay -L
nullDiscard all samples (playback) or generate zero samples (capture)
pulsePulseAudio Sound Server
defaultDefault ALSA Output (currently PulseAudio Sound Server)
sysdefault:CARD=rockchiprk809corockchip,rk809-codec, fe410000.i2s-rk817-hifi rk817-hifi-0Default Audio Device
sysdefault:CARD=ROCKCHIPSPDIFROCKCHIP,SPDIF, fe460000.spdif-dit-hifi dit-hifi-0Default Audio Device
sysdefault:CARD=rockchiphdmirockchip,hdmi, rockchip,hdmi i2s-hifi-0Default Audio Device#指定 设备播放音频
root@RK356X:~/pjsip-bin/samples/arm-unknown-linux-gnueabihf# aplay -Dplughw:CARD=rockchiprk809co ../../file.wav
Playing WAVE '../../file.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono

http://www.ppmy.cn/server/157573.html

相关文章

从SS到CSS:探索网页样式设计的奥秘

一、什么是CSS CSS,全称为层叠样式表(Cascading Style Sheets),是一种用于描述HTML(超文本标记语言)或XML(包括如SVG、MathML等各种XML方言)文档样式的样式表语言。 从结构和功能的…

【Flutter】使用ScrollController配合EasyRefresh实现列表预加载:在还未滑动到底部时加载下一页数据

需求/背景 在我们的业务场景中,列表的加载使用easy_refresh组件: https://pub.dev/packages/easy_refresh 大概效果是往上滑动到一定的offset会触发一个上滑加载,可以触发一些网络请求拉取列表后面的数据来展示。 这种模式一般在一页翻完…

力扣 74. 搜索二维矩阵

🔗 https://leetcode.cn/problems/search-a-2d-matrix 题目 给一个二维矩阵,保证数字在每行从左到右都是非严格递增每一行的第一个数字大于上一行最后一个数字给一个 target,判断是否存在在二维矩阵中 思路 先 binary search 定位到行&am…

WebRTC 的优缺点详细解析

在当今数字化浪潮中,WebRTC技术凭借其独特优势,在众多联网平台中得以广泛应用,为实时通信带来了革命性变化。然而,如同任何技术一样,它也并非十全十美,存在着一些有待攻克的短板。 一、WebRTC的优点 卓越…

大模型RAG面试内容有哪些?(附面试资料合集)

在面试涉及大模型RAG(Retrieval-Augmented Generation)的职位时,以下是一些常见的面试内容和问题: 技术知识 RAG的基本概念和工作原理:解释RAG系统的主要部分及其如何协同工作。检索技术:了解常见的检索方…

Vue sm3国密 IE模式报错处理

1、sm-crypto 转义错误 查看报错信息包名 在vue.config.js的transpileDependencies中把依赖包添加进去,让babel能够转译sm-crypto包 babel.config.js module.exports {presets: [[vue/app, {useBuiltIns: entry}]] }2、exports.destroy (() > { … }&a…

微信原生小程序自定义封装组件(以导航navbar为例)

封装 topnav.js const App getApp(); Component({// 组件的属性列表properties: {pageName: String, //中间的titleshowNav: { //判断是否显示左上角的按钮 type: Boolean,value: true},showHome: { //判断是否显示左上角的home按钮type: Boolean,value: true},showLocat…

TypeScript语言的软件工程

TypeScript语言的软件工程实践 引言 在现代软件工程中,编程语言的选择对项目的成功至关重要。近年来,JavaScript凭借其在Web开发中的广泛应用取得了巨大成功。然而,随着Web应用程序的复杂性不断增加,开发者渐渐发现纯JavaScript…