×

h264

什么是H264版?视频编码H264和422的区别

admin admin 发表于2023-11-19 08:32:11 浏览34 评论0

抢沙发发表评论

大家好,h264相信很多的网友都不是很明白,包括什么是H264版也是一样,不过没有关系,接下来就来为大家分享关于h264和什么是H264版的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

什么是H264版

H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H.264是ITU-T以H.26x系列为名称命名的视频编解码技术标准之一。

H.264是ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像编码专家组)的联合视频组(JVT:joint video team)开发的一个数字视频编码标准。该标准最早来自于ITU-T的称之为H.26L的项目的开发。

扩展资料:

让视频变得更小、下载速度更快、所耗流量更少、图像质量更佳,给用户带来更完美的视觉体验,第四届江苏省“互联网+”大学生创新创业大赛决赛上周落下帷幕,南京大学武俊敏、刘骏团队的“人工智能视频解决方案”夺得冠军。而此前不久,该团队刚因此获得千万元融资。

公司研发团队从6个技术路径尝试实现图片、视频的压缩,但最终发现只有一条技术路径可以实现。而这条技术路径此前在行业内已经被否定,但他们没有放弃。最后的事实证明,这一选择是正确的。

该算法可实现图片压缩率在相同画质下比国际图像压缩标准提升300%,比谷歌图片压缩方案提升150%。公司提供的云平台支持百万级别企业接入,支持亿级个人会员数据存储和百万人同时在线。

参考资料来源:百度百科-H.264

参考资料来源:人民网-视频文件变小图像质量更佳 南大团队创新算法获千万元融资

视频编码H264和422的区别

422编码是高度无损、色彩损失(严格地说是失真)三分之一;

  • H264有更高的压缩比,有更好的图象质量。这也就意味着,同样的网络和同样的流量情况下,H264能够产生更好的视觉效果,从实际来看,这个效果是好很多的。

  • H264的算法更加复杂,程序实现烦琐,运行它需要更多的处理器和内存资源。因此,运行H264对系统要求是比较高的。

如何实时h364编码及aac编码

  1. 简单介绍    首先是捕获,这里采用了DirectShow的方式,对它进行了一定程度的封装,包括音视频。好处是直接使用native api,你可以做想做的任何修改,坏处是,不能跨平台,采集音视频这种应用,linux平台也是需要滴呀。有跨平台的做法,对视频,可以使用OpenCV,对音频,可以使用OpenAL或PortAudio等,这样就行了。    编码可以选择的余地比较大,对视频来讲,有H264, MPEG-4, WebM/VP8, Theora等,音频有Speex, AAC, Ogg/Vorbis等,它们都有相应的开源项目方案,我采用的是x264进行H264编码,libfaac进行aac编码,之后是否更改编码方案,等具体项目需求再说了。这里提一下WebM,Google牵头的项目,完全开放和自由,使用VP8和Vorbis编码,webm(mkv)封装,有多家巨头支持,目的是想要取代当前的H264视频编码,号称比后者更加优秀,我没有测试过实际效果。不过有商业公司牵头就是不一样,各项支持都很全面,有时间了关注一下。        2. 逻辑和流程    基本的思想是实现dshow ISampleGrabberCB接口,通过回调来保存每一个buffer。除了界面线程和dshow自己的线程之外,我们启动了两个线程,AudioEncoderThread和VideoEncoderThread,分别从SampleGrabber中取出数据,调用编码器进行编码,编码后的文件可以直接输出。看图:        程序是用VS2010构建的,看张工程截图:        Base下面的是对系统API的一些简单封装,主要是线程和锁。我这里简单也封装的了一下dshow的捕获过程,包括graph builder的创建,filter的连接等。directshow是出了名的难用,没办法,难用也得用。因为是VS2010,调用的Windows SDK 7.1中的dshow,没有qedit.h这个文件,而它正式定义ISampleGrabberCB的。不急,系统中还是有qedit.dll的,我们要做的就是从Windows SDK 6.0中,把它拷过来,然后在stdafx.h中加入这几行代码,就可以了    1 #pragma include_alias( "dxtrans.h", "qedit.h" )  2 #define __IDxtCompositor_INTERFACE_DEFINED__  3 #define __IDxtAlphaSetter_INTERFACE_DEFINED__  4 #define __IDxtJpeg_INTERFACE_DEFINED__  5 #define __IDxtKey_INTERFACE_DEFINED__  6 #include "qedit.h"      3. 音视频编码    相关文件:        Encoder下就是音视频编码相关的代码。X264Encoder封装了调用x264编码器的操作,FAACEncoder封装了调用libfaac编码器的操作,VideoEncoderThread和AudioEncoderThread负责主要的流程。下面我把关键代码贴出来,大家可以参考一下。    A. 视频编码线程    主要流程是首先初始化x264编码器,然后开始循环调用DSVideoGraph,从SampleGrabber中取出视频帧,调用x264进行编码,流程比较简单,调用的频率就是你想要获取的视频帧率。要注意的一点是,x264进行编码比较耗时,在计算线程Sleep时间时,要把这个过程消耗的时间算上,以免采集的视频帧率错误。    B. 音频编码线程    主要流程和视频编码线程相同,也是初始化FAAC编码器,然后循环调用DSAudioGraph,从SampleGrabber中取出视频帧,调用faac进行编码。和视频不同的是,音频的sample的频率是非常快的,所以几乎要不断的进行采集,但前提是SampleGrabber中捕获到新数据了才行,不然你的程序cpu就100%了,下面代码中IsBufferAvailaber()就是做这个检测的。    调用faac进行编码的时候,有点需要注意,大家特别注意下,不然编码出来的音频会很不正常,搞不好的话会很头疼的。先看下faac.h的相关接口    1 faacEncHandle FAACAPI faacEncOpen(unsigned long sampleRate, unsigned int numChannels,2 unsigned long *inputSamples, unsigned long *maxOutputBytes);3 4 int FAACAPI faacEncEncode(faacEncHandle hEncoder, int32_t * inputBuffer, unsigned int samplesInput,5 unsigned char *outputBuffer, unsigned int bufferSize);  faacEncEncode第三个参数指的是传入的sample的个数,这个值要和调用faacEncOpen返回的inputSamples相等。要做到这点,就要在dshow中设置好buffsize,公式是:    BufferSize = aac_frame_len * channels * wBytesPerSample// aac_frame_len = 1024

关于h264和什么是H264版的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。