音视频多媒体
文章平均质量分 78
江海细流
微信公众号:AV_Chat
展开
-
Ubuntu 交叉编译Windows 版本的ffmpeg最佳实践
很多读者觉得在Windows搭建一个类Linux比较麻烦或者说方法不够通用,本文就介绍在流行的Linux发行版Ubuntu上编译window版本的ffmpeg。即介绍一种通用办法来编译Windows版本ffmpeg,即交叉编译,该方法可以推广到android,mips,arm等其他嵌入版本。该方法基于交叉编译的基本思想,方法可以推广到android,mips,arm等其他嵌入版本,是一种通用有效的Linux程序跨平台编译的方法。3 、make 并完成x264的编译。3、编译并在Windows上运行。原创 2023-04-08 23:07:45 · 1028 阅读 · 1 评论 -
Cygwin环境编译ffmpeg
介绍cygwin编译ffmepg方法,类似方案可以推到到VLC,openssl等源于Linux项目移植到Windows原创 2023-03-25 19:04:48 · 552 阅读 · 0 评论 -
msys2+minGW方案编译ffmpeg的最佳实践
介绍mysys2+mingw环境编译ffmpeg的基本步骤原创 2023-02-25 19:29:24 · 1629 阅读 · 0 评论 -
Windows 版本ffmpeg编译概述
介绍ffmpeg在Windows上编译的方案原创 2023-02-19 18:21:12 · 1129 阅读 · 0 评论 -
H265/HEVC编码NAL的单元的介绍
一、引言与H.264/AVC 类似,H265/HEVC也采用视频编码层(Video Coding Layer,VCL)和网络适配层(Network Abstract Layer, NAL)的双层结构,以适应不同网络环境和视频应用。网络适配层的主要任务是对视频压缩后的数据进行划分和封装,并进行必要的标识,使其更好的适应各种网络环境。二、NAL单元的基本结构从NAL单元的基本结构可知,NAL单元由NAL头和原始字节序列负载(Raw Byte sequence payload,RBSP)三、N原创 2022-01-09 21:12:39 · 4268 阅读 · 2 评论 -
流媒体传输协议浅析(三)可靠UDP传输方案
一、引言从流媒体的业务特征和TCP,UDP各种特点,UDP在媒体传输方面具有很大优越性,但UDP可靠性需要业务开发这投入大量的人力;相反 tcp 技术成熟,可以复用已稳定的http 服务器技术,不需要投入人力和技术解决可靠性问题,成熟,开发简单,拿来即用。故TCP在传统的流媒体协议还是广泛存在。但实际的网络拥塞,带宽不足,信号衰减会造成tcp 传输的音视频体验很糟糕。对稳定性,实时性,抗弱网抖动性的要求高的场景,UDP媒体传输技术正在崛起。 ...原创 2021-10-29 22:05:37 · 3553 阅读 · 0 评论 -
流媒体传输协议浅析(二)UDP媒体传输
一、引言既然UDP天然适合流媒体场景,为什么还存在TCP的流媒体协议?UDP的实时性,低延迟,又支持组播,确实适合音视频场景,但由于UDP是不稳定不可靠传输技术,直接用它来传输音视频,在实际网络中拥塞,丢包等情况会导致大量的音视频丢包,甚至视频和音频关键帧丢失导致客户端无法解码。如果将UDP用在流媒体传输中,需要自己完成很多可靠性工作。即TCP中做的可靠性工作,都需要在UDP上层根据业务情况适当实现(注意不是照搬,是适当实现,允许少了丢包,增强可靠性)。 ...原创 2021-10-23 21:22:00 · 3101 阅读 · 0 评论 -
流媒体传输协议浅析(一)
一、常见的流媒体协议关于流媒体传输协议,涉及到不同领域,不同业务场景,种类众多,下面一张图是目前常见的流媒体协议。 常见的流媒体传输协议1)从交互方式来看,流媒体分为点播(VOD)和直播(LIVE)直播(LIVE):HLS,RTMP,http+MP4,http+flv,RTP+RTSP点播(VOD):http+MP4,http+flv,HLS,DASH.2)从业务场景...原创 2021-10-17 18:12:51 · 2231 阅读 · 0 评论 -
基于Android平台的ffmpeg编译
前面介绍了Android jni 相关知识,但jni最终还是要调用的第三方的C/C++库,这里我们以ffmpeg为例,介绍第三方C/C++如何编译成android 版本。一、基本原理关于Android平台C/C++代码编译的方法:自己开发的C/C++代码,直接在android studio开发和编译,与jni代码操作方法一致,jni本质就是C/C++代码,只不过调用关于jni的特殊函数,遵守JNI的某些规范而已。 第三代码。对应第三方代码,直接拷贝到 android studio 开发...原创 2021-08-22 21:33:58 · 2430 阅读 · 1 评论 -
FFMPEG硬件编解码器使用
在前文《视频编解码硬件方案漫谈》中我们介绍硬件视频编解码的一般方案,本文我们进一步介绍音视频编解码如何在ffmpeg使用显卡硬件进行加速。一、基本概况ffmpeg对显卡厂家SDK进行封装和集成,实现部分的硬件编解码 NVIDIA AMD INTEL 编码器 xxx_nvenc xxx_amf xxxx_qsv ...原创 2021-08-14 09:41:52 · 11067 阅读 · 2 评论 -
Webrtc定制开发(一)
前一篇《webrtc方案漫谈》我们分析了webrtc的方案特点,根据实际的应用场景我们需要对webrtc native代码进行定制开发,下面对webrtc常规需求进行定制。原创 2021-05-31 21:06:40 · 398 阅读 · 2 评论 -
Webrtc方案漫谈
Webrtc使用是RTP分装码流,跟视频监控领域,IPTV领域,会议电视一样都是RTP承载媒体流,只不过webrtc信令遵守ICE框架,走自定义信令,IPTV领域走RTSP信令,视频监控走GB28181或者onvif信令,会议电视走h323或SIP协议。但webrtc 不能像传统IPTV和视频监控,会议电视一样可以直接抓包导流播放,因为webrtc的RTP流做了以下工作:1、码流加密,走SRTP协议。传统IPTV和视频监控也有走SRTP,但开销大,因此不常见,特别是通用嵌入式设备无法承受加密和加密的开销原创 2021-05-22 20:21:43 · 611 阅读 · 0 评论 -
webrtc日志系统的使用
在webrtc的native开发中,除了IDE调试以外,日志调试是不可或缺的手段。本文介绍webrtc日志系统的基本使用方法。 一、日志系统的基本需求日志分级打印 日志支持输出到控制台,文件,网络 文件日志回滚(控制文件个数和每个文件大小) 文件日志缓存(先写内存,再写磁盘) 日志格式化:如添加时间,tag标志等。 日志输出动态开启,关闭,动态调整优先级。关于c/c++的开源日志系统很多,如glog, log4cplus, liblogger,EasyLogge,boost l...原创 2021-05-04 21:25:16 · 1832 阅读 · 0 评论 -
webrtc之peerconnection_server详解
前面分析webrtc的peerconnection_client协议流程,本文将分析webrtc的peerconnection_server流程。因为整个webrtc 的server分为turn-server,stun-server ,signal-server,这里的peerconnection_server中的server仅仅指的是signal-server。 Webrtc 部署框架一、信令服...原创 2021-04-18 22:17:33 · 1429 阅读 · 0 评论 -
Webrtc 之peerconnection_client 详解(二)
前一章我们梳理peerconnection_client的基本框架,本文我们从通话流程上梳理webrtc的P2P 通话的流程。首先上一张图经典的webrtc的P2P通话流程. webrtc的P2P通话流程原创 2021-04-17 20:30:06 · 1512 阅读 · 1 评论 -
AAC与g711音频RTMP推流实践
前面完成了视频RTMP推流实践,本文介绍RTMP的音频推流,包括AACg711a,g711u三种场景音频推流。基于前面的视频推流实践,我们新增了推流AAC,g711a,g711u的三个接口。分别为SendAAcData(),sendg711a_audio(),sendg711u_audio(),对外提供API调用。接口类对外定义如下: classWrapper_RtmpLib{public:Wrapper_RtmpLib(char*url);~Wra...原创 2020-06-14 18:28:15 · 3215 阅读 · 3 评论 -
webrtc之peerconnection_client详解(一)
前面我们跑了webrtc的peerconnection_client的demo,体验了webrtc的视频通话效果,本文从代码框架上梳理该demo的结构,为后面深入学习webrtc协议做好准备。一、代码结构 从文件结构上:该demo分为:main.cc,main_wnd.cc.,conductor.cc,peer_connection_client.cc四个文件。其中: main.cc: 进程入口,负责网络,窗口,ssl等初始化相关工作,消息循环。 main_wnd:wind...原创 2021-04-11 17:23:54 · 1887 阅读 · 0 评论 -
Webrtc第一个demo之peerconnection_client
前一篇文章我们进行了webrtc的下载和编译实践,本文我们跑webrtc的第一个demo体验一下webrtc的通话,加深对webrtc的初步理解,同时介绍第一个demo踩坑的解决过程。一、基本原理客户端:peerconnection_client.exe,该程序跑是一个视频通话的客户端程序,负责音视频的采集,编码,渲染,发送,接收,以及信令呼叫服务器:peerconnection_server.exe,该程序是视频通话中的信令服务器,负责信令呼叫,成员管理等。 ...原创 2021-03-28 18:59:09 · 1819 阅读 · 10 评论 -
轻松下载和编译最新的webrtc源码
在音视频领域中,webrtc是不得不学习和研究的一个框架。很多博客和书籍对webrtc的研究仅仅限制于web端JS业务交互的介绍。但对一个音视频方向的开发者是完全不够的,JS开发webrtc仅仅是一个web前端一个应用需求,但实际上webrtc不仅仅在web中使用,在app中,PC客户端中也会大量的存在,或者将webrtc进行定制开发或者移植webrtc中的经典算法等,这就需要对webrtc的native代码进行研究和二次开发,本文将着手webrtc源码的下载和编码,为后面对webrtc的学习和...原创 2021-03-21 23:25:49 · 1709 阅读 · 1 评论 -
视频编解码硬件方案漫谈
视频编解码硬件方案最早是在嵌入式领域中广泛存在,如采用DSP,FPGA,ASIC等,用来弥补嵌入式系统CPU等资源能力不足问题,但随着视频分辨率越来越高(从CIF经历720P,1080P发展到4K,8K),编码算法越来越复杂(从mpeg2经历h264,发展到h265),PC的软件规模也越来越庞大,视频应用也越来也丰富,单独靠CPU来编解码已经显得勉为其难,一种集成在显卡中gpu用来参与编解码工作已经成为主流。一 gpu存在的形式gpu主要驻留在显卡上,配合显卡参与显示,绘图,编解码,并...原创 2021-03-14 18:23:20 · 6047 阅读 · 0 评论 -
Chrome源代码调试总结
前面进行chrome定制开发实践,本文总结chrome调试心得,以备后续使用一、调试手段日志跟踪程序流程默认,chrome只会打开错误级别,很多调试日志都不输出。在启动时,通过命令行打开日志级别即可。如果release版本就会在C:\Users\xxxxxx\AppData\Local\Chromium\User Data 目录下产生一个chrome_debug.log日志如果是debug版本,就在当前目录下产生一个chrome_debug.log在代码中我们可以用类似DV原创 2021-03-06 19:50:40 · 1106 阅读 · 2 评论 -
Chrome 浏览器支持4k/h265的定制开发
官方的Chrome浏览器是不支持h265格式的MP4播放,可能是由于Google处于维护在的VP9编码生态考虑(不要跟我说专利费太重问题,微软的edge,苹果的safari都支持)。实际上chrome最初也不支持h264视频解码,但h264在视频编码媒体领域中已经是势不可当(2003年发布),处于绝对的领导地位,后面不得不支持h264的MP4播放。对于新一代视频编码h265,Google同样持以抵制的态度,至今为止H265商业化8年了(2013年发布),Google的chrome还是不支持。但实...原创 2021-02-06 19:26:22 · 6395 阅读 · 3 评论 -
Chromium浏览器不能播放MP4
一、问题发现: 前面我们进行一番VS2019编译chrome的实践。编译出来的chome.exe能正常的打开网页,欣喜之余,打开优酷,发现优酷网页能正常打开,点击视频播放一直黑屏,腾讯视频也是如此。 优酷网站播放视频黑屏尝试本地播放一个MP4,也是黑屏。 本地播放MP4黑屏 尝试进入youtube,看看google自家的视频能否播放。果然,Google自家的视频网站播放是OK的...原创 2021-02-06 18:34:51 · 5249 阅读 · 2 评论 -
基于VS2019的Chrome(2021年版本)浏览器编译实践
前面我们在客户端开发漫谈中提到electron客户端方案,该方案是借助用chromium浏览器来对图形,音视频进行解码和渲染的,而chromium就是google chrome浏览器的开源版本,本文将对chrome浏览器的开源版本的下载和编译进行实战,后面我们将对chrome代码进行二次开发进行展开,以满足electron业务发展需求或者浏览器定制开发,或者加深对chrome浏览器工作原理的理解。系统环境1)操作系统:win10或更新2)内存至少8G以上,推荐16G编译更快3)...原创 2021-02-01 21:59:13 · 3721 阅读 · 0 评论 -
客户端程序开发漫谈
音视频领域中,除了关注服务器相关技术外,客户端也无法回避,毕竟客户端也要负责采集,编码,收发,解码和渲染,所以客户端开发也是整个音视频技术栈不可或缺的部分。本文梳理一下客户端常见技术方案,为以后客户端开发选型提供技术储备。1) MFC方案。 MFC做客户端是一个很古老的技术,那是上个世纪流行的技术,记得大学老师教学用的VC6.0(VC98)开发计算器的案例还记忆犹新。但由于历史和易用性原因,MFC产品还是在存在。如工业控制领域,医疗软件等还是存在MFC软件身影,笔者近几年上去车管所考科目...原创 2021-01-24 13:50:16 · 2238 阅读 · 1 评论 -
ffmpeg常用命令集锦
在实际工作中,通常需要ffmpeg作为工具来验证一个问题,比如播放一个视频,提取一个码流,转码视频,转封格式等,用的时候才发现忘记了相关命令,Google一番花老大的力气才找到自己需要的命令行。本文总结常用的命令,并演示如何通过命令行的help用法去构建新的命令。常用命令总结采集命令列出摄像头设备ffmpeg -list_devices true -f dshow -i dummy列出某一个摄像头的能力ffmpeg -list_options true -f dshow -i...原创 2020-09-26 21:11:43 · 620 阅读 · 0 评论 -
gstreamer(三) 常用命令集锦
在gstreamer开发中,关键是要知道命令行实现,如果命令验证没有问题,再将命令集成代码工程化,或者找找对应的API来实现。本文总结工作常用命令行实现(测试环境windows)。YUV编码gst-launch-1.0 filesrc location=/root/share/test.yuv blocksize=3110400 ! video/x-raw,format=I420, framerate=25/1,width=1920,height=1080,interlace-mode=progres原创 2020-09-20 18:44:33 · 3852 阅读 · 0 评论 -
gstramer(二) 重要工具
在gstreamer开发中,一般开发思路为:寻找命令行实现----命令行验证-----将命令行集成到代码中-----代码工程化。当然如果你要代码更优雅一点,可以用命令行用对应的API来实现。本节来总结一下gstreamer开发中场景常用的工具一.gst-inspect查看插件或者元素1) 查看所有元素 gst-inspect2 ). 查看并过滤相关元素gst-inspect |finstr xxxx (Windows) gst-inspect |grep xxxx...原创 2020-09-15 23:03:52 · 2135 阅读 · 0 评论 -
gstreamer(一)入门和概述
一.概述在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒,电视等嵌入式设备)。这里我们介绍一个在国内不太常用的解决方案----gstreamer媒体库二.Gstreamer 的特点:gstreamer跟ffmpeg一样,也是一个媒体框架,可以实现采集,编码,解码,渲染,滤镜等一条龙的媒体解决方案。跟ffmpeg一样,也是有命令行工具进行测试验证。同时还可以通过代码框架直接封装命令来做工程开发,这一点ffm原创 2020-09-06 21:05:00 · 50500 阅读 · 4 评论 -
GPU温度的采集
随着高清,4K视频的推广,视频GPU硬件编码,解码,转码已经开始成为主流。同时人工智能的兴起,深度学习也离不开硬件GPU的模型训练和计算。GPU硬件参数越来得到开发人员的关注,对GPU 温度,占用率,显存等参数也纳入监控平台的重要监控指标。本文以温度为例介绍如何监控显卡GPU相关参数。监控GPU参数通常由以下几种方式:直接查看Windows资源管理器里面GPU参数。Windows资源监控管理器,能看到GPU各种占有率参数,但看不到GPU的温度,且通过这UI种方式只能在Windows系...原创 2020-06-26 19:56:28 · 2092 阅读 · 0 评论 -
ffmpeg新接口之体验
许久不使用ffmpeg了,最近一年一直是使用gstreamer在做媒体处理(因为产品采用开源框架缘故),考虑gstreamter过于庞大,过于晦涩(依赖glib,各种插件,面向对象的C框架等),自研框架还是优先开用ffmpeg来处理。将3年前的ffmpeg解码器例子用最新ffmpeg(4.2.3)来编译,问题一大堆首先:相关宏定义的头文件路径变了(虽然通过头文件引入相关调整解决了)。其次:API接口变了。编译被中止了。 ...原创 2020-06-21 22:51:40 · 890 阅读 · 0 评论 -
AAC音频格式详解和实战解析
AAC音频格式详解和实战解析一.基本概念 AAC:即MPEG-2 Advanced Audio Coding,分为流格式和文件格式。文件格式主要用于文件存储和文件播放,流格式主要用于流媒体在线播放。文件格式:adif格式adif格式该格式特点:只有开头有一个头部信息,后面都是AAC裸数据。适应磁盘存储和文件播放流格式:adts_frame格式adts_frame格式该格式特点:每一帧数据=固定头(fixed_header)+ 可变头(variable_header)+帧...原创 2020-06-07 16:12:37 · 6025 阅读 · 2 评论 -
视频RTMP推流实践
对应RTMP推流,业界有很多开源方案。如使用FFMPEG推流,librtmp(rtmp-dump),gstream推流。由于ffmpeg和gstreamer比较庞大,仅仅用来推流,有大炮打蚊子之嫌。针对客户端特别是瘦客户端,使用librtmp(rtmp-dump)方案更加精简,更加高效。本方案基本思路:下载并编译librtmp。下载地址:http://rtmpdump.mplayerhq.hu/download/编译后产生一个librtmp.so 库调用librtmp,封装一个视频层W原创 2020-05-31 12:37:47 · 1942 阅读 · 0 评论 -
IPC 移动端或web端接入方案的RTMP实践
IPC出来的码率都是RTP码流,可能是裸的H264,也可能是PS流。如果要推流的话,有2种方案可以选择1.直接解析出h264帧数据,然后封装成RTMP协议进行推流。2.利用ffmpeg实现,ffmpeg拉流通过av_read_frame得到h264帧,然后将264帧封装成RTMP的tag进行推流。前者实现有一定工作量,需要自己解析264,封装成RTPMP包。代码自研,可控可扩展,稳定有保障。而后者利用ffmpeg实现起来快,但IPC码流不规范,特别是PS流,各厂家并不一样严格按PS协议封装,可能原创 2020-05-24 22:49:45 · 1206 阅读 · 3 评论 -
IPC视频在web端或移动端无插件播放
“雪亮工程“让城市的大街小巷,公共道路都在一个一个监控摄像头的守卫之下,指挥中心的大屏幕让整个城市一览无余,而智慧城市,城市大脑则进一步推进公共安防市场的升级,人脸识别,人脸跟踪开始广泛使用。红蓝黄幼儿园事件引起了人们对个人安全领域的了重视,幼儿园,个人家庭也兴起视频监控应用,人们可以随时随地通过PC,手机查看幼儿园小孩学习状况,家里老人的健康状况,可见安防市场后劲十足,下面来聊聊个人领域中视频监的技术方案。 传统视频监控都在指挥中心或后台的PC电脑上查看,可能配带一个大的电子屏幕展示。IPC媒体..原创 2020-05-22 21:18:05 · 1813 阅读 · 0 评论 -
如何接入IPC的GB28181平台
通常工业级的IPC一般支持onvif,GB28181以及各厂家私有协议。上篇文章我们讲解如何通过onvif协议对接IPC,本文接下来介绍如何接入通过国内最主流的GB28181协议对接IPC。对于GB28181协议内容细节不多介绍,他是国家公安部定义的安防设备互通的协议,细节详见《GBT28181-2016 公共安全视频监控联网系统信息传输、交换、控制技术要求.pdf》。目前城市街道,公共场所,社区等各个安防设备基本都是通过GB28181在协议互通。如IPC,NVR,媒体网关等。本文以大华IPC为例子,直接上原创 2020-05-17 12:04:07 · 12689 阅读 · 0 评论 -
onvif 开发摘要
对应onvif开发,步骤比较啰嗦。常规流程是:1.下载gsoap工具2.利用gsoap中wsdl2h在线生成头文件或者离线生成头文件。1)在线生成头文件,但因为自带的wsdl2h.exe工具不支持https,需要自己编译一个windows版本工具,支持https还要移植openssl比较繁琐。在Linux编译就方便多了安装openssl依赖,直接./configure make 即可生成新的wsdl2h2)离线生成头文件,需要事先下载相关的wsdl文件以及依赖的xsd文件,相当的折腾,然原创 2020-05-10 10:35:06 · 627 阅读 · 0 评论 -
RTP流发送器和播放器
关键词:国标GB28181,安防,SIP,RTSP 在安防软件开发领域中通常涉及摄像头拉流,转封,解码播放3个环节甚至涉及后端视频识别,推流到web端各个环节,但实际开发当中不可能串行开发和测试,为了提供软件开发效率,加快项目进度,通常各模块独立开发,独立调试,独立测试。实际商用环境,也不可能经常直接派开发人员现场调试某些码流bug。所以从实际摄像头抓包拿到码流,通过模拟工具模拟上游的流...原创 2020-03-25 22:04:53 · 4360 阅读 · 1 评论 -
mpg123 学习进阶1
基本介绍:It can play MPEG1.0/2.0/2.5 layer I, II, II(1, 2, 3;-) files (VBR files are fine, too) and produce output on a number ofdifferent ways: raw data to stdout and different sound systems depending原创 2014-02-04 22:24:38 · 1744 阅读 · 1 评论 -
libmad学习进阶1
1.libmad 是一款Mpeg音频解码开源库,包括Mpeg1 ,Mpeg2 。其中mpeg1 包括了layer1 layer,layer3(俗称Mp3)三个规范。不支持非mpeg 家族的音频解码(如AAC,AC3等)。2.主要特点24位pcm输出采用定点运算(特别适合不支持浮点运算的嵌入式系统)完全支持ISO/IEC国际标准遵守GPL标准3.原创 2014-02-04 22:22:17 · 1244 阅读 · 0 评论