1.2016年NOIP普及组初赛最后一题郊游活动题解
2.FFMPEG音视频同步-音频实时采集编码封装成MP4
3.Linux Ubuntu openssl离线源码安装、源码升级版本
4.杭电ACM2016 presentation Error
2016年NOIP普及组初赛最后一题郊游活动题解
本题首先要读透题目,源码题意最后是源码要求得最多有多少位同学能够租到自行车,则所有钱都用来在租车上了。源码钱的源码来源有两方面
总钱数=Mi+A
租车的人在自己钱不够用的情况下,可以动用公共基金A,源码课堂提问系统源码只要公用基金够用,就能租到车。源码编程者利用贪心算法计算在租车过程中把欠款都累加在count中,源码只要count<=A,源码就能继续租车。
源代码如下:#include<iostream>
using namespace std;
#define MAXN
int n,源码B,A,M[MAXN],C[MAXN],l,r,ans,mid;
bool check(int nn)
{ int count=0,i,j;
i=n-nn+1;
j=1;
while(i<=n)
{ if(C[j]>M[i])count+=C[j]-M[i];
i++; j++;
}
return A>=count;
}
void sort(int a[],int l,int r)
{ int i=l,j=r,x=a[(l+r)/2],y;
while(i<=j){
while(a[i]<x)i++;
while(a[j]>x)j--;
if(i<=j)
{ y=a[i]; a[i]=a[j]; a[j]=y; i++; j--; } }
if(i<r) sort(a,i,r);
if(l<j) sort(a,l,j);}
int main(){ int i; cin>>n>>B>>A;
for(i=1;i<=n;i++) cin>>M[i];
for(i=1;i<=B;i++) cin>>C[i];
sort(M,1,n);
sort(C,1,B);
l=0; r=n;
while(l<=r)
{ mid=(l+r)/2;
if(check(mid))
{ ans=mid; l=mid+1; }
else r=mid-1;
}
cout<<ans<<endl;
return 0;}
FFMPEG音视频同步-音频实时采集编码封装成MP4
音视频同步录制相关文章
1、 ffmpeg-摄像头采集保存
2、源码 ffmpeg音视频同步-摄像头采集编码封装
3、源码溯源码标识 ffmpeg-音频正弦产生并编码封装
4、源码 ffmpeg-音频实时采集保存
5、源码 ffmpeg音视频同步-音频实时采集编码封装
6、源码 ffmpeg音视频同步-音视频实时采集编码封装
7、 ffmpeg音视频同步-音视频实时采集编码推流
8、 ffmpeg音视频同步-音视频实时采集编码推流-优化版本
系统环境:
系统版本:lubuntu .
Ffmpge版本:ffmpeg version N--g
摄像头:1.3M HD WebCan
虚拟机:Oracle VM VirtualBox 5.2.
指令查看设备 ffmpeg -devices
指令播放实时音频 ffplay -f alsa -showmode 1 -ac 2 -i default -ar
Linux使用ffplay实时采集音频并实时播放_唐传林的博客-CSDN博客
指令录制实时音频ffmpeg -f alsa -ar -i hw:0,0 audio.wav
ffmpeg -f alsa -ar -i default ffmpeg_record_audio.wav
ubuntu下用ffmpeg录制音频文件_ubuntu使用指令录制mp3音频_dingjianfeng的博客-CSDN博客
指令分离音视频:ffmpeg -i test.mp4 -vn -y -acodec copy test.aac
ffmpeg -i test.mp4 -vn -y -avcodec copy test.h
本章文档基于ubuntu alsa格式。实时采集音频一帧数据并将其转化为pcm,编码成AAC,封装成mp4保存下来
1.简介
FFmpeg中有一个和多媒体设备交互的类库:Libavdevice。使用这个库可以读取电脑(或者其他设备上)的多媒体设备的数据,或者输出数据到指定的多媒体设备上。
ffmpeg中的音频相关内容
ffmpeg中AVPacket中可能会含有多个音频帧(AVFrame),一个音频帧含有多个采样,采样率决定了1s有多少个采样(或者说一个音频帧可以播放多久)。大站长源码对于aac,一帧有个采样,mp3一帧则固定为个字节。
对于音频,由于有多声道的音频,那么音频解码出来的数据不同声道也储存在不同的指针,如data[0]是左声道,data[1]是右声道,由于各个声道的数据长度是一样的,所以linesize[0]就代表了所有声道数据的长度。
成员extended_data则指向了data,是一个拓展,上面可以看到data 是电磁笔源码包含8个指针的数组,也就是说对于音频,最多只支持8个声道
如果是以下格式:
只能保存再AVFrame的uint8_t *data[0]; 音频保持格式如下: LRLRLR。。。。
如果是以下格式
plane 0: LLLLLLLLLLLLLLLLLLLLLLLLLL…
plane 1: RRRRRRRRRRRRRRRRRRRR…
plane 0对于uint8_t *data[0];
plane 1对于uint8_t *data[1];
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
免费分享音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,币源码下载Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击 加群免费领取~
2.源码
最简单的基于Libavdevice的摄像头数据读取一帧帧pcm数据,经过音频重采样获取目标AAC的音频源数据参数,保存成MP4文件
3.验证
3.1编译
3.2结果
使用软件mp4打开test.mp4,可以听到实时采集的音频
3.3存在的问题
1、本文档源码,采集ALSA获取的源数据是K,stereo声道,采样大小,经转换成pcm的格式,同样是K,stereo声道大小;不同的采样率会出现部分声音数据丢失,具体原因,在 《ffmpeg-音频实时采集保存》具体分析 ,涉及其他分辨率转换,不在本文讨论范围里。
2、由于本例程没有没有对ALSA音频进行重采样,(采样率,个采样点,双声道,bit),故若保存成ts,flv等封装格式是,默认采用的音频编码格式分别是mpga,mp3,其采样点为。所以运行此程序会有问题,数据无法写入。而且目前暂不探讨音频重采样问题。故想到一种解决方法是,指定AAC音频编码格式(ts,mp4等都支持AAC音频编码,参考《ffmpeg-摄像头采集编码封装》的表格)。
4.附件
无
5.参考链接
[1] ffmpeg之PCM转AAC
FFmpeg()PCM编码AAC_pkt.data 就是pcm吗_mengzhengjie的博客-CSDN博客
[2]官方Encode pcm file to aac
[FFmpeg-user] Encode pcm file to aac
[3]PCM编码AAC,参考其普通PCM格式与AAC转格式差异 FFmpeg()PCM编码AAC_pkt.data 就是pcm吗_mengzhengjie的博客-CSDN博客
[4] 音频编码(一)--FFmpeg编码-腾讯云开发者社区-腾讯云
原文链接: FFMPEG音视频同步-音频实时采集编码封装成MP4_qinyi_style的博客-CSDN博客
Linux Ubuntu openssl离线源码安装、升级版本
Ubuntu ..1
OpenSSL 1.0.2g 1 Mar
官网:openssl.org 下载:openssl.org/source/
官网最新可用生产版本openssl-1.1.1k,openssl-3.0.0-alpha版本是openssl的下一个主要版本,includes the new FIPS Object Module(新特性),预发布版本,不轻易直接用于生产环境。
这次下载openssl-1.1.1k.tar.gz的源码包。
将openssl源码包解压,并进入openssl-1.1.1k文件夹
查看README,了解安装openssl的预制环境条件,已安装过环境。
查看INSTALL,根据Quick Start直接编译。
编译、安装过程中无任何报错,一路畅通,查看openssl版本。
查看版本信息报错,没有libssl.so.1.1依赖文件。搜索发现libssl.so.1.1依赖文件存在,但路径不对。建立软链接后,查看openssl信息依旧报错:libcrypto.so.1.1依赖文件不存在。同样建立软链接,成功更新openssl版本。
成功更新openssl版本后,可以执行openssl命令。
尝试openssl-3.0.0-alpha的预发布版本,除编译命令不一致外,同样需要建立依赖库软链接。
使用以下命令配置、构建和测试:Unix / Linux / macOS,一键安装版本install.sh,openssl-1.1.1k版本。
杭电ACM presentation Error
AC源代码
# include <stdio.h>
int a[] ;
int main ()
{
int i, n, pos ;
while (~scanf ("%d", &n) && n)
{
for (i = 0 ; i < n ;i++)
scanf ("%d", a+i) ;
for (i = 1, pos = 0 ; i < n ; i++)
if (a[i]<a[pos]) pos = i ;
if (pos != 0)
a[0] ^= a[pos] ^= a[0] ^= a[pos] ;
for (i = 0 ; i < n ;i ++)
{
if (i == 0) printf ("%d", a[i]) ;
else printf (" %d", a[i]) ;
}
puts ("") ;
}
return 0 ;
}