ffmpeg 音频视频 使用过程中碰到的问题记录

来源:互联网 发布:装修全包 半包 知乎 编辑:程序博客网 时间:2024/05/21 06:43

1 音频packet解码为frame之后,音频数据的大小:

        pframe->data[0],为数据地址,数据的大小应该使用函数av_samples_get_buffer_size( NULL, av_frame_get_channels( pFrame ), pFrame->nb_samples, ( AVSampleFormat )pFrame->format, 1 ); 来获取,如果使用pFrame->linesize[0]作为大小,音频数据会有杂音(可能是这个值小了)。


2 opensles 播放器请求数据的时候如果给了null,给了几次null之后它就不会来请求数据了。



3 一个packet,如果是视频里面最多解码出来一帧,如果是音频,可能解码出来好几帧。参考ffmpeg自带例子demuxing_decoding.c


4 librtmp,一个RTMPPacket结构体对象,描述的是一个flv文件中的一个完整的tag,包括tag头和tag body。


5 ffmpeg编译碰到的问题,环境是win7+ubuntu虚拟机,在Windows上git clone ffmpeg源码,然后拷贝到虚拟机的共享文件夹,再到ubuntu上编译ffmpeg

    这样子编译出错,./configure 找不到文件或目录,用在ubuntu上git clone ffmpeg的源码,这样才行。


6 ffmpeg编译的问题,自己首先编译了出了libcdio.so,libcdio的所有函数都编译到这个so里面去了,但是configure里面检查开启了libcdio之后需要用到三个so库,

    “if enable libcdio.....,”没有找到另外两个库,所以后面die,编译失败,如果注释这个die这一句,编译的时候就会提示找不到libcdio的头文件。

    所以不能这么改,注释掉没有用到的另外两个so就好了。记录一下这个问题。


7 yuv420转rgb

int r = yy+1.4075*(vv-128);
int g = yy - 0.3455*(uu-128) - 0.7169*(vv-128);
int b = yy + 1.779*(uu-128);

r = (r<0)?0:(r>255?255:r);
g = (g<0)?0:(g>255?255:g);
b = (b<0)?0:(b>255?255:b);


8 使用rtmp的metadata消息来携带自定义数据的话,发送过去的metadata信息里面要有个onMetaData字符串,拉流端的RTMP_Read函数才能拿到这个metadata。

0 0
原创粉丝点击