小编Tyl*_*ick的帖子

iOS AVFoundation音频/视频不同步

问题:

在每次播放期间,音频都在视频后1-2秒.


设置:

资产从媒体流加载AVURLAssets.

为了编写合成,我使用了具有不对称时间尺度的AVMutableCompositions和AVMutableCompositionTracks.音频和视频都流式传输到设备.音频的时间刻度是44100; 视频的时间刻度是600.

使用AVPlayer完成播放.


尝试的解决方案:

  • 使用videoAssetTrack.timeRange[composition insertTimeRange].
  • 运用 CMTimeRangeMake(kCMTimeZero, videoAssetTrack.duration);
  • 运用 CMTimeRangeMake(kCMTimeZero, videoAssetTrack.timeRange.duration);

代码:

+(AVMutableComposition*)overlayAudio:(AVURLAsset*)audioAsset
                          withVideo:(AVURLAsset*)videoAsset
{
    AVMutableComposition* mixComposition = [AVMutableComposition composition];

    AVAssetTrack* audioTrack = [self getTrackFromAsset:audioAsset withMediaType:AVMediaTypeAudio];
    AVAssetTrack* videoTrack = [self getTrackFromAsset:videoAsset withMediaType:AVMediaTypeVideo];
    CMTime duration = videoTrack.timeRange.duration;

    AVMutableCompositionTrack* audioComposition = [self composeTrack:audioTrack withComposition:mixComposition andDuration:duration andMedia:AVMediaTypeAudio];
    AVMutableCompositionTrack* videoComposition = [self composeTrack:videoTrack withComposition:mixComposition andDuration:duration andMedia:AVMediaTypeVideo];
    [self makeAssertionAgainstAudio:audioComposition andVideo:videoComposition];
    return mixComposition;
}

+(AVAssetTrack*)getTrackFromAsset:(AVURLAsset*)asset withMediaType:(NSString*)mediaType
{
    return [[asset tracksWithMediaType:mediaType] objectAtIndex:0];
}

+(AVAssetExportSession*)configureExportSessionWithAsset:(AVMutableComposition*)composition toUrl:(NSURL*)url
{
    AVAssetExportSession* exportSession …
Run Code Online (Sandbox Code Playgroud)

objective-c avfoundation ios avplayer audio-video-sync

7
推荐指数
1
解决办法
2407
查看次数