
Recherche avancée
Médias (91)
-
Corona Radiata
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Lights in the Sky
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Head Down
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Echoplex
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Discipline
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
-
Letting You
26 septembre 2011, par
Mis à jour : Septembre 2011
Langue : English
Type : Audio
Autres articles (65)
-
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir -
Participer à sa traduction
10 avril 2011Vous pouvez nous aider à améliorer les locutions utilisées dans le logiciel ou à traduire celui-ci dans n’importe qu’elle nouvelle langue permettant sa diffusion à de nouvelles communautés linguistiques.
Pour ce faire, on utilise l’interface de traduction de SPIP où l’ensemble des modules de langue de MediaSPIP sont à disposition. ll vous suffit de vous inscrire sur la liste de discussion des traducteurs pour demander plus d’informations.
Actuellement MediaSPIP n’est disponible qu’en français et (...)
Sur d’autres sites (10333)
-
GDPR : How to fill in the information asset register when using Matomo ?
4 avril 2018, par InnoCraftDisclaimer : this blog post has been written by digital analysts, not lawyers. The purpose of this article is to explain you in details how we filled in the information asset register for Matomo. This work comes from our interpretation of the UK privacy commission resources (ICO). It cannot be considered as professional legal advice. So as GDPR, this information is subject to change.
The information asset register is for us one of the most important parts of the GDPR implementation process. It consists of an inventory of all information systems you are using to process personal data, exactly like a ledger for an accountant. Note that small and medium-sized organizations could be exempted.
Filling out this register can be a time-consuming activity. Therefore, we decided to show you a real case sample which we did for Matomo Analytics
-
iOS : How to fill audioUnit IOdata from avFrame
4 septembre 2012, par Michelle CannonI'm a little confused, I understand the basis of audio units in general but I can't seem to come up with an easy approach to my problem.
I have an rtsp player application using ffmpeg and AudioQueues , this works very well for some formats but the audio queue api seems to have issues with mu-law (g.711) audio.
I did some preliminary testing with another player that uses SDL audio which is a wrapper around audio units and playback was fairly smooth with little latency. I'd like to duplicate this without using the SDL middleware.What I am having problems with is how to take the decoded avFrame, I assume using audio units I have to decode using avformat_decode_audio4 since audio units can only handle uncompressed formats unlike audioQueue api that can play compressed formats.
My audio callback and fillAudio method for audioQueues is like the following
{{
void audioQueueOutputCallback(void *info, AudioQueueRef unused, AudioQueueBufferRef buffer) {
// NSLog(@"buffer size on callback %lu ",sizeof(buffer));
[(__bridge FLPlayer *)info fillAudioBuffer:buffer];
}
- (void)fillAudioBuffer:(AudioQueueBufferRef)buffer {
AudioTimeStamp bufferStartTime;
AudioQueueGetCurrentTime(audioQueue, NULL, &bufferStartTime, NULL);
buffer->mAudioDataByteSize = 0;
buffer->mPacketDescriptionCount = 0;
if (audioPacketQueue.count <= 0) {
//NSLog(@"Warning: No audio packets in queue %d ",audioPacketQueue.count);
emptyAudioBuffer = buffer;
return;
}
//NSLog(@" audio packets in queue %d ",audioPacketQueue.count);
emptyAudioBuffer = nil;
while (audioPacketQueue.count && buffer->mPacketDescriptionCount < buffer->mPacketDescriptionCapacity) {
NSMutableData *packetData = [audioPacketQueue objectAtIndex:0];
AVPacket *packet = [packetData mutableBytes];
if (buffer->mAudioDataBytesCapacity - buffer->mAudioDataByteSize >= packet->size) {
if (buffer->mPacketDescriptionCount == 0) {
bufferStartTime.mSampleTime = (Float64)packet->dts * avfContext->streams[audio_index]->codec->frame_size;
bufferStartTime.mFlags = kAudioTimeStampSampleTimeValid;
}
memcpy((uint8_t *)buffer->mAudioData + buffer->mAudioDataByteSize, packet->data, packet->size);
buffer->mPacketDescriptions[buffer->mPacketDescriptionCount].mStartOffset = buffer->mAudioDataByteSize;
buffer->mPacketDescriptions[buffer->mPacketDescriptionCount].mDataByteSize = packet->size;
buffer->mPacketDescriptions[buffer->mPacketDescriptionCount].mVariableFramesInPacket = avfContext->streams[audio_index]->codec->frame_size;
buffer->mAudioDataByteSize += packet->size;
buffer->mPacketDescriptionCount++;
[audioPacketQueueLock lock];
audioPacketQueueSize -= packet->size;
[audioPacketQueue removeObjectAtIndex:0];
[audioPacketQueueLock unlock];
av_free_packet(packet);
}
else {
break;
}
}
if (buffer->mPacketDescriptionCount > 0) {
OSStatus err;
err = AudioQueueEnqueueBufferWithParameters(audioQueue, buffer, 0, NULL, 0, 0, 0, NULL, &bufferStartTime, NULL) ;
if (err != noErr ) {
NSLog(@"Error enqueuing audio buffer: %d", err);
}
[decodeDoneLock lock];
if (decodeDone && audioPacketQueue.count == 0) {
err = AudioQueueStop(audioQueue, false);
if (err != noErr) {
NSLog(@"Error: Failed to stop audio queue: %d", err);
}
else {
NSLog(@"Stopped audio queue");
}
}
[decodeDoneLock unlock];
}
}
}}but the audioUnit callback looks like the following, how do I fill iodata from my buffers
#pragma mark Playback callback
static OSStatus playbackCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {edited-update *
Wow this really is a lot more difficult than I thought, why I am not sure, but anyway I think I have most of the pieces.
So to get my 8bit samples from ffmpeg int sint16 lpcm we can do something like this
UInt8* packetPtr = packet->data;
int packetSize = packet->size;
int16_t audioBuf[AVCODEC_MAX_AUDIO_FRAME_SIZE];
int dataSize, decodedSize, pts, nextPts;
double decodedAudioTime;
BOOL newPacket = true;
while (0 < packetSize) {
dataSize = AVCODEC_MAX_AUDIO_FRAME_SIZE;
decodedSize = avcodec_decode_audio2(_audioContext(trackId),
audioBuf, &dataSize,
packetPtr, packetSize);now audioBuf has our 16bit samples but we need 32 bit samples so we can do something like this
- (OSStatus)getSamples:(AudioBufferList*)ioData
{
for(UInt32 i = 0; i < ioData->mNumberBuffers; ++i)
{
SInt32 *outBuffer = (SInt32 *) (ioData->mBuffers[i].mData);
const int mDataByteSize = ioData->mBuffers[i].mDataByteSize;
numSamples = mDataByteSize / 4;
for(UInt32 j=0; j/do I get more than 1 sample from ffmpeg?? audiobuf needs to feed my ring buffer
{
outBuffer[j] = (SInt16) (ringbuf[j] * 32767.0);
}
}
return noErr;
} -
lavfi/metadata : fix metadata deletion if comparison returns false
6 octobre 2016, par Marton Balint