图片处理函数

switch_img_fill(IMG, x_pos, y_pos, img_w, img_h, &layer->canvas->border_color);
将图片填充为指定的颜色

switch_img_scale(img, &layer->img, img_w, img_h);
按指定尺寸缩放图片

switch_img_patch_rect(switch_image_t IMG, int X, int Y, switch_image_t img, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
将图像贴到指定的矩形区域以内

switch_img_patch(switch_image_t IMG, switch_image_t img, int x, int y)
将img贴到IMG中

switch_img_fit(switch_image_t **srcP, int width, int height, switch_img_fit_t fit)
缩放图像适应 width x heigh 决定的⼤⼩。

switch_img_copy(switch_image_t img, switch_image_t *new_img)
YUV420与ARGB之间的图片互转,实现以下功能:
420 -> ARGB
420 -> 420
ARGB -> 420
ARGB -> ARGB

switch_img_letterbox(write_frame.img, &tmp, canvas->img->d_w, canvas->img->d_h, “#000000”);
缩放当前图像为 width x height 并产⽣新图像,如果⽐例不匹配,则以背景⾊( color )填充。

视频处理函数

switch_core_file_seek(&conference->fnode->fh, &pos, 0, SEEK_SET);
重置视频文件的位置,用于后面从0重新开始播放。

其他

查看帧中的图像是否为I420,不是的话,转为420

  1. if (file_frame.img && file_frame.img->fmt != SWITCH_IMG_FMT_I420) {
  2. switch_image_t *tmp = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, file_frame.img->d_w, file_frame.img->d_h, 1);
  3. switch_img_copy(file_frame.img, &tmp);
  4. switch_img_free(&file_frame.img);
  5. file_frame.img = tmp;
  6. }

如何查看一个flv里面有多少帧图像?

参考资料
一个简单的计算方式: 总时间/帧率,可以得到一个近似的值。
或者使用mediainfo

  1. yum install mediainfo -y
  2. mediainfo --Output="Video;%FrameCount%" 1.flv

直接执行mediainfo 1.flv,信息如下:

General Complete name : 1.flv Format : Flash Video File size : 426 KiB Duration : 6 s 455 ms Overall bit rate mode : Variable Overall bit rate : 541 kb/s Encoded date : UTC 2020-12-24T08:00:27.000000Z Writing application : Lavf58.12.100 media_type : 0 season_number : 0 episode_sort : 0 hd_video : 0 Video Format : AVC Format/Info : Advanced Video Codec Format profile : High@L3 Format settings : 2 Ref Frames Format settings, CABAC : No Format settings, Reference frames : 2 frames Format settings, GOP : M=1, N=30 Muxing mode : Container profile=High@5.1 Codec ID : 7 Duration : 6 s 433 ms Bit rate mode : Variable Bit rate : 417 kb/s Maximum bit rate : 768 kb/s Width : 640 pixels Height : 480 pixels Display aspect ratio : 4:3 Frame rate mode : Constant Frame rate : 30.000 FPS Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Bits/(Pixel*Frame) : 0.045 Stream size : 327 KiB (77%) Color range : Limited Color primaries : BT.709 Transfer characteristics : BT.709 Matrix coefficients : BT.709 Audio Format : AAC LC Format/Info : Advanced Audio Codec Low Complexity Codec ID : 10-2 Duration : 6 s 455 ms Bit rate : 93.8 kb/s Channel(s) : 2 channels Channel layout : L R Sampling rate : 44.1 kHz Frame rate : 43.066 FPS (1024 SPF) Compression mode : Lossy Stream size : 73.9 KiB (17%)