- 博客(124)
- 资源 (24)
- 收藏
- 关注
原创 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 986 1
原创 Cygwin环境编译ffmpeg
介绍cygwin编译ffmepg方法,类似方案可以推到到VLC,openssl等源于Linux项目移植到Windows
2023-03-25 19:04:48 518
原创 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 4120 2
原创 流媒体传输协议浅析(三)可靠UDP传输方案
一、引言从流媒体的业务特征和TCP,UDP各种特点,UDP在媒体传输方面具有很大优越性,但UDP可靠性需要业务开发这投入大量的人力;相反 tcp 技术成熟,可以复用已稳定的http 服务器技术,不需要投入人力和技术解决可靠性问题,成熟,开发简单,拿来即用。故TCP在传统的流媒体协议还是广泛存在。但实际的网络拥塞,带宽不足,信号衰减会造成tcp 传输的音视频体验很糟糕。对稳定性,实时性,抗弱网抖动性的要求高的场景,UDP媒体传输技术正在崛起。 ...
2021-10-29 22:05:37 3507
原创 流媒体传输协议浅析(二)UDP媒体传输
一、引言既然UDP天然适合流媒体场景,为什么还存在TCP的流媒体协议?UDP的实时性,低延迟,又支持组播,确实适合音视频场景,但由于UDP是不稳定不可靠传输技术,直接用它来传输音视频,在实际网络中拥塞,丢包等情况会导致大量的音视频丢包,甚至视频和音频关键帧丢失导致客户端无法解码。如果将UDP用在流媒体传输中,需要自己完成很多可靠性工作。即TCP中做的可靠性工作,都需要在UDP上层根据业务情况适当实现(注意不是照搬,是适当实现,允许少了丢包,增强可靠性)。 ...
2021-10-23 21:22:00 3026
原创 流媒体传输协议浅析(一)
一、常见的流媒体协议关于流媒体传输协议,涉及到不同领域,不同业务场景,种类众多,下面一张图是目前常见的流媒体协议。 常见的流媒体传输协议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 2176
原创 Android studio 导入ffmpeg库的最佳实践
前面我们介绍如何使用交叉编译方法编译基于android平台ffmpeg库,用来演示第三方C/C++库的基于android平台的编译过程。本文将以ffmepg库导入android studio为例,用来演示第三方C/C++库移植到andorid stuio进行实际产品开发的过程。一、准备ffmpeg库根据业务需要,ffmpeg 可以编译成arm64-v8a,armabi-v7a,x86,x86-64版本,为了简单起见,我们这里只以armabi-v7a为例,其他版本类似做法。由上一篇...
2021-09-05 17:50:58 1647
原创 基于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 2402 1
原创 JNI操作接口实践(三)
前面我们介绍了JNI的常规注册方法(静态注册方法),并对JNI各种典型应用做了一个实践演练。本文我们介绍JNI的另一个注册方法:动态注册方法一、静态注册1、注册步骤1)编写java代码和声明native 方法2)过javah指令,自动成JNI的头文件(或者按照JNI规范手动自定义)3)实现jni头文件里面定义的函数2、注册原理静态注册的原理是当加载动态库到jvm后,当Native方法第一次执行时会根据其方法名去匹配对应的C语言实现。3.优点可以自动生成头文...
2021-08-19 21:07:32 338
原创 FFMPEG硬件编解码器使用
在前文《视频编解码硬件方案漫谈》中我们介绍硬件视频编解码的一般方案,本文我们进一步介绍音视频编解码如何在ffmpeg使用显卡硬件进行加速。一、基本概况ffmpeg对显卡厂家SDK进行封装和集成,实现部分的硬件编解码 NVIDIA AMD INTEL 编码器 xxx_nvenc xxx_amf xxxx_qsv ...
2021-08-14 09:41:52 10915 2
原创 JNI接口操作实践(二)
前面介绍了JNI的基本规范以及JNI的接口的生成过程。本文通过一个jni_test 应用实践操作JNI的接口各种典型应用。 jni_test从jni的字符串,数组,基本类型,自定义类,C回调java静态方法,C回调Java的实例方法,C访问Java的静态变量,C访问Java的实例变量,Java传内存数据给C,C传内存数据给Java 共10个demo演示jni各种典型应用场景。一、UI设计通过修改active_main.xml(为了简单起见采用相对布局),或者直接使用design工具拖动布局..
2021-08-07 20:52:44 400
原创 JNI接口的基本规范和操作实践(一)
从前文所知,JNI是Java调用native(c/c++)一个中间接口,本文将介绍JNI的基本规范和操作实践。一、JNI 和 Java,C/C++数据类型1)基本数据类型在jni中基本数据类型变量可以直接赋值。如:jchar jtest =1; unsigned short ctest = jtest;2) 引用数据类型在JNI中引用数据类型不能直接赋值,要需要相关函数就行转换如:char * Mystring = “hello c++” j...
2021-07-26 00:09:43 843 1
原创 Android 工程管理与定制
在Android 程序开发中,往往需要根据实际的业务需求和工程管理要求,做一些定制开发。本文介绍常用的Android工程管理与配置。一、工程管理过程一个基本的Android程序工程应用过程如下图1。由于Android编译管理工具有早期的ndk-build和cmake两套方案,ndk-build方案实际上是借助Android.mk(类似makefile)来管理编译。而cmake方案是借助cmakelist.txt来管理编译(cmake方案源于PC端跨平台方案),由于目前Android studio默认
2021-06-23 23:40:21 217 2
原创 Android native程序的调试
在程序开发中,对程序进行调试是不可或缺的环节,它能帮助我们快速定位问题的bug,解决程序运行过程中各种异常问题。Android studio跟PC端的Visual studio 一样可以启动程序运行调试或attach 一个进程在线调试。...
2021-06-14 18:34:52 1311 6
原创 Android native开发环境搭建
在音视频开发领域中,可能会涉及到服务器,客户端多个组件开发,随着流媒体技术日渐成熟和开源支持,服务端需求量相对较少,甚至直接接入第三方的视频云或者语音云实现产品快速集成,而客户端因直接与用户打交道,变化快,需求相对多(特别是多平台客户端)。很多产品都会涉及到PC端(windows,MAC,Linux),移动端开发(android ,ios),甚至是web端,小程序的开发。对于PC端环境,我们再熟悉不过了,无需赘述。本文将介绍android native开发环境的搭建。...
2021-06-12 18:25:49 5006 5
原创 Webrtc定制开发(一)
前一篇《webrtc方案漫谈》我们分析了webrtc的方案特点,根据实际的应用场景我们需要对webrtc native代码进行定制开发,下面对webrtc常规需求进行定制。
2021-05-31 21:06:40 383 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 598
原创 webrtc日志系统的使用
在webrtc的native开发中,除了IDE调试以外,日志调试是不可或缺的手段。本文介绍webrtc日志系统的基本使用方法。 一、日志系统的基本需求日志分级打印 日志支持输出到控制台,文件,网络 文件日志回滚(控制文件个数和每个文件大小) 文件日志缓存(先写内存,再写磁盘) 日志格式化:如添加时间,tag标志等。 日志输出动态开启,关闭,动态调整优先级。关于c/c++的开源日志系统很多,如glog, log4cplus, liblogger,EasyLogge,boost l...
2021-05-04 21:25:16 1778
原创 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 1408
原创 Webrtc 之peerconnection_client 详解(二)
前一章我们梳理peerconnection_client的基本框架,本文我们从通话流程上梳理webrtc的P2P 通话的流程。首先上一张图经典的webrtc的P2P通话流程. webrtc的P2P通话流程
2021-04-17 20:30:06 1490 1
原创 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 1853
原创 Webrtc第一个demo之peerconnection_client
前一篇文章我们进行了webrtc的下载和编译实践,本文我们跑webrtc的第一个demo体验一下webrtc的通话,加深对webrtc的初步理解,同时介绍第一个demo踩坑的解决过程。一、基本原理客户端:peerconnection_client.exe,该程序跑是一个视频通话的客户端程序,负责音视频的采集,编码,渲染,发送,接收,以及信令呼叫服务器:peerconnection_server.exe,该程序是视频通话中的信令服务器,负责信令呼叫,成员管理等。 ...
2021-03-28 18:59:09 1766 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 1690 1
原创 视频编解码硬件方案漫谈
视频编解码硬件方案最早是在嵌入式领域中广泛存在,如采用DSP,FPGA,ASIC等,用来弥补嵌入式系统CPU等资源能力不足问题,但随着视频分辨率越来越高(从CIF经历720P,1080P发展到4K,8K),编码算法越来越复杂(从mpeg2经历h264,发展到h265),PC的软件规模也越来越庞大,视频应用也越来也丰富,单独靠CPU来编解码已经显得勉为其难,一种集成在显卡中gpu用来参与编解码工作已经成为主流。一 gpu存在的形式gpu主要驻留在显卡上,配合显卡参与显示,绘图,编解码,并...
2021-03-14 18:23:20 5865
原创 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 1095 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 6313 3
原创 Chromium浏览器不能播放MP4
一、问题发现: 前面我们进行一番VS2019编译chrome的实践。编译出来的chome.exe能正常的打开网页,欣喜之余,打开优酷,发现优酷网页能正常打开,点击视频播放一直黑屏,腾讯视频也是如此。 优酷网站播放视频黑屏尝试本地播放一个MP4,也是黑屏。 本地播放MP4黑屏 尝试进入youtube,看看google自家的视频能否播放。果然,Google自家的视频网站播放是OK的...
2021-02-06 18:34:51 5159 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 3672
原创 客户端程序开发漫谈
音视频领域中,除了关注服务器相关技术外,客户端也无法回避,毕竟客户端也要负责采集,编码,收发,解码和渲染,所以客户端开发也是整个音视频技术栈不可或缺的部分。本文梳理一下客户端常见技术方案,为以后客户端开发选型提供技术储备。1) MFC方案。 MFC做客户端是一个很古老的技术,那是上个世纪流行的技术,记得大学老师教学用的VC6.0(VC98)开发计算器的案例还记忆犹新。但由于历史和易用性原因,MFC产品还是在存在。如工业控制领域,医疗软件等还是存在MFC软件身影,笔者近几年上去车管所考科目...
2021-01-24 13:50:16 2214 1
原创 VScode调试Linux详解
在Linux上通常使用gdb命令行调试,但该方式调试不太直观,且命令行长时间不用,容易忘记,不如GUI直观和容易上手,下面介绍基于GUI的方式调试Linux。一.Linux调试GUI方案简介1) Visual studio 远程调试Linux 在VS2015版本以后Visual studio就支持Linux的编译和调试。使用熟悉的windows界面开发和调试Linux,极大的提高了开发效率,可以广泛应用的Linux服务器开发和嵌入式Linux开发。 遗憾的是该方式需要基于...
2021-01-03 22:32:16 3072
原创 7ZIP SDK共享
对于文件的压缩和解压是我们日常工作耳熟能详的操作,那么我们如何自己通过代码来实现各种文件的压缩和解压,本文是笔者整理和精炼的的7zipSDK,支持zip,rar,7zip,tar,xz等常见格式的压缩和解压,接口友好,demo简单,特意收藏,以备不时之需。压缩例子如下:#include<iostream>#include<string>#include"7zpp.h"#defineDLL_PATH_T("C:\\ProgramFiles\\7-...
2020-12-31 23:38:23 539
原创 Windows的HooK技术实现(支持X86/X64版本)
hook技术应用广泛,如热补丁升级技术,API劫持,软件破解等,是一门很实用的逆向安全技术。本文就简明的讲解hook技术的基本原理,实现方法,同时送上demo实例。HOOK技术的基本原理HOOK的基本原理Hook技术的原理的:就是修改程序的运行时PC指针,让程序跳到我们指定的代码中运行,运行完我们的程序,程序PC指针又回到原来程序的下一条指令。简而言之:就篡改程序的运行路径,来执行我们的程序。二.Hook技术的实现1)需求分析 ...
2020-10-03 19:14:04 3517
原创 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 608
原创 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 3795
原创 gstramer(二) 重要工具
在gstreamer开发中,一般开发思路为:寻找命令行实现----命令行验证-----将命令行集成到代码中-----代码工程化。当然如果你要代码更优雅一点,可以用命令行用对应的API来实现。本节来总结一下gstreamer开发中场景常用的工具一.gst-inspect查看插件或者元素1) 查看所有元素 gst-inspect2 ). 查看并过滤相关元素gst-inspect |finstr xxxx (Windows) gst-inspect |grep xxxx...
2020-09-15 23:03:52 2102
原创 gstreamer(一)入门和概述
一.概述在音视频领域接触最多实现的方案通常是通过ffmpeg(PC和sever端居多)或者硬件厂家的的SDK实现特定硬件的编解码功能(机顶盒,电视等嵌入式设备)。这里我们介绍一个在国内不太常用的解决方案----gstreamer媒体库二.Gstreamer 的特点:gstreamer跟ffmpeg一样,也是一个媒体框架,可以实现采集,编码,解码,渲染,滤镜等一条龙的媒体解决方案。跟ffmpeg一样,也是有命令行工具进行测试验证。同时还可以通过代码框架直接封装命令来做工程开发,这一点ffm
2020-09-06 21:05:00 49853 4
原创 GPU温度的采集
随着高清,4K视频的推广,视频GPU硬件编码,解码,转码已经开始成为主流。同时人工智能的兴起,深度学习也离不开硬件GPU的模型训练和计算。GPU硬件参数越来得到开发人员的关注,对GPU 温度,占用率,显存等参数也纳入监控平台的重要监控指标。本文以温度为例介绍如何监控显卡GPU相关参数。监控GPU参数通常由以下几种方式:直接查看Windows资源管理器里面GPU参数。Windows资源监控管理器,能看到GPU各种占有率参数,但看不到GPU的温度,且通过这UI种方式只能在Windows系...
2020-06-26 19:56:28 2058
mdevctl 工具(shell 脚本版本)
2023-01-21
easy-capture 屏幕工具
2022-05-21
jni 最佳实践demo
2021-08-07
7zip_Release.7z
2020-12-29
windows的hook实现demo(全面支持X86/X64)
2020-10-06
AAC关键配置信息,RTMP推流的2个字节配置信息
2020-06-14
onvif-SDK.zip
2020-05-05
onvifclient.rar
2020-05-05
RTP流发送器(模拟服务器发RTP流)
2019-04-27
RTP(PS流)播放器
2019-04-27
RTP(h264)播放器
2019-04-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人