zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    MYSQL中排序
    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary)
    job1
    python中对于数组的操作
    python中将字符串转为字典类型
    python中的周几
    python 链接redis 获取对应的值
    jenkins 设置定时任务规则
    如何安全close go 的channel
    [转]
  • 原文地址:https://www.cnblogs.com/babosa/p/5904655.html
Copyright © 2011-2022 走看看