Storm-Shadow
愿君出走半生,归来时仍是少年
展开
-
使用 AES 对称加密算法对视频文件进行加密解密(C++ 及 Java 实现)
因为项目需要,最近学习了一下 AES 加密算法,并分别用 C++ 和 Java 实现了这个算法。用 Java 实现是因为在 Android 项目上,需要对视频文件进行 AES 加密解密,用 C++ 实现是因为服务器需要对被加密过的视频进行解密。对视频文件进行加密解密的规则非常简单,加密时以 byte[] 的形式读取视频文件开头的一小段数据,一般 256byte 就足够了,然后对这个 byte[] 进行 AES 加密,把得到的密文替换到视频文件开头的 256byte 就可以了。因为视频文件的头被加密了,所原创 2020-07-03 10:09:07 · 5217 阅读 · 4 评论 -
十一、FFmpeg视频播放时的缩放
视频播放画面的缩放主要是通过libswscale这个库来实现。我们将用来缩放的基本函数是sws_scale。但一开始,我们必需定义一个SwsContext的结构体,然后把它传递给sws_scale函数。类似于在SQL中的预备阶段或者是在Python中编译的规则表达式regexp。要获取这个SwsContext,我们得通过sws_getContext函数,它的参数有:源的宽度和高度,我们想要的宽度和高度,源的格式和想要转换成的格式,同时还有一些其它的参数和标志。然后我们像使用img_convert一样来使原创 2020-06-25 14:30:54 · 806 阅读 · 0 评论 -
十、FFmpeg视频播放之快进快退
1、处理快进快退(seek)命令本章我将给大家讲解怎么给我们的播放器添加快进、快退、定位功能,这也是几乎所有播放器都有的功能。为实现此功能,我们要用到av_seek_frame函数,这个函数非常简单易用。我们用键盘上的左右键分别表示向前和向后跳转一小段,类似的用向上和向下键表示跳转一大段。 这里的一小段是10 秒,一大段是60 秒。为此要在主循环监听键盘事件。但是在捕捉到键盘事件后不能直接调用av_seek_frame函数,我们要在主要的解码循环,decode_thread循环中处理这些事件原创 2020-06-25 14:16:29 · 2332 阅读 · 2 评论 -
八、FFmpeg把音频流同步到视频流
1、同步音频现在我们已经有了一个比较像样的播放器了,最后让我们再来看一下剩下的一些简单的细节。在上章中我们说过也可以把音频同步到视频的,本章我们就来实现这个功能。这和把视频同步到音频是类似的:用一个内部视频时钟记录视频线程播放了多久,然后把音频同步到这个时钟上。最后我们再会进一步推广,把音频和视频都同步到外部时钟。2、实现视频时钟首先我们要实现一个类似音频时钟的视频时钟:一个给出当前视频播放时间的变量。可能你觉得这和使用上一帧的PTS来更新定时器一样简单。但是要注意了,当我们把视频帧间的时.原创 2020-06-25 13:54:13 · 847 阅读 · 7 评论 -
七、FFmpeg把视频流同步到音频流
1、如何同步视频直到现在,我们的视频播放器还几乎无法正常工作,虽然它能播放视频,也能播放声音,但是声音和视频还没同步。那么现在我们要怎么做呢?2、PTS和DTS的作用音频流和视频流信息里面,都有一些信息用于表明应该以多快速度和什么时间来播放它们。音频流有采样率,视频流有帧率。但是如果只是简单的通过数帧和乘以帧率的方式来同步视频,那么同步很可能会出问题。为了可以实现同步,在流中的数据包中有解码时间戳(DTS)和显示时间戳(PTS)。要理解这两个参数的作用,得先了解电影的存储方式。像MPEG等.原创 2020-06-25 13:16:47 · 1339 阅读 · 0 评论 -
六、FFmpeg-优化音频解码播放流程
一、音频解码播放概述前面我们用SDL处理了音频流,SDL会启动一个线程监听音频回调函数。本章中,我们仿照音频的处理方式来处理视频的显示。这样会使得代码更加模块化,易于开发维护。到我们对音视频进行同步时,这种模块化会使得同步的实现会非常方便。那我们从哪开始呢? 现在主函数处理的事情太多了:事件循环、读数据包、解码视频等。所以我们首先要做的是把这些处理抽离出来:创建一个专门用于解码数据包的线程,然后根据数据包的类型,把它们写入音频或视频队列中,再由相应的音频和视频线程读取。音频处理线程我们已经实现过了。原创 2020-06-25 12:34:55 · 661 阅读 · 0 评论 -
五、FFmpeg-用SDL播放音频
一、音频相关知识在这一章中,我们要做的事是播放音频,首先呈上本章程序的主要流程图SDL也有播放音频的方法,SDL_OpenAudio()函数就是用来打开音频设备的。这个函数需要一个SDL_AudioSpec结构体作为参数,该结构包含了音频播放的参数信息。在正式开始处理工作前,先来了解下计算机是怎么处理音频的。数字音频是由一长串的样本(samples)流组成的。每个sample表示声音波形中的一个值。音频按照特定的采样率(sample rate)进行录制,采样率表示每秒采样的次数,它也决定了音原创 2020-06-25 10:47:26 · 481 阅读 · 0 评论 -
四、FFmpeg-用SDL显示视频画面
一、SDL的安装可到SDL官网下载安装SDL2.0,下载地址http://www.libsdl.org/Linux下的SDL安装步骤cd SDL (进入源码目录)mkdir buildcd build../configuremake && sudo make install二、SDL和视频本章我们将使用SDL在屏幕上显示视频,SDL是Simple Direct Layer的缩写。它是一个跨平台的出色的多媒体库,许多项目都有用到它。可以从它的官网站http:原创 2020-06-25 09:50:43 · 511 阅读 · 0 评论 -
三、FFmpeg视频解码(附源码)
在视频播放器的开发中,有两个重要的概念——视频Track和音频Track,即视频流和音频流。“流”是个 抽象的词,用来表示“一连串的通过时间来串连的数据元素”。流中的数据元素称为 帧(frames)。 不同的流是由不同的编码器(codec)来编码生成的。编解码器定义 了流中的数据是如何被编码COded和解码DECoded的,因此它的名字叫做CODEC。 常用的编解码器有Divx和MP3等。从流中读出来的数据叫做包(packets),包是一 段数据,它包含了一段可解码成帧的数据,这些帧就是我们要在应用程序处理原创 2020-06-21 16:48:43 · 723 阅读 · 0 评论 -
一、FFmpeg Linux开发环境搭建(附源码)
1.根据官方文档 https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu先安装相关依赖库,执行下面的命令进行安装即可sudo apt-get update -qq && apt-get -y install autoconf automake build-essential cmake git libass-dev libfreetype6-dev libsdl2-dev libtheora-dev libtool libva-dev原创 2020-06-21 09:31:02 · 610 阅读 · 0 评论 -
二、FFmpeg VS2017开发环境的搭建(附源码)
1.下载FFmpeg相关源码和lib文件 https://ffmpeg.zeranoe.com/builds/打开VS新建 -> Visual C++ -> Windows 桌面 -> Windows 控制台应用程序(可根据需要选择)2. 把ffmpeg的依赖库(lib文件夹)和include文件夹放到新建项目的源码目录下(与Debug平级的那个目录),如下图 include和lib文件夹就放在ffmpeg文件夹里面,此外还要把_mingw.h、inttypes.h、stdint.原创 2020-06-20 23:55:00 · 773 阅读 · 1 评论