最近一直在做视频方面的工作。在视频转码开发过程中,会遇到各种各样的问题,有些问题现场就解决了,已滑入湖中,有些印象深刻,
至今难忘。这里,就把这些印象深刻的问题,或者说是"坑",整理出来,以期给有缘者以助益。

1、中文、空格、乱码。
这 里中文、空格、乱码的问题似乎不是视频转码独有的问题。但出现在视频转码服务中。主要出现在两个方面。一方面是业务逻辑中,忽略了对这些特殊字符的处理, 于是,这些字符无法被正确翻译或是被截断,造成路径错误。另一方面试底层的ffmpeg本身,虽然ffmpeg号称视频处理的瑞士军刀,但是毕竟是来自西 方的到,似乎到了亚洲不是太灵,对亚洲字符的支持不是太友善。
解决方法:需要从两方面小心,以防止踩进坑里:一业务逻辑中对特殊字符进行转义;二、生成中间文件并重命名。

2、对视频进行crop时,参考图片不能全黑。
对视频进行裁剪时,如果用户未指定裁剪坐标,而是由系统自动识别。这时,通常会截取一张图片作为参考图片,采用图像识别以确定裁剪位置。即,需要采用图像识别技术来圈定黑框。因此,这张参考图片不能全为黑,否则,图像识别程序会无法判定裁剪位置。
解决方法:选取参考图片时,选取多张,然后以裁剪坐标圈定范围面积最大的一张为准。

3、aspect不能为奇数。
根据视频常识,分辨率不能出现奇数。但是,开发过程中往往容易忽略这个问题,从而造成很多失败。
解决方法:参数验证时进行检查;底层进行调整,将分辨率调整为偶数

4、注意极端视频,少于1s的!
在转码服务的开发过程中,往往无法考虑这等极端情况。但是真实场景中确实出现了。这会造成截图失败,如果用户指定了截图时间点为1s的话。真实场景中很难想到如此极端情况。
解决方法:日志中突出记录此类情况。提醒使用方,修改请求参数,比如,时间点可以设为0。

5、 对非视频截图。
这 确实是一个让人哭笑不得的问题。对一个文本文件进行截图!对一个exe可执行文件进行截图!这简直不是一个次元的问题。所以,当一个视频截图请求过来跑了 一个小时的时候,蓦然回首,发现是对一个文本文件进行截图。而且截图程序一遍又一遍地兢兢业业地尝试截取一张图片出来。
解决方法: 操作之前对被操作对象默默底细,看看人家是不是可被截图。不要上去就截人家的图,人家表示很无辜啊!千万不要锲而不舍,为了尊严,20次不成,是不是考虑放弃?

6、 操作之前,进行预判。是否损坏。是否是视频或是否是音频。
喽,是这个意思。比如,转码,好歹搞清楚被转码对象是不是一个好的视频,有没有损坏。如果已损坏,真不需要再忙活。整容也得被整容者是或者的是不?还有,你对被转码对象施加H264转码,是不是应该先确定对方有没有视频流?
解决方法: 1、判断对方是不是视频。2、判断对方是不是健康的视频。3、判断对方是不是有视频流。4、判断对方是不是有音频流。5、判断对方你搞不搞得定(如人家块头很大)

7、特殊视频。如1kfps。
喽, 这真的跟见识有关。一般认为视频不过就25fps、30fps。最大不过60fps。那谁告诉你没有1kfps?没错,没听错,就是有这样的视频,你还别 急着说坑爹。喽,看过动物世界吧?这里未了抓怕动物不是精彩瞬间,都是会采用超高清摄像机,用以捕捉每一个细节,然后以慢镜头的方式呈现在观众面前。
解决方法: 对此等视频特殊处理!你的意识到它的存在。

8、用来单元测试的音视频样本过少。
喽,准备了40个音视频,应该够了?no,not enough!各种各样的坑,40个视频完全无法保证一网打尽所有视频。可以给你个链接:download.wavetlan.com/SVV/Media/HTTP/,见识下视频的丰富度。
解决方法: 大量的样本库,并且积累一个问题样本库,这个样本库中有所有容易出problem的视频。如果,这个problem库能通过,你才敢找qa测试。同时,随着时间的积累,你应该不同丰富你的测试库。

9、ffmpeg获取视频元信息对flac的size、arate获取不准确的问题
获取视频元信息是对flac格式的音频的size和arate获取不准确。而且,不是对所有的flac的音频都不准确,是对部分flac的音频不准确。恕本人才疏学浅,无法确知其中缘由。
解决方法: 暂无(参考10,曲线获取?)。似乎可以给ffmpeg开发小组提bug?

10、aac格式的音频,ffmpeg获取duration不准确的问题。
喽ffmpeg获取aac格式的音频也会概率性低出现不准确的情况。如果需要拿duration进行计算,就会踩进坑中。
解决方法:把aac给整成mp3,然后再获取这些元信息。因为mp3的元信息会准确获得。


all right。一般凑10为整。还有其他坑将在之后的文章中补充。