当前位置: 首页 > 知识库问答 >
问题:

修剪后的ios视频,然后在非ios设备上播放音频/视频不同步

宰父劲
2023-03-14

修剪视频,然后我将修剪后的视频发送到android设备并播放,我发现音频/视频不同步,音频比视频慢几秒钟。但视频可以在iOS设备上正常播放。1、我用如下代码剪裁视频:

 - (IBAction)showTrimmedVideo:(UIButton *)sender
{
[self deleteTmpFile];

NSURL *videoFileUrl = [NSURL fileURLWithPath:self.originalVideoPath];

AVAsset *anAsset = [[AVURLAsset alloc] initWithURL:videoFileUrl options:nil];
NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:anAsset];
if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality]) {

    self.exportSession = [[AVAssetExportSession alloc]
                          initWithAsset:anAsset presetName:AVAssetExportPresetHighestQuality];
    // Implementation continues.

    NSURL *furl = [NSURL fileURLWithPath:self.tmpVideoPath];

    self.exportSession.outputURL = furl;
    self.exportSession.outputFileType = AVFileTypeMPEG4;

    CMTime start = CMTimeMakeWithSeconds(self.startTime, anAsset.duration.timescale);
    CMTime duration = CMTimeMakeWithSeconds(self.stopTime-self.startTime, anAsset.duration.timescale);
    CMTimeRange range = CMTimeRangeMake(start, duration);
    self.exportSession.timeRange = range;

    self.trimBtn.hidden = YES;
    self.myActivityIndicator.hidden = NO;
    [self.myActivityIndicator startAnimating];
    [self.exportSession exportAsynchronouslyWithCompletionHandler:^{

        switch ([self.exportSession status]) {
            case AVAssetExportSessionStatusFailed:
                NSLog(@"Export failed: %@", [[self.exportSession error] localizedDescription]);
                break;
            case AVAssetExportSessionStatusCancelled:
                NSLog(@"Export canceled");
                break;
            default:
                NSLog(@"NONE");
                dispatch_async(dispatch_get_main_queue(), ^{
                    [self.myActivityIndicator stopAnimating];
                    self.myActivityIndicator.hidden = YES;
                    self.trimBtn.hidden = NO;
                    [self playMovie:self.tmpVideoPath];
                });
                break;
        }
    }];
}
}

2、我将视频剪辑后发送到服务器,然后android设备从服务器获取视频,但他们发现音频/视频不同步,起初我认为服务器做错了什么,所以我只是用USB将视频发送到android设备,错误仍然存在。

3.因此,我使用ffmpeg工具分析修剪过的视频:ffmpeg-I trimVideo。mp4然后我找到了trimVideo。mp4 start是一个负数。以下是ffmpeg打印的内容:

元数据:
major_brand: qt
minor_version: 0
compatible_brands: qt
creation_time:2015-08-29 12:22:13
编码器: Lavf56.15.102
持续时间:00:02:21.77,开始:-4.692568,比特率: 359 kb/s
流#0:0(und):音频: aac(LC)(mp4a/0x6134706D),24000 Hz,立体声, fltp,69 kb/s(默认)元数据:
creation_time:2015-08-29 12:22:13
handler_name: Core Media Data Handler
流#0:1(und):视频: h264(High)(avc1/0x31637661), yuv420p,512x288[SAR 1:1 DAR 16:9],277 kb/s,15.16 fps,15.17 tbr,12136 tbn,30.34 tbc(默认)
元数据:
br>编码器:“avc1”

我已经被这个错误困扰了好几天,很抱歉我的英语不好,我真的需要你的帮助,谢谢。

共有1个答案

翁心思
2023-03-14

好了,我终于找到了解决问题的方法。我使用SDAvassetExportSession来修剪视频,虽然结果视频长度稍微长一些,但在非quicktime播放器中可以同步a/V。

 类似资料:
  • 我有一个简单的应用程序,它从firebase加载视频列表,通过单击任何视频,我将通过<code>AVPlayer 但我无法播放在Firebase存储中上传的任何视频。 玩家代码: 另外,我尝试了另一种替代解决方案,方法是在本地下载此视频并从本地播放,但该解决方案也不起作用。 让我知道我是否在视频播放器中犯了任何错误。

  • 我有一个长音频部分和一个短视频部分,我想在一起mux。 我正在尝试使用以下命令进行MUX: video_0-0002.h264-整个文件(2秒长) Audio.wav-从4秒到6秒 但音频被搞砸了...我怎样才能正确地做呢? 也试过了,听起来好像最后还是有寂静。

  • 它是一个后端API(由RubyonRails开发),iphone和android手机使用它上传视频。API正在将上传的视频转换为MP4格式。我在后端使用曲别针ffmpeg gem进行视频转换。以下是我使用的: 我面临的问题有: 当用户从Android手机上传视频时,它在Android手机上运行良好,但在iPhone上无法播放。当用户从iPhone上传视频时,会发生另一件奇怪的事情,视频上传后,它会

  • 问题内容: 我正在使用Videogular来显示视频。当用户点击“播放”按钮以播放新视频时,能否帮助我停止/暂停其他视频?因此,一次只能让用户一次播放一个视频。 系统应自动停止正在后台播放的其他视频并播放新视频 谢谢 问题答案: 您可以分别为每个播放器获取所有API,并监听状态变化: 在您的控制器中:

  • 主要内容:本节引言:,1.相关方法详解,2.使用代码示例,3.本节示例代码下载:,本节小结:本节引言: 本节带来的是Android多媒体中的——MediaPlayer,我们可以通过这个API来播放音频和视频 该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码 和播放音视频。它支持三种不同的媒体来源: 本地资源 内部的URI,比如你可以通过ContentResolver来获取 外部URL(流) 对于Android所支持的的媒体格式列表 对于Androi

  • 嗨,我有几个视频不能在Android(直接在Chrome上)和iOS(直接在Safari上)上播放,但可以在Windows、Mac和Linux上任何浏览器上播放。 下面是输出 下面是另一段在Android和Chrome上播放的视频的ffprobe输出: 两者都是.mp4格式,并使用编解码器。就我所见,我注意到编解码器配置文件与和与以及元数据部分的差异。 我尝试用ffmpeg重新编码第一个视频,但没