移动并修复手机 iOS 上录制的视频的 moovatom

2024-01-22

问题是如何找到并移动 iOS 设备上录制的 .mov 文件的 moov 原子,以便可以通过 http 进行流式传输。有一种方法可以做到这一点,但这需要将其导出到文件,理论上这会让您复制整个文件,然后您就可以流式传输它。

还有其他方法可以做到这一点吗?


  • 使用iOS AV Foundation框架和几行Objective-C(你 还可以从 MOV 转换为 MP4,因为 Android 无法读取 MOV):

    因此,使用此代码,无需缓冲即可从 Live URL 播放流畅的视频,但在将视频上传到您的服务器之前,请使用此代码并 转换您的视频并上传后。所以视频就像播放视频一样 没有任何负载的snapchat。

    不要忘记将以下框架添加到您的项目中。????

#import <AVFoundation/AVAsset.h>
#import <AVFoundation/AVAssetExportSession.h>
#import <AVFoundation/AVMediaFormat.h>
+ (void) convertVideoToMP4AndFixMooV: (NSString*)filename toPath:(NSString*)outputPath {

    NSURL *url = [NSURL fileURLWithPath:filename];
    AVAsset *avAsset = [AVURLAsset URLAssetWithURL:url options:nil];
    AVAssetExportSession *exportSession = [AVAssetExportSession
                                           exportSessionWithAsset:avAsset
                                           presetName:AVAssetExportPresetPassthrough];

    exportSession.outputURL = [NSURL fileURLWithPath:outputPath];
    exportSession.outputFileType = AVFileTypeAppleM4V;

    // This should move the moov atom before the mdat atom,
    // hence allow playback before the entire file is downloaded
    exportSession.shouldOptimizeForNetworkUse = YES;

    [exportSession exportAsynchronouslyWithCompletionHandler:
     ^{

         if (AVAssetExportSessionStatusCompleted == exportSession.status) {}
         else if (AVAssetExportSessionStatusFailed == exportSession.status) {
             NSLog(@"AVAssetExportSessionStatusFailed");
         }
         else
         {
             NSLog(@"Export Session Status: %d", exportSession.status);
         }
     }];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移动并修复手机 iOS 上录制的视频的 moovatom 的相关文章

随机推荐