目标 c - 将 mpmediaitem 转换为 ogg vorbis

     2023-03-14     60

关键词:

【中文标题】目标 c - 将 mpmediaitem 转换为 ogg vorbis【英文标题】:objective c - convert mpmediaitem to ogg vorbis 【发布时间】:2012-09-21 08:21:02 【问题描述】:

我找到(自定义我找到的方法)一种转换 MpMediaItem 并获取 mp3 文件的方法。可能这不是最好的方法,但它确实有效。

有没有办法获得 *.ogg 文件而不是 *.mp3 ?什么是正确的方法?

这是我用来获取 *.mp3 文件的方法:

    -(void)exportMP3:(NSURL*)url toFileUrl:(NSString*)fileURL

    AVURLAsset *asset=[[AVURLAsset alloc] initWithURL:url options:nil];
    AVAssetReader *reader=[[AVAssetReader alloc] initWithAsset:asset error:nil];
    NSMutableArray *myOutputs =[[NSMutableArray alloc] init];
    for(id track in [asset tracks])
    
        AVAssetReaderTrackOutput *output=[AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:track outputSettings:nil];
        [myOutputs addObject:output];   
        [reader addOutput:output];
    
    [reader startReading];
    NSFileHandle *fileHandle ;
    NSFileManager *fm=[NSFileManager defaultManager];
    if(![fm fileExistsAtPath:fileURL])
    
        [fm createFileAtPath:fileURL contents:[[NSData alloc] init] attributes:nil];
    else
        NSURL *url = [NSURL URLWithString:fileURL];
        [fm removeItemAtURL:url error:nil];
        [fm createFileAtPath:fileURL contents:[[NSData alloc] init] attributes:nil];

    
    fileHandle=[NSFileHandle fileHandleForWritingAtPath:fileURL];    
    [fileHandle seekToEndOfFile];

    AVAssetReaderOutput *output=[myOutputs objectAtIndex:0];
    int totalBuff=0;
    int test = 1;
    while(test == 1)
    
        CMSampleBufferRef ref=[output copyNextSampleBuffer];

        if(ref==NULL)
            test = 0;

        if(ref==NULL)
            break;
        //copy data to file
        //read next one
        AudioBufferList audioBufferList;
        NSMutableData *data;
        CMBlockBufferRef blockBuffer;
        CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(ref, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer);

        for( int y=0; y<audioBufferList.mNumberBuffers; y++ )
        
            AudioBuffer audioBuffer = audioBufferList.mBuffers[y];
            void *frame = audioBuffer.mData;

            data = [[NSMutableData alloc] initWithBytes:frame length:audioBuffer.mDataByteSize];
        
        totalBuff++;
        NSLog(@"\n%d\n",totalBuff);

        int time = [self.mediaPlayer durationOfCurrentItem];

        if (totalBuff * 2 <= time + 1)        
            [fileHandle writeData:data];

    
    [fileHandle closeFile];

【问题讨论】:

如果您的 MP3 编码代码正常工作,这将是一个重大突破,因为普遍接受的事实是,如果没有像 lame 这样的第三方库,就不可能将音频编码到 MP3 ios中的格式。您确定这可以正常工作,并且不只是因为音频播放器的善意而播放,它接受 mp3 文件中的其他格式吗? 【参考方案1】:

您可以使用libvorbis 将 PCM 数据编码为 Vorbis。

【讨论】:

获取普通 mp3 的 ogg 文件需要多长时间?假设 mp3 歌曲的长度约为 3 分钟。我用来获取 mp3 文件的方法有时最多需要 2 秒。我担心滞后。谢谢 @SylBurlac 媒体转换的计算成本很高。您应该在后台线程中执行此操作。 我是在后台线程中完成的,但是当我点击播放按钮时转换开始(我使用它通过 dlna 流式传输到仅支持 ogg 格式的设备),我担心点击播放按钮之间的时间间隔和设备开始播放之前的时间间隔。非常感谢您的回答

目标 C:获取 MPMediaItem 'Favorite' 属性

】目标C:获取MPMediaItem\\\'Favorite\\\'属性【英文标题】:ObjectiveC:GettingMPMediaItem\'Favorite\'property目标C:获取MPMediaItem\'Favorite\'属性【发布时间】:2016-02-1621:49:50【问题描述】:我正在查看Apple的文档,但我似乎无法找到一种方法来... 查看详情

如何将代码 AVFoundation 目标 c 转换为 Swift?

】如何将代码AVFoundation目标c转换为Swift?【英文标题】:HowtoconvertcodeAVFoundationobjectivectoSwift?【发布时间】:2014-06-1814:19:58【问题描述】:我在swift中使用AVFoundation来拍照,但我无法将任何func代码行从目标c转换为Swift。我的func代... 查看详情

如何将目标 C 推送通知代码转换为 Swift

】如何将目标C推送通知代码转换为Swift【英文标题】:howtoconvertobjectiveCpushnotificationCodeintoSwift【发布时间】:2016-08-2210:19:07【问题描述】:NSDictionary*userInfo=[launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];if(userInfo 查看详情

将 char 转换为 int 的奇怪错误(目标 C)

】将char转换为int的奇怪错误(目标C)【英文标题】:Oddbugconvertingchartoint(ObjectiveC)【发布时间】:2012-06-2506:17:16【问题描述】:我设置了一个应用程序,在其中将NSString转换为char变量数组,并且尝试将一些字符转换为整数(基本... 查看详情

如何将 swift NSLayoutConstraint activateConstraints 转换为目标 c?

】如何将swiftNSLayoutConstraintactivateConstraints转换为目标c?【英文标题】:HowdoItranslateswiftNSLayoutConstraintactivateConstraintstoobjectivec?【发布时间】:2019-10-0711:55:35【问题描述】:我已经成功地快速创建了一个项目,我按下viewController中... 查看详情

如何将 nib/xib 转换为目标 C 代码?

】如何将nib/xib转换为目标C代码?【英文标题】:Howtoconvertnib/xibtoobjectiveCcode?【发布时间】:2009-12-2505:30:32【问题描述】:我只是想知道有没有办法将nib/xib文件转换为OjbectiveC代码?我只是想找到nib/xib文件的等效代码(我试过nib2... 查看详情

我必须将目标 c 代码转换为 swift 3.0,尝试在线转换时出错

】我必须将目标c代码转换为swift3.0,尝试在线转换时出错【英文标题】:Ihavetoconvertobjectiveccodeintoswift3.0,I\'mgettingerrorswhiletryingonlineconversion【发布时间】:2017-03-1511:59:26【问题描述】:NSURL*contentURL=[[NSURLalloc]initWithString:@"http://en.wi... 查看详情

如何通过目标c中的编码将pdf文件转换为图像

】如何通过目标c中的编码将pdf文件转换为图像【英文标题】:Howtoconvertapdffiletoimagethroughcodinginobjectivec【发布时间】:2012-09-1409:30:03【问题描述】:如何通过objectivec中的编码将pdf文件转换为图像我有一个pdf文件,但我想将它保存... 查看详情

将“ff0000”之类的字符串转换为目标c中的十六进制数

】将“ff0000”之类的字符串转换为目标c中的十六进制数【英文标题】:Convertastringlike"ff0000"tohexadecimalnumberinobjectivec【发布时间】:2012-12-1521:05:13【问题描述】:我需要将来自UI的字符串输入转换为目标c中的十六进制数。... 查看详情

将十进制转换为双精度的不一致(目标 C)

】将十进制转换为双精度的不一致(目标C)【英文标题】:Inconsistencyconvertingdecimaltodouble(ObjectiveC)【发布时间】:2018-08-3014:01:46【问题描述】:XCode9.4.1。在调试器控制台中,我看到对我来说似乎很奇怪的结果:(lldb)print(double)0.07... 查看详情

MPMediaItem 你是怎么玩的?

】MPMediaItem你是怎么玩的?【英文标题】:MPMediaItemHowdoyouplayit?【发布时间】:2011-12-1520:39:41【问题描述】:在我的应用程序中,我让用户从库中选择一首歌曲,我将这首歌作为MPMediaItem接收,我试图弄清楚如何在应用程序上的单... 查看详情

MPMediaItem 生成唯一文件名

】MPMediaItem生成唯一文件名【英文标题】:MPMediaItemgeneratinguniquefilename【发布时间】:2011-11-3023:21:37【问题描述】:我正在从iPod库中导入项目,并希望为每个导入的MPMediaItem生成一个唯一的文件名。我希望文件名唯一地代表一个MP... 查看详情

MPMediaItem 到 AVAsset 到 .MP3

】MPMediaItem到AVAsset到.MP3【英文标题】:MPMediaItemtoAVAssetto.MP3【发布时间】:2011-12-1415:56:49【问题描述】:我从MPMediaItem(iTunes歌曲)中获取音频数据并将其放入AVAsset。如何将我的AVAsset转换为可以存储到磁盘的.MP3文件?【问题讨... 查看详情

如何在目标 C 中将字符串转换为整数? [复制]

】如何在目标C中将字符串转换为整数?[复制]【英文标题】:HowdoIconvertastringintoanintegerinobjectiveC?[duplicate]【发布时间】:2011-04-1619:00:59【问题描述】:可能重复:HowtodostringconversionsinObjective-C?我正在尝试将用户的猜测转换为整数... 查看详情

如何将 CMSampleBufferRef 转换为 NSData

...述】:?按照ErikAigner在thisthread上的回答,我设法获取了MPMediaItem的数据,但是数据的类型为CMSampleBufferRef。我知道CMSampleBufferRef是一个结构,并在iOS开发库的CMS 查看详情

String.Encoding 没有在 swift 3 中转换为 NSStringEncoding 到目标 C 转换

】String.Encoding没有在swift3中转换为NSStringEncoding到目标C转换【英文标题】:String.EncodingisnotgettingtranslatedtoNSStringEncodinginswift3toobjectiveCconversion【发布时间】:2016-11-0811:57:21【问题描述】:我正在将我现有的swift源代码库转换为swift3... 查看详情

将 MPMediaItem 保存到 NSMutableDictionary

】将MPMediaItem保存到NSMutableDictionary【英文标题】:SaveMPMediaItemintoaNSMutableDictionary【发布时间】:2011-12-2411:35:58【问题描述】:我正在尝试将MPMediaItem保存在nsmutableDictionary..实际上我的目的是让用户选择他的歌曲,然后将其保存在... 查看详情

如何在iOS中将字符串转换为xml? (目标 C,xcode 7.2)

】如何在iOS中将字符串转换为xml?(目标C,xcode7.2)【英文标题】:HowtoconvertstringtoxmliniOS?(objectiveC,xcode7.2)【发布时间】:2016-02-2506:03:42【问题描述】:我想将包含xml代码的NSString变量转换为xml格式。我的xml请求是:<?xmlversion="... 查看详情