
Recherche avancée
Médias (91)
-
Spitfire Parade - Crisis
15 mai 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Wired NextMusic
14 mai 2011, par
Mis à jour : Février 2012
Langue : English
Type : Video
-
Video d’abeille en portrait
14 mai 2011, par
Mis à jour : Février 2012
Langue : français
Type : Video
-
Sintel MP4 Surround 5.1 Full
13 mai 2011, par
Mis à jour : Février 2012
Langue : English
Type : Video
-
Carte de Schillerkiez
13 mai 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Texte
-
Publier une image simplement
13 avril 2011, par ,
Mis à jour : Février 2012
Langue : français
Type : Video
Autres articles (100)
-
MediaSPIP 0.1 Beta version
25 avril 2011, parMediaSPIP 0.1 beta is the first version of MediaSPIP proclaimed as "usable".
The zip file provided here only contains the sources of MediaSPIP in its standalone version.
To get a working installation, you must manually install all-software dependencies on the server.
If you want to use this archive for an installation in "farm mode", you will also need to proceed to other manual (...) -
Multilang : améliorer l’interface pour les blocs multilingues
18 février 2011, parMultilang est un plugin supplémentaire qui n’est pas activé par défaut lors de l’initialisation de MediaSPIP.
Après son activation, une préconfiguration est mise en place automatiquement par MediaSPIP init permettant à la nouvelle fonctionnalité d’être automatiquement opérationnelle. Il n’est donc pas obligatoire de passer par une étape de configuration pour cela. -
MediaSPIP v0.2
21 juin 2013, parMediaSPIP 0.2 est la première version de MediaSPIP stable.
Sa date de sortie officielle est le 21 juin 2013 et est annoncée ici.
Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
Comme pour la version précédente, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)
Sur d’autres sites (8091)
-
How to Measure Marketing Effectiveness : A Step-by-Step Guide
22 février 2024, par Erin -
segment : Fix the failure paths
5 janvier 2015, par Luca Barbatosegment : Fix the failure paths
A failure in segment_end() or segment_start() would lead to freeing
a dangling pointer and in general further calls to seg_write_packet()
or to seg_write_trailer() would have the same faulty behaviour.CC : libav-stable@libav.org
Reported-By : luodalongde@gmail.com -
How to improve the performance of Audio Queue Services when playing audio ?
11 décembre 2014, par 谢小进I want to play
RTMP
’sH.264
/AAC
usingFFmpeg
for decoding and playing video,Audio Queue Services
for playing audio. I have successfully done them all, but still some tough issues, for example high memory allocation when playing audio. I have debugged and found thatAudio Queue Services
lead to high memory allocation, and then crash ! Does anybody know how to improve the memory performance ? Here is my code forAudio Queue Services
playing audio.//
// RTMPAudioPlayer.h
//
#import <foundation></foundation>Foundation.h>
#import <audiotoolbox></audiotoolbox>AudioToolbox.h>
@interface AQBuffer : NSObject
@property (nonatomic) AudioQueueBufferRef buffer;
@end
@interface RTMPAudioPlayer : NSObject {
AudioQueueRef queue;
AudioStreamBasicDescription dataFormat;
NSMutableArray *buffers;
NSMutableArray *reusableBuffers;
}
- (id)initWithSampleRate:(int)sampleRate channels:(int)channels bitsPerChannel:(int)bitsPerChannel;
- (void)start;
- (void)stop;
- (void)putData:(NSData *)data;
@end
//
// RTMPAudioPlayer.m
//
#import "RTMPAudioPlayer.h"
static const int kNumberBuffers = 3;
static const int kBufferSize = 0xA000;
@implementation AQBuffer
@end
@implementation RTMPAudioPlayer
void AQOutputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inCompleteAQBuffer) {
RTMPAudioPlayer *THIS = (__bridge RTMPAudioPlayer *)inUserData;
[THIS handleAQOutputCallback:inAQ buffer:inCompleteAQBuffer];
}
- (void)handleAQOutputCallback:(AudioQueueRef)audioQueue buffer:(AudioQueueBufferRef)buffer {
for (int i = 0; i < [buffers count]; ++i) {
if (buffer == [buffers[i] buffer]) {
[reusableBuffers addObject:buffers[i]];
break;
}
}
}
- (id)initWithSampleRate:(int)sampleRate channels:(int)channels bitsPerChannel:(int)bitsPerChannel {
self = [super init];
if (self) {
memset(&dataFormat, 0, sizeof(dataFormat));
dataFormat.mSampleRate = sampleRate;
dataFormat.mFormatID = kAudioFormatLinearPCM;
dataFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
dataFormat.mBitsPerChannel = bitsPerChannel;
dataFormat.mChannelsPerFrame = channels;
dataFormat.mFramesPerPacket = 1;
dataFormat.mBytesPerFrame = (dataFormat.mBitsPerChannel / 8) * dataFormat.mChannelsPerFrame;
dataFormat.mBytesPerPacket = dataFormat.mBytesPerFrame * dataFormat.mFramesPerPacket;
}
return self;
}
- (void)start {
OSStatus status = AudioQueueNewOutput(&dataFormat, AQOutputCallback, (__bridge void *)self, NULL, NULL, 0, &queue);
if (status == noErr) {
buffers = [NSMutableArray array];
reusableBuffers = [NSMutableArray array];
for (int i = 0; i < kNumberBuffers; i++) {
AudioQueueBufferRef buffer;
status = AudioQueueAllocateBuffer(queue, kBufferSize, &buffer);
if (status == noErr) {
AQBuffer *bufferObj = [[AQBuffer alloc] init];
bufferObj.buffer = buffer;
[buffers addObject:bufferObj];
[reusableBuffers addObject:bufferObj];
} else {
AudioQueueDispose(queue, true);
queue = NULL;
break;
}
}
AudioQueueStart(queue, NULL);
} else {
queue = NULL;
}
}
- (void)stop {
if (queue) {
AudioQueueStop(queue, true);
}
}
- (void)putData:(NSData *)data {
AQBuffer *bufferObj = [reusableBuffers firstObject];
[reusableBuffers removeObject:bufferObj];
AudioQueueBufferRef buffer;
OSStatus status = AudioQueueAllocateBuffer(queue, kBufferSize, &buffer);
if (status == noErr) {
bufferObj = [[AQBuffer alloc] init];
bufferObj.buffer = buffer;
memcpy(bufferObj.buffer->mAudioData, [data bytes], [data length]);
bufferObj.buffer->mAudioDataByteSize = [data length];
AudioQueueEnqueueBuffer(queue, bufferObj.buffer, 0, NULL);
}
}
@end