aac

h264和aac封装flv

ⅰ亾dé卋堺 提交于 2020-02-04 00:34:15
flv格式解析 FLV是一个二进制文件,简单来说,其是由一个文件头(FLV header)和很多tag组成(FLV body)。tag又可以分成三类:audio,video,script,分别代表音频流(0x8),视频流(0x9),脚本流(0x12),而每个tag又由tag header和tag data组成。 flv官方标准文档 分析之前推荐一个flv分析工具: flv分析工具 工具的使用说明和出处: 使用说明 以一个具体的flv文件为例具体分析: 文件头由9bytes组成: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kbntqCE6-1580714898238)(https://i.loli.net/2020/01/20/SADYzaEdRkWUGQ9.png)] 前3个bytes是文件类型,总是“FLV”,也就是(0x46 0x4C 0x56)。第4btye是版本号,目前一般是0x01。第5byte是流的信息,倒数第一bit是1表示有视频(0x01),倒数第三bit是1表示有音频(0x4),有视频又有音频就是0x01 | 0x04(0x05),其他都应该是0。最后4bytes表示FLV 头的长度,3+1+1+4 = 9。 FLV header后面就是FLV body,FLV body中包含很多个FLV tag,tag的分类有三种

项目实战:模拟mplayer实现

僤鯓⒐⒋嵵緔 提交于 2020-02-03 15:16:20
现在音频实现很多调用的mplayer,它的底层也是调用ALSA驱动框架,但是海思平台没有提供底层的驱动实现,当然可以自己编写驱动实现,不过如果是简单的关于控制音频的功能,可以尝试模拟mplayer播放音频方式的程序,这里就简单介绍一下实现的过程。 一、裁剪sample_audio.c 可以从下图看出sample_audio.c包含着不同功能的示例,将不需要的功能全部裁剪掉,只保留读取音频文件播放功能。 二、修改Sample_audio.c调用方式 一般我们调用mplayer形式为./mplayer xxx.wav -af volume=xxx -srate 44100,所以我们接口需要根据文件名、采样频率以及音量大小来播放音频。 修改后的接口如下: 因为存在音频是wav这样海思不支持的音频文件,海思只能解析aac还有其他几种编码格式,所以我们需要将外部音频文件从wav转为aac,有很多种方式转换,目前我是用《迅捷视频转换器》直接将wav转换成aac音频,然后在audio_sample.c中将输入的文件名xxx.wav转换成xxx.aac即可调用。 这里有一个问题,编译生成后将audio_sample可执行程序重命名为mplayer,执行./mplayer xxx.wav -af volume=xxx -srate 44100后可以正常播放语音,不过会循环播放。 三、修改播放方式

使用ffmpeg进行网络直播

夙愿已清 提交于 2020-01-26 01:19:34
一、采集:使用python调用摄像头采集,原设想是使用树莓派摄像头采集,但是经费紧张买不起,先用摄像头凑合下,反正很简单。 原理就是先录一小段视频,然后循环播放,用celery做任务控制,每5秒钟录一段很小的视频,然后再循环录制。控制录制开始和停止的方法就是在redis钟设置一个键,录像程序运行的前提是这个键允许录制,如果要求录制停止就把这个键设置为停止。每5秒循环录制。正式使用后用python调用ffmpeg的命令进行推流直播,录制视频的格式是avi格式,要记得定时删除。录视频使用opencv的cv2库。注意安装最新版的opencv 二、安装simple rtmp server:从github上下载simple rtmp server,使用rtmp播放 https://github.com/ossrs/srs。 安装方法 http://blog.csdn.net/Henry_wk/article/details/50377881 安装时记得apt-get的源要使用默认源 安装好之后改配置文件,目录在trunk/conf/rtmp.conf,配置文件如下 # the config for srs to delivery RTMP # @see https://github.com/ossrs/srs/wiki/v1_CN_SampleRTMP # @see full.conf

使用FAAC实现PCM转AAC

大城市里の小女人 提交于 2020-01-22 18:47:38
一、前言 AAC全称为Advanced Audio Coding,目前比较主流的AAC开源编码器主要有Nero和Faac。接下来我们将使用Faac实现音频PCM至AAC的音频格式转换,并使用Emscripten编译成WebAssembly模块。 二、实现步骤 使用Faac实现音频编码,主要有以下步骤: 2.1 主要函数 faacEncOpen faacEncHandle FAACAPI faacEncOpen ( unsigned long sampleRate , unsigned int numChannels , unsigned long * inputSamples , unsigned long * maxOutputBytes ) ; 变量名 变量含义 sampleRate 输入PCM的采样率。 numChannels 输入PCM的通道数。 inputSamples 编码一帧AAC所需要的字节数,打开编码器后获取,故声明时不需赋值。 maxOutputBytes 编码后的数据输出的最大长度。 faacEncEncode int FAACAPI faacEncEncode ( faacEncHandle hEncoder , int32_t * inputBuffer , unsigned int samplesInput , unsigned char *

通过摄像机视频设备或者流媒体服务器SDK获取到数据转换成RTMP流实现网页/手机微信播放

烈酒焚心 提交于 2020-01-19 01:01:14
写这篇博客主要是为了给新入门的流媒体开发者解惑,现在看到各种开发者的需求:网页播放RTSP摄像机、微信播放RTSP摄像机、网页播放摄像机SDK输出的视频流、网页播放第三方流媒体平台输出的视频流、包括Github有一些所谓的H5RTSPPlayer,这些都无外乎一个共同点,就是H.264+AAC进行RTMP推流; 将整个过程进行拆分为二: 一、通过RTSP或者SDK获取H.264视频流和AAC音频流,获取RTSP流我们可以用ffmpeg、EasyRTSPClient( https://github.com/EasyDarwin/EasyRTSPClient )等方案,获取SDK流我们就可以用各个摄像机厂家或者平台厂家提供的各种平台SDK(海康NetSDK、大华NetSDK、雄迈LocalSDK)等等,这些都能无一例外地有共同的流程: 初始化 登录 设置数据回调 开始实时流 处理实时返回的音视频数据 释放Handle 视频数据大多返回的是H.264数据流,音频就各种各样了,有返回G.711、G.726、AAC的,如果是返回的G.711或者G.726时,就需要调用AAC的编码器(如ffmpeg、 EasyAACEncoder 等)将安防的音频流转换成AAC的音频编码格式; 二、将编码好的H.264视频和AAC音频以RTMP/FLV的方式推流到通用的RTMP服务器(nginx-rtmp

ffmpeg命令详解(转)

谁都会走 提交于 2020-01-18 05:14:14
摘自:https://www.cnblogs.com/AllenChou/p/7048528.html FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。[百度百科] ffmpeg使用语法 ffmpeg使用语法: ffmpeg [[options][`-i' input_file]]... {[options] output_file}... 如果没有输入文件,那么视音频捕捉就会起作用。 作为通用的规则,选项一般用于下一个特定的文件。如果你给 –b 64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。 缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。 3.选项 a) 通用选项 -L license -h 帮助 -fromats 显示可用的格式,编解码的,协议的。。。 -f fmt 强迫采用格式fmt -I filename 输入文件 -y 覆盖输出文件 -t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持 -ss position

ffmpeg参数说明

独自空忆成欢 提交于 2020-01-17 02:29:30
ffmpeg.exe -i F:\慶哥\慶哥之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 使用-ss参数 作用(time_off set the start time offset),可以从指定时间点开始转换任务。如: 转换文件格式的同时抓缩微图: ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' 对已有flv抓图: ffmpeg -i "test.flv" -y -f image2 -ss 8 -t 0.001 -s 350x240 'test.jpg' -ss后跟的时间单位为秒 Ffmpeg转换命令 ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp 或者 ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b

Playing AAC (ADTS) file with Netstream Appendbytes

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-13 07:20:52
问题 I want to know if it's really possible to play an AAC (ADTS header) file with Netstream.appendbytes. I'm talking about files that end .aac not AAC audio inside M4A or MP4 containers. I'm aware Netstream can't parse ADTS headers etc so I already have a class for parsing the data and gives back correct info such as channels, bitrates, framelengths etc. Putting this together gives silence: Make FLV header (+ append) ->> Make audio tag header (+ append) ->> now append with raw/headerless AAC

AAC及其封装格式

走远了吗. 提交于 2020-01-13 02:27:31
背景 最近在媒体库中需要加AAC,要求能与华为的一个IP语音电话型号,通过AAC对通。 这个需求的功能并不复杂,而难在对于AAC的封装格式标准及对于AAC编解码库的使用,需要有一个系统性的认识。AAC标准光编码规格就有好几种,并且针对不同的场景衍生出的封装格式也有好几种。应用到流媒体,rfc也有几个。所以是细节特别多。很容易走错方向。这里做个总结,这将是一系列文章,先介绍AAC封装标准,RTP封包标准,再讲解libfdk-aac的用法,及在RTP流媒体中应用时所需注意的细节。 AAC AAC是在MPEG-2和MPEG-4中定义的,是一系列编码规格的统称。 AAC标准包括一系列编码规格,这里只列出常用的几种AAC-LC,AAC-LD,AAC-ELD,HE-AAC。你可以将它们之间的关系理解成H264中base,main,high profile的关系。AAC-LC定义在MPEG-2中。AAC-LD,AAC-ELD,HE-AAC定义在MPEG-4中 既然是一种音频编码格式,它有两大基本应用场景:媒体文件(storage),流媒体(stream)。比如经常见的h264+aac的map4文件,rtp 携带aac媒体流。WAV格式是封装的PCM 音频码流(封装格式是记录码流中的信息,比如采样率,声道数等),那么对于的AAC也有封装格式,并且对不同的场景有不同的封装格式。封装格式有:ADIF

How do I use CoreAudio's AudioConverter to encode AAC in real-time?

随声附和 提交于 2020-01-09 09:17:26
问题 All the sample code I can find that uses AudioConverterRef focuses on use cases where I have all the data up-front (such as converting a file on disk). They commonly call AudioConverterFillComplexBuffer with the PCM to be converted as the inInputDataProcUserData and just fill it in in the callback. (Is that really how it's supposed to be used? Why does it need a callback, then?) For my use case, I'm trying to stream aac audio from the microphone, so I have no file, and my PCM buffer is being