ios上视频与音乐合成后出现播放兼容问题的解决方法

近期EasyDarwin开源流媒体团队EasyVideoRecorder小组同学Carl在支持一款短视频应用上线时,遇到一个问题:我们在IOS上合成“图片+音乐”成为视频之后,在PC、IOS上都能非常流畅地进行网络流的播放,但是一到安卓手机上播放一段时间,视频就会卡主,而用的流式播放器是安卓原生自带的,我们没法将手伸到播放器内部调试,所以只能从问题本身着手找问题,播放一段时间后,只有音频继续播放,让我们先来看一下这个视频的原型:
合成之后播放不兼容的视频

合成之后播放OK的视频

图片音乐合成

经过不断的对比发现是在音视频合成的时候,TimeScale的问题:
timescale

解决方案:
音视频timescale选用统一标准,比如都设置为600, 并且生成的视频格式选用mpeg4,这样可以兼容多平台。相关代码如下:

    CMItemCount count;
    CMSampleBufferGetSampleTimingInfoArray(sampleBuffer, 0, nil, &count);
    CMSampleTimingInfo *pInfo = malloc(sizeof(CMSampleTimingInfo) * count);
    CMSampleBufferGetSampleTimingInfoArray(sampleBuffer, count, pInfo, &count);
    for (CMItemCount i = 0; i < count; i++) {
        pInfo[i].decodeTimeStamp = CMTimeMake(CMTimeGetSeconds(pInfo[i].decodeTimeStamp) * 600, 600);
        pInfo[i].presentationTimeStamp = CMTimeMake(CMTimeGetSeconds(pInfo[i].presentationTimeStamp) * 600, 600);
        pInfo[i].duration = CMTimeMake(CMTimeGetSeconds(duration) * 600, 600);
                }

    CMSampleBufferRef sout;
    CMSampleBufferCreateCopyWithNewTiming(nil, sampleBuffer, count, pInfo, &sout);
                free(pInfo);

更多的信息大家可以关注一下EasyDarwin的短视频合成项目EasyVideoRecorder:https://github.com/EasyDarwin/EasyVideoRecorder

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2016

EasyDarwin

posted @ 2016-04-10 11:51  Babosa|EasyDarwin  阅读(198)  评论(0编辑  收藏  举报