• 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

  • 相关阅读:
    安装Docker-Compose
    Docker微容器Alpine Linux
    Linux 常用命令
    如何定制博客园的个人空间
    Elasticsearch入门之从零开始安装ik分词器
    Elasticsearch入门实践
    写在2017年的总结
    开源ETL工具之Kettle介绍
    常用Java数据库连接池
    细说shiro之七:缓存
  • 原文地址:https://www.cnblogs.com/babosa/p/5904655.html
Copyright © 2020-2023  润新知