Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package org.red5.io.mp3;
/*
* RED5 Open Source Flash Server - http://code.google.com/p/red5/
*
* Copyright (c) 2006-2010 by respective authors (see below). All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any later
* version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this library; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteOrder;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.mina.core.buffer.IoBuffer;
//import org.jaudiotagger.audio.AudioFileIO;
//import org.jaudiotagger.audio.mp3.MP3AudioHeader;
//import org.jaudiotagger.audio.mp3.MP3File;
//import org.jaudiotagger.tag.TagException;
//import org.jaudiotagger.tag.TagField;
//import org.jaudiotagger.tag.FieldKey;
//import org.jaudiotagger.tag.datatype.DataTypes;
//import org.jaudiotagger.tag.id3.AbstractID3v2Frame;
//import org.jaudiotagger.tag.id3.ID3v24Tag;
//import org.jaudiotagger.tag.id3.framebody.FrameBodyAPIC;
import org.red5.io.IKeyFrameMetaCache;
import org.red5.io.IStreamableFile;
import org.red5.io.ITag;
import org.red5.io.ITagReader;
import org.red5.io.IoConstants;
import org.red5.io.amf.Output;
import org.red5.io.flv.IKeyFrameDataAnalyzer;
import org.red5.io.flv.Tag;
import org.red5.io.object.Serializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Read MP3 files
*/
public class MP3Reader implements ITagReader, IKeyFrameDataAnalyzer {
/**
* Logger
*/
protected static Logger log = LoggerFactory.getLogger(MP3Reader.class);
/**
* File
*/
private File file;
/**
* File input stream
*/
private FileInputStream fis;
/**
* File channel
*/
private FileChannel channel;
/**
* Memory-mapped buffer for file content
*/
private MappedByteBuffer mappedFile;
/**
* Source byte buffer
*/
private IoBuffer in;
/**
* Last read tag object
*/
private ITag tag;
/**
* Previous tag size
*/
private int prevSize;
/**
* Current time
*/
private double currentTime;
/**
* Frame metadata
*/
private KeyFrameMeta frameMeta;
/**
* Positions and time map
*/
private HashMap posTimeMap;
private int dataRate;
/**
* File duration
*/
private long duration;
/**
* Frame cache
*/
static private IKeyFrameMetaCache frameCache;
/**
* Holder for ID3 meta data
*/
private MetaData metaData;
/**
* Container for metadata and any other tags that should
* be sent prior to media data.
*/
private LinkedList firstTags = new LinkedList();
MP3Reader() {
// Only used by the bean startup code to initialize the frame cache
}
/**
* Creates reader from file input stream
* @param file file input
*
* @throws FileNotFoundException if not found
*/
public MP3Reader(File file) throws FileNotFoundException {
this.file = file;
// parse the id3 info
/*
try {
MP3File mp3file = (MP3File) AudioFileIO.read(file);
MP3AudioHeader audioHeader = (MP3AudioHeader) mp3file.getAudioHeader();
if (audioHeader != null) {
log.debug("Track length: {}", audioHeader.getTrackLength());
log.debug("Sample rate: {}", audioHeader.getSampleRateAsNumber());
log.debug("Channels: {}", audioHeader.getChannels());
log.debug("Variable bit rate: {}", audioHeader.isVariableBitRate());
log.debug("Track length (2): {}", audioHeader.getTrackLengthAsString());
log.debug("Mpeg version: {}", audioHeader.getMpegVersion());
log.debug("Mpeg layer: {}", audioHeader.getMpegLayer());
log.debug("Original: {}", audioHeader.isOriginal());
log.debug("Copyrighted: {}", audioHeader.isCopyrighted());
log.debug("Private: {}", audioHeader.isPrivate());
log.debug("Protected: {}", audioHeader.isProtected());
log.debug("Bitrate: {}", audioHeader.getBitRate());
log.debug("Encoding type: {}", audioHeader.getEncodingType());
log.debug("Encoder: {}", audioHeader.getEncoder());
}
ID3v24Tag idTag = mp3file.getID3v2TagAsv24();
if (idTag != null) {
// create meta data holder
metaData = new MetaData();
// metaData.setAlbum(idTag.getFirstAlbum());
// metaData.setArtist(idTag.getFirstArtist());
// metaData.setComment(idTag.getFirstComment());
// metaData.setGenre(idTag.getFirstGenre());
// metaData.setSongName(idTag.getFirstTitle());
// metaData.setTrack(idTag.getFirstTrack());
// metaData.setYear(idTag.getFirstYear());
//send album image if included
List tagFieldList = mp3file.getTag().getFields(FieldKey.COVER_ART);
//fix for APPSERVER-310
if (tagFieldList == null || tagFieldList.isEmpty()) {
log.debug("No cover art was found");
} else {
TagField imageField = tagFieldList.get(0);
if (imageField instanceof AbstractID3v2Frame) {
FrameBodyAPIC imageFrameBody = (FrameBodyAPIC)((AbstractID3v2Frame)imageField).getBody();
if (!imageFrameBody.isImageUrl()) {
byte[] imageBuffer = (byte[]) imageFrameBody.getObjectValue(DataTypes.OBJ_PICTURE_DATA);
//set the cover image on the metadata
metaData.setCovr(imageBuffer);
// Create tag for onImageData event
IoBuffer buf = IoBuffer.allocate(imageBuffer.length);
buf.setAutoExpand(true);
Output out = new Output(buf);
out.writeString("onImageData");
Map