- 博客(58)
- 收藏
- 关注
转载 音频编码格式介绍-AAC
1. 概述AAC(Advanced Audio Coding),被认为是MP3的继任者,相对MP3有更高的压缩效率。由Fraunhofer IIS、杜比实验室、AT&T、Sony(索尼)等公司共同开发。1997年由MPEG正式宣布为国际标准,为MPEG-2标准的第7部分-ISO/IEC 13818-7:1997。MPEG-4标准中,AAC音频流部分在ISO/IEC 14496-3 (subpart 4)中规定。AAC被iPhone、iTunes以及大多数便携式设备所使用。AAC有很多的选项
2022-02-18 10:20:59
4303
转载 WebRTC丢包重传简介
目录概述NACK问题一、数据包真丢了,会一直重传吗?问题二、重传次数不到最大限制次数,就会一直等待吗?问题三、当大量丢包时,会全部重传吗?NACK改进总结概述WebRTC之所以可以优秀的完成音视频通讯,和它本身的丢包重传机制是密不可分的,今天我们就来看看其中的奥秘。本文以M76版本展开,如果你的工程是基于其他版本开发的,也可以参考。NACK说到丢包重传就不得不提到NACK技术,那么NACK是什么呢。它的全称是Negative Acknowledgment Pa
2021-12-13 09:59:07
1112
原创 webrtc的源码流程
一篇介绍webrtc的h264编码,从视频采集,编码,rtp传输,包解析,解码,渲染流程的文章:https://blog.piasy.com/2019/01/01/WebRTC-RTP-Mux-Demux/index.html#webrtc-h264-%E8%A7%A3%E5%8C%85%E5%AE%9E%E7%8E%B01. 整体模块流程见下图。发送流程 a. 先通过encoder编码得到要发送的视频帧; b. RtpSender模块对要发送的视频帧进行打包; c. 打包后的pa...
2021-07-05 19:18:25
452
原创 rtmp协议
simple rtmp server:https://github.com/winlinvip/simple-rtmp-serverRTMP协议:播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。1. RTMP连接都是以握手作为开始的;2. 建立连接阶段用于建立客户端与服务器之间的“网络连接”;3. 建立流阶段用于建立客户端与服务器之间的“网络流”;4. 播放阶段用于传输视音频数据。在一条TCP 连接中,包含着几条Message St..
2021-05-12 17:08:38
240
原创 常用git command
git command查看git库信息:git remote -v查看所有branch分支:git branch -r创建branch分支:git branch new_branchgit push --set-upstream origin new_branch删除本地分支:git branch -d branch_name删除远程分支:git push origin --delete branch_name切换到指定branch:git checkout branc
2021-05-10 16:31:20
266
转载 WebRTC通信流程
WebRTC是HTML5支持的重要特性之一,有了它,不再需要借助音视频相关的客户端,直接通过浏览器的Web页面就可以实现音视频对聊功能。而且WebRTC项目是开源的,我们可以借助WebRTC源码快速构建自己的音视频对聊功能。无论是使用前端JS的WebRTC API接口,还是在WebRTC源码上构建自己的对聊框架,都需要遵循以下执行流程:上述序列中,WebRTC并不提供Stun服务器和Signal服务器,服务器端需要自己实现。Stun服务器可以用google提供的实现stun协议的测试服务器(s.
2021-04-23 10:12:56
645
原创 c++虚函数指针和虚函数表
一. 要点:1. 在一个类中,多个虚函数,只是在虚函数表对应多个函数指针项,类对象还是只有一个虚函数表的指针(32位4字节或64位8字节);通常这个虚函数表指针就在对象最开始的四个字节;2. 虚函数表不占用类对象的内存空间,多个不同对象的虚函数表指针,是指向同一份虚函数表的;二. 几种情况:1. 当基类Base有虚函数;class Base{};Base对象的前四个字节有一个虚函数表指针,指向Base的虚函数表;2. 当基类Base有虚函数,子类Derived没有虚函数;class .
2021-04-19 16:20:17
742
原创 c++11实现生产者和消费者
#include <iostream>#include <list>#include <thread>#include <mutex>#include <condition_variable>#include <unistd.h>using namespace std;mutex mtx;condition_variable cv_producer;condition_variable cv_consumer;..
2021-04-19 14:10:30
192
转载 PCM音频编码
概述PCM脉冲编码调制是Pulse Code Modulation的缩写。脉冲编码调制是数字通信的编码方式之一。主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化,同时将抽样值按分层单位四舍五入取整量化,同时将抽样值按一组二进制码来表示抽样脉冲的幅值。语音编码原理有一定电子基础的都知道传感器采集音频信号是模拟量,而我们实际传输过程中使用的是数字量。而这就涉及到模拟转数字的过程。而模拟信号数字化必须经过三个过程,即抽样、量化和编码,以实现话音数字化的脉冲编码调制(PCM,Pulse.
2020-05-13 09:48:43
2073
转载 视频编码中的pts
在ISO/IEC13818-1中制定90k Hz 的时钟,如果编码帧频是30,那么时间戳间隔就该是90000 / 30 = 3000。从dts/pts转化为秒公式: pts /90000从dts/pts转化为微秒公式: pts * 1000000/90000 = pts * 100 /9pts 是33 bits 值,需要用 long long(linux) 或 __int64(windo...
2020-01-02 09:45:21
1252
转载 H.264流媒体协议格式中的Annex B格式和AVCC格式深度解析
版权声明:本文为优快云博主「Chucky_Hu」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.youkuaiyun.com/Romantic_Energy/article/details/50508332本文需要读者对H.264流有一定的了解才可以理解2种格式差异。首先要理解的是没有标准的H.264基本流...
2019-11-26 15:11:44
7996
原创 播放器的基本架构
不考虑网络下载模块,从播放链路来说,一般包含最基本的五个模块,每个模块是一个单独的线程;以及四个帧数据队列;如果有其他需求,可以在这个基本框架上再扩展,比如在解码后,渲染前加入一些滤镜处理模块等; 5个模块线程: 1. 解复用模块: 负责媒体文件的解复用,从文件读出视频帧和音频帧数据,分别放入两个队列; 2. 视频解码模块: 负责视频帧解码,从视频帧队列读入...
2019-01-11 15:06:38
1545
原创 ndk开发-gtest编译
用NDK编译gtest库:1. gtest代码pull下来后,创建jni目录,将googleTest下文件放到jni目录下2. 在jni目录下创建Application.mk和Android.mk文件Application.mk##Application.mk############################################################...
2018-12-11 15:48:06
1402
原创 交叉编译valgrind
valgrind编译注意事项:1. --prefix的路径必须和手机上实际运行的目录是一致的,不然运行valgrind会报错:failed to start tool 'memcheck' for platform 'arm-linux': No such file or directory"2. 用ndk-r11c,valgrind版本3.12,编译出来在android6.0上跑,结...
2018-12-11 15:43:44
1209
转载 yuv420转为cv::Mat
函数1:读取avi格式的视频文件,转换成Yuv420格式,并写入文件void WriteYuv() { cv::VideoCapture vc; bool flag = vc.open("S1000008.avi"); if (!flag) { printf("avi file open error \n"); ...
2018-12-11 15:39:14
2380
转载 yuv420p转jpg图片
yuv420p转jpg图片int yuv420p_to_jpeg(const char * filename, const char* pdata,int image_width,int image_height, int quality){ struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr...
2018-12-11 15:32:48
2096
1
原创 常见编译问题
1. 链接库时报错,提示recompile with -fPIC的问题/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libz.a(gzlib.o): relocation R_X86_64_32S against `.rodata' can not be used when making a sh...
2018-12-11 15:30:15
955
原创 ffmpeg的av_read_frame杂记
av_read_frame在ffmpeg内部包含两个层次的读:1. 解封装的读,根据封装协议如flv或者mp4,调用相关注册接口(AVInputFormat结构的回调函数), 其返回的是一个AVPacket结构;2. 解协议的读,根据网络传输协议如http或rtmp或ykstream,调用相关注册接口(URLProtocol),其返还的是一个size大小的buf;3. 这两层读的中间,...
2018-09-25 16:37:48
2218
原创 Andorid.mk包含第三方so库方法
Android.mk#jni/Android.mkLOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := android-ffmpegLOCAL_SRC_FILES :=c ffmpeg-build/$(TARGET_ARCH_ABI)/libffmpeg.soLOCAL_EXPORT_C_INCLUDES := f...
2018-06-22 18:04:19
5222
1
原创 nginx服务器搭建
启动nginx服务器:/usr/local/etc/nginx-1.5/sbin/nginx在10.xx.xx.xx服务器上启动服务器:运行文件: /usr/local/nginx-1.6/sbin/nginx 或者直接运行 service nginx start配置文件地址:/etc/nginx/nginx.conf媒体文件地址:/usr/local/nginx-1.6/html/flv_...
2018-06-22 17:59:16
287
原创 mediacodec配置h265解码
参考ffmpeg解析vps,sps和pps:在ffmpeg中可以参考下面的函数是如何解析extradata得到vps,sps,pps的:hevc_decode_extradata()AVCodecContext中 extradata 的 parsealigned(8) class HEVCDecoderConfigurationRecord{ unsigned int(8) config...
2018-06-22 17:55:14
4563
原创 深度学习的相关资料
tensorflow的官方社区:http://www.tensorfly.cn/tfdoc/tutorials/mnist_pros.html介绍深度学习入门的文章,写得很浅显易懂:http://www.tensorfly.cn/home/?p=80介绍卷积神经网络的不错文章:https://blog.youkuaiyun.com/qq_25762497/article/det...
2018-05-16 11:25:50
246
原创 ndk开发-ffmpeg编译
进入模拟器shell:D:\Users\zhouhaitao\AppData\Local\Android\sdk\platform-tools\adb shellndk编译链接静态库:LOCAL_STATIC_LIBRARIES := avformat postproc swscale avfilter avcodec avutil swresample注意库的名字省略了前缀lib和后缀.a,如库...
2018-05-11 15:35:39
373
转载 FFmpeg常用基本命令
使用ffprobe查看视频信息 ./ffprobe -show_frames bale.flv ./ffprobe -show_packets bale.flv ./ffmpeg -i bale.flv 拼接音频 ffmpeg -i concat:"1.flv|2.flv" -c copy 3.flv1.分离视频音频流ffmpeg -i input_file -vc...
2018-05-09 17:00:18
213
转载 编译ffmpeg的so库,不带版本号后缀
asking questions leads always to finding answers. that's why i was successful, digging into the make files helped. do the following:run your configurationfind "config.mak"changeSLIBNAME_WITH_VERSION=$...
2018-05-09 16:59:24
2816
原创 c++调用python
1. 将py文件导入到python安装库的目录;2. 编写调用python的c++代码:void Test::init_numpy(){ import_array();}//init python environmentTest:Test(){ Py_SetPythonHome("c:\\Python2.7"); Py_Initialize(); ini...
2018-05-09 16:58:16
413
原创 编译opencv的android版本(with ffmpeg)
1. 下载opencv的源码2. 在opencv的根目录下新建目录mybuild3. 进入mybuild目录,执行命令:cmake \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D CUDA_FAST_MATH=ON \ -D WITH_CUFFT=ON \ -D ...
2018-05-09 16:17:44
3208
2
原创 opencv在ubuntu的编译
第一步,下载源码:直接用git clone下来:git clone https://github.com/Itseez/opencv.git开始从官网下过3.3.1版本和3.2版本的源码,编译都有各种问题,还是直接从git clone比较好;第二步,准备工作,安装所需的包:sudo apt-get install cmakesudo apt-get install
2017-12-20 11:21:45
350
原创 深入理解计算机系统(读书笔记)
link对于一个最终链接而成的elf文件,它里面所包含的东西,就是.text段,.rodata段,.data段,.bss段,.symtab等这些数据内容对于符号表,有weak和strong之分,没有初始化的符号定义为weak,已经初始化的为strong,如果link发现两个relocatable object含有相同的符号定义时,有三种情况:1. 两
2017-04-17 11:25:16
676
转载 SNMP getbulk参数说明
SNMPv2 defines the get-bulk operation, which allows a management application to retrieve a large section of a table at once. The standard get operation can attempt to retrieve more than one MIB obje
2014-12-08 16:36:50
15525
2
转载 socket中BPF的设置
* This packet filter checks for the following conditions. * - Ethernet Type = IP (0x0800) * - IP Protocol Type = UDP (17) * - Not an IP fragment * - UDP Port = DHCP Client (68)
2014-11-05 10:29:04
2011
转载 Linux下利用backtrace追踪函数调用堆栈以及定位段错误
一般察看函数运行时堆栈的方法是使用GDB(bt命令)之类的外部调试器,但是,有些时候为了分析程序的BUG,(主要针对长时间运行程序的分析),在程序出错时打印出函数的调用堆栈是非常有用的。在glibc头文件"execinfo.h"中声明了三个函数用于获取当前线程的函数调用堆栈。int backtrace(void **buffer,int size) 该函数用于获取当前线程的
2014-10-30 10:16:28
803
转载 normal socket ioctl to net interface ioctl
Write down for wifi framework.Describe how the flow is transaferred from a normal socket to the specific network interface ioctl. An artical from Vipul Gupta In general an ioctl call in a u
2014-06-27 15:58:58
844
原创 raw socket
ipv4:1.创建收发二层报文的raw socket:socket(PF_PACKET, SOCK_RAW, 0); 或者socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));2.创建收发三层(IP层)报文的raw socket:socket (PF_INET, SOCK_RAW, IPPROTO_RAW);setsockopt
2014-05-20 17:11:23
4048
转载 Linux上ipv6的RA配置
http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/proc-sys-net-ipv6..html关于NDP的RA相关配置:http://strugglers.net/~andy/blog/2011/09/04/linux-ipv6-router-advertisements-and-forwarding/
2014-04-30 13:47:08
7186
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人