自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (2)
  • 收藏
  • 关注

原创 FLV封装格式解析

原理FLV封装格式是由一个FLV Header文件头和一个一个的Tag组成的。Tag中包含了音频数据以及视频数据。FLV的结构如下图所示。有关FLV的格式本文不再做记录。可以参考文章《视音频编解码学习工程:FLV封装格式分析器》。本文的程序实现了FLV中的FLV Header和Tag的解析,并可以分离出其中的音频流。代码整个程序位于simplest_fl

2016-09-28 18:25:36 1201

原创 H.264视频码流解析

原理H.264原始码流(又称为“裸流”)是由一个一个的NALU组成的。他们的结构如下图所示。其中每个NALU之间通过startcode(起始码)进行分隔,起始码分成两种:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU对应的Slice为一帧的开始就用0x00000001,否则就用0x000001。H.264码流解析的步骤就是首先从码流中搜索0x000001和0x00000001,分离出NALU;然后再分析NALU的各个字段。本文的程序即实现了上述的两个步骤。

2016-09-28 17:08:46 1124

原创 一个完整直播app功能分析

1.一个完整直播app功能1、聊天私聊、聊天室、点亮、推送、黑名单等;2、礼物普通礼物、豪华礼物、红包、排行榜、第三方充值、内购、礼物动态更新、提现等;3、直播列表关注、热门、最新、分类直播用户列表等;4、自己直播录制、推流、解码、播放、美颜、心跳、后台切换、主播对管理员操作、管理员对用户等;5、房间逻辑创建房间、

2016-09-28 15:04:29 19314 1

原创 AVFrame

AVPacketAVPacket定义在avcodec.h中FFMPEG使用AVPacket来暂存解复用之后、解码之前的媒体数据(一个音/视频帧、一个字幕包等)及附加信息(解码时间戳、显示时间戳、时长等)。其中:dts 表示解码时间戳,pts表示显示时间戳,它们的单位是所属媒体流的时间基准。stream_index 给出所属媒体流的索引;data 为数据缓冲区指针,size为

2016-09-28 11:04:57 1306

原创 AVFormatContext

AVFormatContext这个结构体描述了一个媒体文件或媒体流的构成和基本信息这是FFMpeg中最为基本的一个结构,是其他所有结构的根,是一个多媒体文件或流的根本抽象。其中:nb_streams和streams所表示的AVStream结构指针数组包含了所有内嵌媒体流的描述;iformat和oformat指向对应的demuxer和muxer指针;pb则指向一个控制底层数据读写的Byt

2016-09-28 10:57:14 1612

原创 AVStream

AVStream该结构体描述一个媒体流主要域的释义如下,其中大部分域的值可以由av_open_input_file根据文件头的信息确定,缺少的信息需要通过调用av_find_stream_info读帧及软解码进一步获取:index/id:index对应流的索引,这个数字是自动生成的,根据index可以从AVFormatContext::streams表中索引到该流;而id则是流的标

2016-09-28 10:41:35 1646

原创 AVCodecContext

AVCodecContext这是一个描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息如果是单纯使用libavcodec,这部分信息需要调用者进行初始化;如果是使用整个FFMPEG库,这部分信息在调用 av_open_input_file和av_find_stream_info的过程中根据文件的头信息及媒体流内的头部信息完成初始化。其中几个主要 域的释义如下:extra

2016-09-28 10:40:24 1083

原创 AVCodec

AVCodec是存储编解码器信息的结构体const char *name:编解码器的名字,比较短const char *long_name:编解码器的名字,全称,比较长enum AVMediaType type:指明了类型,是视频,音频,还是字幕enum AVCodecID id:ID,不重复const AVRational *supported_framerates:支持

2016-09-28 10:39:20 2576

原创 FFMPEG中结构体

FFMPEG中结构体很多。最关键的结构体可以分成以下几类:解协议(http,rtsp,rtmp,mms)AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结构。(注意:FFMPEG中文件也被当做一种协议“file”)解封装(flv,a

2016-09-28 10:38:01 379

原创 FFmpeg常用推流命令

FFmpeg常用推流命令一、FFmpeg推RTMP流准备工作首先确保自已已经安装了nginx + rtmp服务器。打开配置文件nginx.conf完成如下配置nginx配置.1如果没有nginx + rtmp服务器,请阅读我的另一篇简书文章Mac搭建nginx+rtmp服务器二、FFmpeg推流1.推流MP4文件视频文件地址:/Users/x

2016-09-27 18:21:13 19528 4

原创 SPS和PPS

SPS和PPS串,包含了初始化H.264解码器所需要的信息参数,包括编码所用的profile,level,图像的宽和高,deblock滤波器等。SPS:序列参数集。PPS:图像参数集。在H264码流中,都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"为开始码的,找到开始码之后,使用开始码之后的第一个字节的低5位判断是否为7(sps)或者8(pps), 及data

2016-09-27 17:19:56 3503

原创 H.264 NAL头解析

H.264 NAL头解析如果NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001;否则用3字节表示,0x000001。NAL Header:forbidden_bit,nal_reference_bit(优先级)2bit,nal_unit_type(类型)5bit。标识NAL单元中的RBSP数据类型,其中,nal_unit_type为1, 2, 3, 4, 5的

2016-09-27 17:17:55 734 2

原创 H.264压缩

H.264的压缩方法:1.分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多。2.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧;3.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧;4.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。帧内(Intraframe)压缩也称为空间压缩(Spatial compr

2016-09-27 17:15:55 1115

原创 H.264:i帧,p帧,b帧

i帧:帧内编码帧,i帧表示关键帧,它保留了一副画面完整的数据信息,解码的时候只需要这归真数据就可以完成(因为i帧里面包含了花面狸免得所有信息)。i帧的特点:1:它是一个全帧压缩编码帧,它将全帧图像信息进行JPEG压缩编码以及传输。2:解码的时候只需要通过i帧的数据就可以重构完整的图像。3:i帧描述了图像背景和运动主题的详情4:i帧不需要参考其他画面二

2016-09-27 17:14:16 898

原创 H.264视频编码

H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式,它即保留了以往压缩技术的优点和精华又具有其他压缩技术无法比拟的许多优点。1.低码流(Low Bit Rate):和MPEG2和MPEG4 ASP等压缩技术相比,在同等图像质量下,采用H.264技术压缩后的数据量只有MPEG2的1/8,MPEG4的1/3。显然,H.264压缩技术的

2016-09-27 17:11:21 768

转载 将视频 YUV 格式编码成 H264

首先开始的时候我们插入一张雷神大大的图帮助大家理解一下我们今天的操作究竟属于那一步。音视频格式封装层次从上图可以看出我们要做的,就是将像素层的 YUV 格式,编码出编码层的 h264数据。前面讲到我们已经成功编译出 iOS 中可用的 ffmpeg 的库了,那么我们首先熟悉一下今天我们要用到的 ffmpeg 中的函数和结构体AVFormatContext: 数据文件操

2016-09-23 18:11:43 24768 16

原创 快速集成iOS基于RTMP的视频推流

效果图iTools有点卡, 但是推到服务器倒是很快的.推流Mac搭建nginx+rtmp服务器我个人电脑里面很早以前就搭建过nginx+rtmp服务器, 但是昨天在公司电脑上搭建的时候, 手动输入命令的时候, 还是出现了bug(所以, 建议大家直接复制命令, 不要手动输入命令). 所以记录一份详细的搭建步骤, 防止再次跳坑...此段教程参考自推酷:Mac搭建ng

2016-09-22 13:10:07 769

原创 iOS10适配问题

随着iOS10发布的临近,大家的App都需要适配iOS10,下面是我总结的一些关于iOS10适配方面的问题,如果有错误,欢迎指出.1.系统判断方法失效:在你的项目中,当需要判断系统版本的话,不要使用下面的方法:#define isiOS10 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]

2016-09-14 13:08:46 9394 1

原创 iOS10配置须知

在iOS10中,如果你的App想要访问用户的相机、相册、麦克风、通讯录等等权限,都需要进行相关的配置,不然会直接crash。需要在info.plist中添加App需要的一些设备权限。NSBluetoothPeripheralUsageDescription访问蓝牙NSCalendarsUsageDescription访问日历NSCameraUsageDescription

2016-09-14 13:03:16 3173

原创 iOS10相册相机闪退bug

iOS10系统下调用系统相册、相机功能,遇到闪退的情况,描述如下:This app has crashed because it attempted to access privacy-sensitive data without a usage description.The app's Info.plist must contain an NSPhotoLibraryUsageDesc

2016-09-14 12:54:10 5597

原创 关于@package

经过研究,@package变量,对于framework内部,相当于@protected, 对于framework外部,相当于@privat。这个特性,很适合用于开发第三方的静态类库,因为多数人并不希望让别人知道自己属性的值

2016-09-12 11:25:44 615

原创 添加Cocoapods私有库

给库添加Cocoapods支持, 使这个工具使用起来更加方便, 更好的使用Cocoapods, 助力iOS程序开发, 下面进入正题, 想要实现这个过程, 绝对不虚此读.首先写好一个要添加Cocoapods支持的库  这是我第一个添加Cocoapods支持的工具iOS7兼容自定义带动画的AlertViewController 你可以看看注册trunk// 升级至最

2016-09-09 16:34:53 736

原创 iOS日历、日期、时间的计算

获取一个月的总天数1.获取当月的天数- (NSInteger)getNumberOfDaysInMonth{ NSCalendar * calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; // 指定日历的算法 NSDate * currentDate = [NSDa

2016-09-07 10:53:48 2230

Reveal 20最新破解器

最新的Reveal版本破解工具,一键破解,很方便,欢迎使用

2019-01-23

Reveal 20最新

最新版Reveal

2019-01-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除