导航:首页 > 操作系统 > linuxh264

linuxh264

发布时间:2024-12-15 09:31:47

⑴ h264视频用什么软件播放

H264是一种高度压缩的数字视频,常用于监控视频,它可以由VLC、5Kplayer、Potplayer、暴风影音和Mplayer软件播放。

1.VLC播放器:支持windows、MaC、linux、BSD、Beos、Solaris、QNX、IOS平台,可播放现有非加密视频的所有格式。它是第一个在Win/Lin/Mac平台上实现硬件加速的播放器。即使在硬件加速之前,VLC的性能也得到了改善。

2.Mplayer播放器:Mplayer播放器是一个非常实用的计算机端视频播放工具。Mplayer播放器支持大部分视频格式文件,可以为用户提供最佳的视频播放体验、高度还原的图像质量和音质,支持视频文件的最佳播放级别。

3.Potplayer:Potplayer软件配有专业的编解码器,方便快捷。安装后,可以观看任何格式的视频文件。.Potplayer启动速度快,回放稳定,支持视频字幕。其次,potplayer支持32位和64位系统,内置硬件加快解码速度。

4.5kplayer:5kplayer支持MKV/TS/M2TS/AVI/flv/RM/RMVB/VOB/ISO/SWF等格式。该软件专为4K/5K电影设计,提供多字幕、画面旋转反转、音画面同步、曲目选择等功能,方便播放各类电影和流媒体视。

5.暴风影音:暴风影音是世界领先的媒体播放器。暴风影音致力于为用户带来更快的播放体验和视觉效果。新版本的暴风影音优化了解码方案,支持多种视频格式,包括MPEG4、flv和WMV。

参考资料来源:网络-VLC

网络-Mplayer

网络-PotPlayer

网络-暴风影音

⑵ 如何实时h264编码及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

阅读全文

与linuxh264相关的资料

热点内容
为什么服务器尚未就绪 浏览:62
java认证培训 浏览:439
特征算法计算公式 浏览:747
阿里云服务器ecs配置全解 浏览:337
图片加密和解密有什么区别 浏览:120
结构化编程dll 浏览:73
pdf浏览器哪个好用 浏览:386
单片机模拟mac层 浏览:890
内存卡加密了别的手机能打开吗 浏览:875
编程舱座椅 浏览:470
高优先权调度算法例题 浏览:841
androidstudio中文版教程 浏览:951
Javautf8转utf16 浏览:650
冰箱变频压缩机好坏 浏览:601
文件夹怎么发快递 浏览:420
安卓桌面锁定了图案怎么办 浏览:166
苹果手机app卸载2个月后如何恢复 浏览:482
京喜app怎么帮好友代付 浏览:651
什么服务器可以五千人使用 浏览:303
95后程序员 浏览:765