Basic tutorial 16: Platform-specific elements
除了这16个入门samples,后面的pipelines Command line tools 和 Plugin 插件开发也是多媒体类应用极好的教材
官网才是最应该多关注的地方
https://gstreamer.freedesktop.org/documentation/tutorials/basic/hello-world.html
wiki手册也很是全面,几乎全部应用方向都说明
http://wiki.oz9aec.net/index.php?title=Gstreamer_cheat_sheet
IBM社区gstreamer教程
https://www.ibm.com/developerworks/cn/linux/l-gstreamer/
3、 gstreamer 进阶...
一、播放视频文件
以MP4格式为例,其它格式能够 经过gst-inspect-1.0 | grep 查找对应的demux,decode,sink等插件,固然也可使用auto开头的插件,或者playbin会自动选择播放,只是没有本身指定那么灵活,方便调试和验证一些功能。
1)硬解(vaapi)播放MP4文件:
gst-launch-1.0 filesrc location=FilePath/test.mp4 ! qtdemux ! vaapidecode ! vaapisink
2) 软解,只要将解码器vaapidecode换成avdec_h264,播放器vaapisink换成 ximagesink便可
二、播放RTSP视频流
1) 硬解。
gst-launch-1.0 rtspsrc location=rtsp://username:passwd@ipaddr:port latency=0 ! rtph264depay ! capsfilter caps="video/x-h264" ! h264parse ! vaapidecode ! vaapipostproc width=800 height=600 ! vaapisink sync=false
2)软解。
gst-launch-1.0 rtspsrc location=rtsp://username:passwd@ipaddr:port latency=0 ! rtph264depay ! capsfilter caps="video/x-h264" ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=800,height=600 ! ximagesink
三、 播放Udp视频流
Udp播放须要根据发送端数据源封装格式来决定采用哪些Gstreamer插件,若是进行了RTP封装,则须要先用rtph264depay进行解包,若是包含自定义帧头的状况,应该编程对帧头进行处理,否则会显示异常,好比部分花屏现象,如下是对裸流进行播放。
1)硬解
gst-launch-1.0 udpsrc port=2101 ! h264parse ! vaapidecode ! vaapisink
2)软解
gst-launch-1.0 udpsrc port=2101 ! h264parse ! avdec_h264 ! autovideosink
参考https://blog.csdn.net/manjiao4651538/article/details/80227966
四、gstreamer rtsp推流/拉流
1)gstreamer rtsp拉流播放
http://www.javashuo.com/article/p-vpyykhwg-gq.html
2)gstereamer rtsp推流
https://blog.csdn.net/zhuwei622/article/details/80348916
3) On the Raspberry:
$ gst-launch-1.0 rtspsrc location=rtsp://192.168.2.112:8080/stream.sdp ! rtph264depay ! h264parse ! omxh264dec ! autovideosink
五、rtpbin Network/RTP
send
Encode and payload H263 video captured from a v4l2src. Encode and payload AMR audio generated from audiotestsrc. The video is sent to session 0 in rtpbin and the audio is sent to session 1. Video packets are sent on UDP port 5000 and audio packets on port 5002. The video RTCP packets for session 0 are sent on port 5001 and the audio RTCP packets for session 0 are sent on port 5003. RTCP packets for session 0 are received on port 5005 and RTCP for session 1 is received on port 5007. Since RTCP packets from the sender should be sent as soon as possible and do not participate in preroll, sync=false and async=false is configured on udpsink
gst-launch-1.0 rtpbin name=rtpbin \ v4l2src ! videoconvert ! ffenc_h263 ! rtph263ppay ! rtpbin.send_rtp_sink_0 \ rtpbin.send_rtp_src_0 ! udpsink port=5000 \ rtpbin.send_rtcp_src_0 ! udpsink port=5001 sync=false async=false \ udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0 \ audiotestsrc ! amrnbenc ! rtpamrpay ! rtpbin.send_rtp_sink_1 \ rtpbin.send_rtp_src_1 ! udpsink port=5002 \ rtpbin.send_rtcp_src_1 ! udpsink port=5003 sync=false async=false \ udpsrc port=5007 ! rtpbin.recv_rtcp_sink_1
recv
Receive H263 on port 5000, send it through rtpbin in session 0, depayload, decode and display the video. Receive AMR on port 5002, send it through rtpbin in session 1, depayload, decode and play the audio. Receive server RTCP packets for session 0 on port 5001 and RTCP packets for session 1 on port 5003. These packets will be used for session management and synchronisation. Send RTCP reports for session 0 on port 5005 and RTCP reports for session 1 on port 5007.
gst-launch-1.0 -v rtpbin name=rtpbin \ udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-1998" \ port=5000 ! rtpbin.recv_rtp_sink_0 \ rtpbin. ! rtph263pdepay ! ffdec_h263 ! xvimagesink \ udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 \ rtpbin.send_rtcp_src_0 ! udpsink port=5005 sync=false async=false \ udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)AMR,encoding-params=(string)1,octet-align=(string)1" \ port=5002 ! rtpbin.recv_rtp_sink_1 \ rtpbin. ! rtpamrdepay ! amrnbdec ! alsasink \ udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1 \ rtpbin.send_rtcp_src_1 ! udpsink port=5007 sync=false async=false
参考:
https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-rtpbin.html
GStreamer RTP Streaming
https://community.nxp.com/docs/DOC-94646
六、录音
录音:
gst-launch -e pulsesrc ! audioconvert ! lamemp3enc target=1 bitrate=64 cbr=true ! filesink location=audio.mp3 gst-launch -e pulsesrc device="alsa_input.pci-0000_02_02.0.analog-stereo" ! audioconvert ! \ lamemp3enc target=1 bitrate=64 cbr=true ! filesink location=audio.mp3
播放录音:
gst-launch-1.0 filesrc location=audio.mp3 ! decodebin ! audioconvert ! audioresample ! autoaudiosink
仍是上面的wiki
http://wiki.oz9aec.net/index.php?title=Gstreamer_cheat_sheet
七、录视频
命令:gst-launch-1.0 -e rtspsrc location=rtsp://admin:admin@192.168.1.2 ! rtph264depay ! "video/x-h264, stream-format=byte-stream" ! filesink location=test.264
说明:主要是用gst-lanuch工具链接相关插件将rtsp video stream 保存为.264文件,而后能够利用相关播放器(如:kmpplayer)进行播放,亦能够供live555MediaServer生成rtsp stream;("video/x-h264, stream-format=byte-stream"这个caps必定要链接才行)
原文:https://blog.csdn.net/u010005508/article/details/52710302
八、视频收发(监控,预览)
send:
gst-launch v4l2src ! video/x-raw-yuv,width=128,height=96,format='(fourcc)'UYVY ! ffmpegcolorspace ! ffenc_h263 ! video/x-h263 ! rtph263ppay pt=96 ! udpsink host=127.0.0.1 port=5000 sync=false
recv:
gst-launch udpsrc port=5000 ! application/x-rtp, clock-rate=90000,payload=96 ! rtph263pdepay queue-delay=0 ! ffdec_h263 ! xvimagesink
以Freescale平台为例,实时码流收发命令行以下:
Server侧(发送方):
gst-launch -v videotestsrc ! video/x-raw-yuv,width=640,height=480 ! vpuenc codec=avc ! rtph264pay pt=96 ! udpsink host=127.0.0.1 port=1234
Client侧(接收方):
gst-launch -vvv udpsrc port=1234 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! rtph264depay ! vpudec ! mfw_isink
九、音频收发(语音对讲)
模拟声音数据
1)send.sh
gst-launch-1.0 rtpbin name=rtpbin \ audiotestsrc ! amrnbenc ! rtpamrpay ! rtpbin.send_rtp_sink_1 \ rtpbin.send_rtp_src_1 ! udpsink port=5002 \ rtpbin.send_rtcp_src_1 ! udpsink port=5003 sync=false async=false \ udpsrc port=5007 ! rtpbin.recv_rtcp_sink_1
2)recv.sh
gst-launch-1.0 -v rtpbin name=rtpbin \ udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)AMR,encoding-params=(string)1,octet-align=(string)1" \ port=5002 ! rtpbin.recv_rtp_sink_1 \ rtpbin. ! rtpamrdepay ! amrnbdec ! alsasink \ udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1 \ rtpbin.send_rtcp_src_1 ! udpsink port=5007 sync=false async=false
真实声卡
1) send.sh
gst-launch-1.0 rtpbin name=rtpbin \ pulsesrc ! amrnbenc ! rtpamrpay ! rtpbin.send_rtp_sink_1 \ rtpbin.send_rtp_src_1 ! udpsink port=5002 \ rtpbin.send_rtcp_src_1 ! udpsink port=5003 sync=false async=false \ udpsrc port=5007 ! rtpbin.recv_rtcp_sink_1
2) recv.sh
gst-launch-1.0 -v rtpbin name=rtpbin \ udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)AMR,encoding-params=(string)1,octet-align=(string)1" \ port=5002 ! rtpbin.recv_rtp_sink_1 \ rtpbin. ! rtpamrdepay ! amrnbdec ! alsasink \ udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1 \ rtpbin.send_rtcp_src_1 ! udpsink port=5007 sync=false async=false
模拟声音和实际声卡只有发送端采集程序不一样,模拟采集是audiotestsrc,实际声卡采集是pulsesrc
中国移动和对讲amr实时语音解码播放
gst-launch-1.0 udpsrc port=6000 caps="application/x-rtp, media=(string)audio, clock-rate=(int)8000, encoding-name=(string)AMR, payload=(int)106" ! rtpamrdepay ! decodebin name=decoder ! queue ! audioconvert ! autoaudiosink
tcpdump -i eth0 -w dump.pcap
gstreamer中经过UDP(RTP)远程播放MP3
send.sh
gst-launch-1.0 -v filesrc location = Hopy_Always.mp3 ! decodebin ! audioconvert ! rtpL16pay ! udpsink host=127.0.0.1 port=6000
recv.sh
gst-launch-1.0 udpsrc port=6000 caps='application/x-rtp, media=(string)audio, clock-rate=(int)44100, channels=(int)2' ! rtpjitterbuffer latency=400 ! rtpL16depay ! pulsesink
Gstreamer 测试udpsink udpsrc播放mp3文件
https://blog.csdn.net/zhujinghao_09/article/details/8513962
十、gstreamer 播放mp3源码(播放器) ,入门开发极好的samples
https://blog.csdn.net/fireroll/article/details/49126827
https://www.cnblogs.com/274914765qq/p/5090299.html
十一、Gstreamer的音视频同步
https://blog.csdn.net/maeom/article/details/7729840
十二、播放音频
gst-launch-1.0 playbin uri=file:///home/dong/Hopy_Always.mp3
gst-launch-1.0 filesrc location=Hopy_Always.mp3 ! decodebin ! audioconvert ! audioresample ! autoaudiosink
1三、Gstreamer视频传输测试gst-launch
https://blog.csdn.net/meng_tianshi/article/details/80142005
1四、How to listen to the pulseaudio RTP Stream and play
https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Network/RTP/
1五、Gstreamer cheat sheet —— Picture in Picture / Video Wall / Text Overlay / Time Overlay ... ... ..
http://wiki.oz9aec.net/index.php?title=Gstreamer_cheat_sheet
1六、用树莓派作 RTMP 流直播服务器,可推送至斗鱼直播
http://shumeipai.nxez.com/2017/11/01/build-rtmp-stream-live-server-with-raspberry-pi.html
1七、gstreamer学习笔记:经过gst-launch工具抓取播放的音频数据并经过upd传输
gst-launch数据转换(pcm,aac,ts), rtp收发
https://blog.csdn.net/u010312436/article/details/53335579
1八、gstreamer实现摄像头的远程采集,udp传输,本地显示和保存为AVI文件 发送端
send
https://blog.csdn.net/zhujinghao_09/article/details/8528802
recv
https://blog.csdn.net/zhujinghao_09/article/details/8528879
1九、QtGStreamer dvr
https://blog.csdn.net/lg1259156776/article/details/53413877
https://blog.csdn.net/xueyeguiren8/article/details/54581536
20、基于Gstreamer的实时视频流的分发
http://www.javashuo.com/article/p-fmtzfmvk-ce.html
2一、gstreamer学习笔记:将音视频合成MPEG2-TS流并打包经过rtp传输
https://blog.csdn.net/u010312436/article/details/53668083
2二、gstreamer之RTSP Server一个进程提供多路不一样视频
https://blog.csdn.net/quantum7/article/details/82999132
2三、GStreamer资料整理(包括摄像头采集,视频保存,远程监控,流媒体RTP传输)
https://blog.csdn.net/wzwxiaozheng/article/details/6099397
2四、使用GStreamer做v4l2摄像头采集和输出到YUV文件及屏幕的相关测试
https://blog.csdn.net/shallon_luo/article/details/5400708
2五、Gstreamer中添加x265编解码器
https://blog.csdn.net/songwater/article/details/34855883
2六、Gstreamer One Liners
https://metalab.at/wiki/Gstreamer_One_Liners
ARM平台基于嵌入式Linux Gstreamer 使用
https://www.eefocus.com/toradex/blog/16-05/379143_e4fcb.html
常见gstreamer pipeline 命令—— TI 3730 dvsdk
https://blog.csdn.net/songwater/article/details/34800017
gstreamer中的好东西,appsink和appsrc
https://blog.csdn.net/jack0106/article/details/5909935
基于DM3730平台的gstreamer音视频传输调试
https://blog.csdn.net/goalietech/article/details/24887955
gstreamer appsrc appsink应用
gstreamer向appsrc发送帧画面的代码
https://blog.csdn.net/quantum7/article/details/82226608
gstreamer向appsrc发送编码数据的代码
https://blog.csdn.net/quantum7/article/details/82250524
gstreamer学习笔记:分享几个appsink和appsrc的example
https://blog.csdn.net/u010312436/article/details/53610599
Here are two basic send/receive h264 video stream pipelines:
gst-launch-0.10 v4l2src ! ffmpegcolorspace ! videoscale ! video/x-raw-yuv,width=640,height=480 ! vpuenc ! h264parse ! rtph264pay ! udpsink host=localhost port=5555
gst-launch-0.10 udpsrc port=5555 ! application/x-rtp,encoding-name=H264,payload=96 ! rtph264depay ! h264parse ! ffdec_h264 ! videoconvert ! ximagesink
gstreamer使用进阶
https://blog.csdn.net/jack0106/article/details/5592557
# 整理了这么多,梳理一下指令,组织一下模块代码,应付常规的多媒体应用绰绰有余了!