
Recherche avancée
Médias (1)
-
La conservation du net art au musée. Les stratégies à l’œuvre
26 mai 2011
Mis à jour : Juillet 2013
Langue : français
Type : Texte
Autres articles (50)
-
Mise à jour de la version 0.1 vers 0.2
24 juin 2013, parExplications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...) -
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 ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)
Sur d’autres sites (9937)
-
I wonder why logcat says "NO SUCH A FILE OR DIRECTORY(2)"
22 septembre 2013, par autoexebatI wanna play audio on Android with ffmpeg.
But when I run this project, error has occurredwhat should I do ?
java SIDE
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.SystemClock;
public class FFmpegBasic extends Activity
{
private AudioTrack track;
private FileOutputStream os;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
createEngine();
int bufSize = AudioTrack.getMinBufferSize(44100,
AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT);
track = new AudioTrack(AudioManager.STREAM_MUSIC,
44100,
AudioFormat.CHANNEL_CONFIGURATION_STEREO,
AudioFormat.ENCODING_PCM_16BIT,
bufSize,
AudioTrack.MODE_STREAM);
byte[] bytes = new byte[bufSize];
try {
os = new FileOutputStream("/sdcard/a.out",false);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String result = "/mnt/sdcard/Wildlife.mp3";
loadFile(result,bytes);
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void playSound(byte[] buf, int size) {
if(track.getPlayState()!=AudioTrack.PLAYSTATE_PLAYING)
track.play();
track.write(buf, 0, size);
try {
os.write(buf,0,size);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private native void createEngine();
private native void loadFile(String file, byte[] array);
/** Load jni .so on initialization*/
static {
System.loadLibrary("avutil");
System.loadLibrary("avcore");
System.loadLibrary("avcodec");
System.loadLibrary("avformat");
System.loadLibrary("avdevice");
System.loadLibrary("swscale");
System.loadLibrary("avfilter");
System.loadLibrary("ffmpeg");
System.loadLibrary("basicplayer");
}
}
c SIDE
#include
#include
#include
#include <android></android>log.h>
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "avcodec.h"
#include "avformat.h"
void Java_net_jbong_FFmpegBasic_FFmpegBasic_createEngine(JNIEnv* env, jclass clazz)
{
//avcodec_init();
av_register_all();
}
void Java_net_jbong_FFmpegBasic_FFmpegBasic_loadFile(JNIEnv* env, jobject obj, jstring file, jbyteArray array)
{
AVFormatContext *gFormatCtx = NULL;
AVCodecContext *gAudioCodecCtx = NULL;
AVCodec *gAudioCodec = NULL;
int gAudioStreamIdx = -1;
char *gAudioBuffer = NULL;
int i, outsize = 0;
AVPacket packet;
const char *str;
str = (*env)->GetStringUTFChars(env, file, NULL);
jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID play = (*env)->GetMethodID(env, cls, "playSound", "([BI)V");
if (gFormatCtx != NULL)
return -1;
if (av_open_input_file(&gFormatCtx,str,NULL,0,NULL)!=0)
return -2;
if (av_find_stream_info(gFormatCtx) < 0)
return -3;
for(i=0; inb_streams; i++)
{
if(gFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
{
gAudioStreamIdx = i;
break;
}
}
if (gAudioStreamIdx == -1)
return -4;
gAudioCodecCtx = gFormatCtx->streams[gAudioStreamIdx]->codec;
gAudioCodec = avcodec_find_decoder(gAudioCodecCtx->codec_id);
if (gAudioCodec == NULL)
return -5;
if (avcodec_open(gAudioCodecCtx, gAudioCodec)<0)
return -6;
gAudioBuffer = (char *)av_malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE *2);
int decode = 0;
while (av_read_frame(gFormatCtx, &packet) >= 0)
{
if (gFormatCtx-> streams[packet.stream_index]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
{
int data_size = AVCODEC_MAX_AUDIO_FRAME_SIZE * 8;
gAudioBuffer = (char *)av_malloc(data_size);
int size=packet.size;
while(size > 0)
{
int len = avcodec_decode_audio3(gAudioCodecCtx,
(short *) gAudioBuffer, &data_size, &packet);
if (data_size > 0)
{
jbyte *bytes = (*env)->GetByteArrayElements(env, array, NULL);
memcpy(bytes + decode, (int16_t *)gAudioBuffer, size);
(*env)->ReleaseByteArrayElements(env, array, bytes, 0);
(*env)->CallVoidMethod(env, obj, play, array, data_size);
decode += size;
size -= len;
}
}
}
av_free_packet(&packet);
}
av_close_input_file(gFormatCtx);
return 0;
}Why my android logcat show me this message ?
"error opening trace file : No such file or directory (2)" -
Android FFmpeg Video Player
11 mars 2013, par DilipI want to play video using
FFmpeg
for this have used some code,But it open file but not drawing frames thowing Unhandled page fault exception.Java Code :
public class MainActivity extends Activity {
private static native void openFile();
private static native void drawFrame(Bitmap bitmap);
private static native void drawFrameAt(Bitmap bitmap, int secs);
private Bitmap mBitmap;
private int mSecs = 0;
static {
System.loadLibrary("ffmpegutils");
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(new VideoView(this));
setContentView(R.layout.main);
mBitmap = Bitmap.createBitmap(320, 240, Bitmap.Config.ARGB_8888);
openFile();
Button btn = (Button) findViewById(R.id.frame_adv);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
try {
drawFrame(mBitmap);
ImageView i = (ImageView) findViewById(R.id.frame);
i.setImageBitmap(mBitmap);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}}Jni code :
#include
#include
#include
#include <android></android>log.h>
#include <android></android>bitmap.h>
#include <libavcodec></libavcodec>avcodec.h>
#include <libavformat></libavformat>avformat.h>
#include <libswscale></libswscale>swscale.h>
#define LOG_TAG "FFMPEGSample"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
/* Cheat to keep things simple and just use some globals. */
AVFormatContext *pFormatCtx;
AVCodecContext *pCodecCtx;
AVFrame *pFrame;
AVFrame *pFrameRGB;
int videoStream;
/*
* Write a frame worth of video (in pFrame) into the Android bitmap
* described by info using the raw pixel buffer. It's a very inefficient
* draw routine, but it's easy to read. Relies on the format of the
* bitmap being 8bits per color component plus an 8bit alpha channel.
*/
static void fill_bitmap(AndroidBitmapInfo* info, void *pixels, AVFrame *pFrame) {
uint8_t *frameLine;
int yy;
for (yy = 0; yy < info->height; yy++) {
uint8_t* line = (uint8_t*) pixels;
frameLine = (uint8_t *) pFrame->data[0] + (yy * pFrame->linesize[0]);
int xx;
for (xx = 0; xx < info->width; xx++) {
int out_offset = xx * 4;
int in_offset = xx * 3;
line[out_offset] = frameLine[in_offset];
line[out_offset + 1] = frameLine[in_offset + 1];
line[out_offset + 2] = frameLine[in_offset + 2];
line[out_offset + 3] = 0;
}
pixels = (char*) pixels + info->stride;
}
}
void Java_com_churnlabs_ffmpegsample_MainActivity_openFile(JNIEnv * env,
jobject this) {
int ret;
int err;
int i;
AVCodec *pCodec;
uint8_t *buffer;
int numBytes;
av_register_all();
LOGE("Registered formats***********************************");
err = av_open_input_file(&pFormatCtx, "file:///mnt/sdcard/android.3gp",
NULL, 0, NULL);
LOGE("Called open file***************************************************");
if (err != 0) {
LOGE(
"Couldn't open file****************************************************");
return;
}
LOGE(
"Opened file***********************************************************");
if (av_find_stream_info(pFormatCtx) < 0) {
LOGE(
"Unable to get stream info*****************************************");
return;
}
videoStream = -1;
for (i = 0; i < pFormatCtx->nb_streams; i++) {
if (pFormatCtx->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO) {
videoStream = i;
break;
}
}
if (videoStream == -1) {
LOGE("Unable to find video stream");
return;
}
LOGI("Video stream is [%d]", videoStream);
pCodecCtx = pFormatCtx->streams[videoStream]->codec;
pCodec = avcodec_find_decoder(pCodecCtx->codec_id);
if (pCodec == NULL) {
LOGE("Unsupported codec**********************************************");
return;
}
if (avcodec_open(pCodecCtx, pCodec) < 0) {
LOGE("Unable to open codec***************************************");
return;
}
pFrame = avcodec_alloc_frame();
pFrameRGB = avcodec_alloc_frame();
LOGI("Video size is [%d x %d]", pCodecCtx->width, pCodecCtx->height);
numBytes = avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,
pCodecCtx->height);
buffer = (uint8_t *) av_malloc(numBytes * sizeof(uint8_t));
avpicture_fill((AVPicture *) pFrameRGB, buffer, PIX_FMT_RGB24,
pCodecCtx->width, pCodecCtx->height);
}
void Java_com_churnlabs_ffmpegsample_MainActivity_drawFrame(JNIEnv * env,
jobject this, jstring bitmap) {
AndroidBitmapInfo info;
void* pixels;
int ret;
int err;
int i;
int frameFinished = 0;
AVPacket packet;
static struct SwsContext *img_convert_ctx;
int64_t seek_target;
if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0) {
LOGE("AndroidBitmap_getInfo() failed ! error=%d", ret);
return;
}
LOGE(
"Checked on the bitmap*************************************************");
if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) {
LOGE("AndroidBitmap_lockPixels() failed ! error=%d", ret);
}
LOGE(
"Grabbed the pixels*******************************************************");
i = 0;
while ((i == 0) && (av_read_frame(pFormatCtx, &packet) >= 0)) {
if (packet.stream_index == videoStream) {
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if (frameFinished) {
LOGE("packet pts %llu", packet.pts);
// This is much different than the tutorial, sws_scale
// replaces img_convert, but it's not a complete drop in.
// This version keeps the image the same size but swaps to
// RGB24 format, which works perfect for PPM output.
int target_width = 320;
int target_height = 240;
img_convert_ctx = sws_getContext(pCodecCtx->width,
pCodecCtx->height, pCodecCtx->pix_fmt, target_width,
target_height, PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL,
NULL);
if (img_convert_ctx == NULL) {
LOGE("could not initialize conversion context\n");
return;
}
sws_scale(img_convert_ctx,
(const uint8_t* const *) pFrame->data, pFrame->linesize,
0, pCodecCtx->height, pFrameRGB->data,
pFrameRGB->linesize);
// save_frame(pFrameRGB, target_width, target_height, i);
fill_bitmap(&info, pixels, pFrameRGB);
i = 1;
}
}
av_free_packet(&packet);
}
AndroidBitmap_unlockPixels(env, bitmap);
}
int seek_frame(int tsms) {
int64_t frame;
frame = av_rescale(tsms, pFormatCtx->streams[videoStream]->time_base.den,
pFormatCtx->streams[videoStream]->time_base.num);
frame /= 1000;
if (avformat_seek_file(pFormatCtx, videoStream, 0, frame, frame,
AVSEEK_FLAG_FRAME) < 0) {
return 0;
}
avcodec_flush_buffers(pCodecCtx);
return 1;
}Log Trace
0): <6>AUO_TOUCH: ts_irqHandler: before disable_irq()
D/PrintK ( 57): <6>AUO_TOUCH: ts_irqWorkHandler: P1(313,750),P2(0,0)
D/PrintK ( 0): <6>AUO_TOUCH: ts_irqHandler: before disable_irq()
D/PrintK ( 57): <6>AUO_TOUCH: ts_irqWorkHandler: P1(0,0),P2(0,0)
E/FFMPEGSample( 2882): Checked on the bitmap*************************************************
E/FFMPEGSample( 2882): Grabbed the pixels*******************************************************
E/FFMPEGSample( 2882): packet pts 0
F/PrintK ( 2882): <2>Exception!!! bs.ffmpegsample: unhandled page fault (11) at 0x0000000c, code 0x017
F/PrintK ( 2882): <2>Exception!!! bs.ffmpegsample: unhandled page fault (11) at 0x0000000c, code 0x017
I/DEBUG ( 86): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
F/DEBUG ( 86): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 86): Build fingerprint: 'dell/streak/streak/8x50:2.2.2/FRG83G/eng.cmbuild.20110317.163900:user/release-keys'
I/DEBUG ( 86): Exception!!! pid: 2882, tid: 2882 >>> com.churnlabs.ffmpegsample <<<
F/DEBUG ( 86): Exception!!! pid: 2882, tid: 2882 >>> com.churnlabs.ffmpegsample <<<
I/DEBUG ( 86): signal 11 (SIGSEGV), fault addr 0000000c
F/DEBUG ( 86): signal 11 (SIGSEGV), fault addr 0000000c
I/DEBUG ( 86): r0 00000070 r1 00000000 r2 0024fca8 r3 afd42328
F/DEBUG ( 86): r0 00000070 r1 00000000 r2 0024fca8 r3 afd42328
I/DEBUG ( 86): r4 00000000 r5 00000000 r6 0000062c r7 0000a000
F/DEBUG ( 86): r4 00000000 r5 00000000 r6 0000062c r7 0000a000
I/DEBUG ( 86): r8 be9794f0 r9 428ab9d8 10 00000003 fp be979830
F/DEBUG ( 86): r8 be9794f0 r9 428ab9d8 10 00000003 fp be979830
I/DEBUG ( 86): ip ffffff90 sp be979448 lr afd0c633 pc afd0c320 cpsr 80000030
F/DEBUG ( 86): ip ffffff90 sp be979448 lr afd0c633 pc afd0c320 cpsr 80000030
I/DEBUG ( 86): d0 6472656767756265 d1 0000000000000000
I/DEBUG ( 86): d2 0000000000000000 d3 0000000044480000
I/DEBUG ( 86): d4 8000000000000000 d5 000000003f800000
I/DEBUG ( 86): d6 0000000000000000 d7 4448000043f00000
I/DEBUG ( 86): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 86): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 86): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 86): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 86): d16 0000000000000000 d17 0000000000000000
I/DEBUG ( 86): d18 0000000000000000 d19 0000000000000000
I/DEBUG ( 86): d20 3ff0000000000000 d21 8000000000000000
I/DEBUG ( 86): d22 0000000000000000 d23 0000000500010004
I/DEBUG ( 86): d24 0101010101010101 d25 0000000000000000
I/DEBUG ( 86): d26 0000000000000000 d27 0000000000000000
I/DEBUG ( 86): d28 0000000000000000 d29 3ff0000000000000
I/DEBUG ( 86): d30 0000000000000000 d31 3ff0000000000000
I/DEBUG ( 86): scr 80000012
I/DEBUG ( 86):
I/DEBUG ( 86): #00 pc 0000c320 /system/lib/libc.so
F/DEBUG ( 86): #00 pc 0000c320 /system/lib/libc.so
I/DEBUG ( 86): #01 pc 0000c62e /system/lib/libc.so
F/DEBUG ( 86): #01 pc 0000c62e /system/lib/libc.so
I/DEBUG ( 86): #02 pc 0000cd3e /system/lib/libc.so
F/DEBUG ( 86): #02 pc 0000cd3e /system/lib/libc.so
I/DEBUG ( 86): #03 pc 0002d2c4 /system/lib/libskia.so
F/DEBUG ( 86): #03 pc 0002d2c4 /system/lib/libskia.so
I/DEBUG ( 86): #04 pc 000693ec /system/lib/libskia.so
F/DEBUG ( 86): #04 pc 000693ec /system/lib/libskia.so
I/DEBUG ( 86): #05 pc 00064d70 /system/lib/libskia.so
F/DEBUG ( 86): #05 pc 00064d70 /system/lib/libskia.so
I/DEBUG ( 86): #06 pc 0004dea8 /system/lib/libandroid_runtime.so
F/DEBUG ( 86): #06 pc 0004dea8 /system/lib/libandroid_runtime.so
I/DEBUG ( 86): #07 pc 00016df4 /system/lib/libdvm.so
F/DEBUG ( 86): #07 pc 00016df4 /system/lib/libdvm.so
I/DEBUG ( 86): #08 pc 00042904 /system/lib/libdvm.so
F/DEBUG ( 86): #08 pc 00042904 /system/lib/libdvm.so
I/DEBUG ( 86): #09 pc 0001bd58 /system/lib/libdvm.so
F/DEBUG ( 86): #09 pc 0001bd58 /system/lib/libdvm.so
I/DEBUG ( 86): #10 pc 00022550 /system/lib/libdvm.so
F/DEBUG ( 86): #10 pc 00022550 /system/lib/libdvm.so
I/DEBUG ( 86): #11 pc 000213f0 /system/lib/libdvm.so
F/DEBUG ( 86): #11 pc 000213f0 /system/lib/libdvm.so
I/DEBUG ( 86): #12 pc 00058c4a /system/lib/libdvm.so
F/DEBUG ( 86): #12 pc 00058c4a /system/lib/libdvm.so
I/DEBUG ( 86): #13 pc 00060e72 /system/lib/libdvm.so
F/DEBUG ( 86): #13 pc 00060e72 /system/lib/libdvm.so
I/DEBUG ( 86): #14 pc 0001bd58 /system/lib/libdvm.so
F/DEBUG ( 86): #14 pc 0001bd58 /system/lib/libdvm.so
I/DEBUG ( 86): #15 pc 00022550 /system/lib/libdvm.so
F/DEBUG ( 86): #15 pc 00022550 /system/lib/libdvm.so
I/DEBUG ( 86): #16 pc 000213f0 /system/lib/libdvm.so
F/DEBUG ( 86): #16 pc 000213f0 /system/lib/libdvm.so
I/DEBUG ( 86): #17 pc 00058a90 /system/lib/libdvm.so
F/DEBUG ( 86): #17 pc 00058a90 /system/lib/libdvm.so
I/DEBUG ( 86): #18 pc 0004525e /system/lib/libdvm.so
F/DEBUG ( 86): #18 pc 0004525e /system/lib/libdvm.so
I/DEBUG ( 86): #19 pc 0002e574 /system/lib/libandroid_runtime.so
F/DEBUG ( 86): #19 pc 0002e574 /system/lib/libandroid_runtime.so
I/DEBUG ( 86): #20 pc 0002f5f6 /system/lib/libandroid_runtime.so
F/DEBUG ( 86): #20 pc 0002f5f6 /system/lib/libandroid_runtime.so
I/DEBUG ( 86): #21 pc 00008ca8 /system/bin/app_process
F/DEBUG ( 86): #21 pc 00008ca8 /system/bin/app_process
I/DEBUG ( 86): #22 pc 0000d3d0 /system/lib/libc.so
F/DEBUG ( 86): #22 pc 0000d3d0 /system/lib/libc.so
I/DEBUG ( 86):
I/DEBUG ( 86): code around pc:
I/DEBUG ( 86): afd0c300 19d94f56 42ba690f 80a4f0c0 94001814
I/DEBUG ( 86): afd0c310 f08042a2 68d1809f 42916994 6895d00e
I/DEBUG ( 86): afd0c320 429668ee 8096f040 4296688e 8092f040
I/DEBUG ( 86): afd0c330 bf2442bd 608d60e9 e08bd21b b1116951
I/DEBUG ( 86): afd0c340 0514f102 6911e007 f102b191 e0020510
I/DEBUG ( 86):
I/DEBUG ( 86): code around lr:
I/DEBUG ( 86): afd0c610 60f11008 f8c1608e 4e31c00c f10319a1
I/DEBUG ( 86): afd0c620 608a0608 e04b614d b1b2684a f7ff4628
I/DEBUG ( 86): afd0c630 e00ffe23 0f41f115 f04fbf88 d80c35ff
I/DEBUG ( 86): afd0c640 350b4927 0507f025 68431860 4628b12b
I/DEBUG ( 86): afd0c650 fc1cf7ff 28004606 4e21d132 689119a2
I/DEBUG ( 86):
I/DEBUG ( 86): stack:
I/DEBUG ( 86): be979408 000001e0
I/DEBUG ( 86): be97940c be979494 [stack]
I/DEBUG ( 86): be979410 be979438 [stack]
I/DEBUG ( 86): be979414 be979478 [stack]
I/DEBUG ( 86): be979418 0012f484 [heap]
I/DEBUG ( 86): be97941c be979428 [stack]
I/DEBUG ( 86): be979420 00000000
I/DEBUG ( 86): be979424 ab163cec /system/lib/libskia.so
I/DEBUG ( 86): be979428 3f800000
I/DEBUG ( 86): be97942c 80000000 /system/lib/libicudata.so
I/DEBUG ( 86): be979430 00000000
I/DEBUG ( 86): be979434 80000000 /system/lib/libicudata.so
I/DEBUG ( 86): be979438 3f800000
I/DEBUG ( 86): be97943c 00000000
I/DEBUG ( 86): be979440 df002777
I/DEBUG ( 86): be979444 e3a070ad
I/DEBUG ( 86): #00 be979448 0024fd18 [heap]
I/DEBUG ( 86): be97944c afd4372c /system/lib/libc.so
I/DEBUG ( 86): be979450 000000c5
I/DEBUG ( 86): be979454 afd42328 /system/lib/libc.so
I/DEBUG ( 86): be979458 00000070
I/DEBUG ( 86): be97945c 0000062c
I/DEBUG ( 86): be979460 00000003
I/DEBUG ( 86): be979464 afd0c633 /system/lib/libc.so
I/DEBUG ( 86): #01 be979468 be9794c8 [stack]
I/DEBUG ( 86): be97946c 00000000
I/DEBUG ( 86): be979470 002576bc [heap]
I/DEBUG ( 86): be979474 ab163d2c /system/lib/libskia.so
I/DEBUG ( 86): be979478 00000000
I/DEBUG ( 86): be97947c 00000000
I/DEBUG ( 86): be979480 44480000 /system/framework/framework-res.apk
I/DEBUG ( 86): be979484 00000068
I/DEBUG ( 86): be979488 00000002
I/DEBUG ( 86): be97948c 00000068
I/DEBUG ( 86): be979490 00000003
I/DEBUG ( 86): be979494 afd0cd41 /system/lib/libc.so
E/Parcel ( 841): Reading a NULL string not supported here.Can any plz suggest me where I'm doing wrong.
-
Xuggle - Concatenate two videos - Error - java.lang.RuntimeException : error -1094995529 decoding audio
1er avril 2013, par user2232357I am using the Xuggle API to concatenate two MPEG videos (with Audio inbuilt in the MPEGs).
I am referring to the https://code.google.com/p/xuggle/source/browse/trunk/java/xuggle-xuggler/src/com/xuggle/mediatool/demos/ConcatenateAudioAndVideo.java?r=929. (my both inputs and output are MPEGs).Getting the bellow error.
14:06:50.139 [main] ERROR org.ffmpeg - [mp2 @ 0x7fd54693d000] incomplete frame
java.lang.RuntimeException: error -1094995529 decoding audio
at com.xuggle.mediatool.MediaReader.decodeAudio(MediaReader.java:549)
at com.xuggle.mediatool.MediaReader.readPacket(MediaReader.java:469)
at com.tav.factory.video.XuggleMediaCreator.concatenateAllVideos(XuggleMediaCreator.java:271)
at com.tav.factory.video.XuggleMediaCreator.main(XuggleMediaCreator.java:446)Can anyone help mw with this ??? Thanks in Advance..
Here is the complete code.
public String concatenateAllVideos(ArrayList<tavtexttoavrequest> list){
String finalPath="";
String sourceUrl1 = "/Users/SSID/WS/SampleTTS/page2/AV_TAVImage2.mpeg";
String sourceUrl2 = "/Users/SSID/WS/SampleTTS/page2/AV_TAVImage3.mpeg";
String destinationUrl = "/Users/SSID/WS/SampleTTS/page2/z_AV_TAVImage_Final23.mpeg";
out.printf("transcode %s + %s -> %s\n", sourceUrl1, sourceUrl2,
destinationUrl);
//////////////////////////////////////////////////////////////////////
// //
// NOTE: be sure that the audio and video parameters match those of //
// your input media //
// //
//////////////////////////////////////////////////////////////////////
// video parameters
final int videoStreamIndex = 0;
final int videoStreamId = 0;
final int width = 400;
final int height = 400;
// audio parameters
final int audioStreamIndex = 1;
final int audioStreamId = 0;
final int channelCount = 1;
final int sampleRate = 16000 ; // Hz 16000 44100;
// create the first media reader
IMediaReader reader1 = ToolFactory.makeReader(sourceUrl1);
// create the second media reader
IMediaReader reader2 = ToolFactory.makeReader(sourceUrl2);
// create the media concatenator
MediaConcatenator concatenator = new MediaConcatenator(audioStreamIndex,
videoStreamIndex);
// concatenator listens to both readers
reader1.addListener(concatenator);
reader2.addListener(concatenator);
// create the media writer which listens to the concatenator
IMediaWriter writer = ToolFactory.makeWriter(destinationUrl);
concatenator.addListener(writer);
// add the video stream
writer.addVideoStream(videoStreamIndex, videoStreamId, width, height);
// add the audio stream
writer.addAudioStream(audioStreamIndex, audioStreamId, channelCount,sampleRate);
// read packets from the first source file until done
try {
while (reader1.readPacket() == null)
;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// read packets from the second source file until done
try {
while (reader2.readPacket() == null)
;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// close the writer
writer.close();
return finalPath;
}
static class MediaConcatenator extends MediaToolAdapter
{
// the current offset
private long mOffset = 0;
// the next video timestamp
private long mNextVideo = 0;
// the next audio timestamp
private long mNextAudio = 0;
// the index of the audio stream
private final int mAudoStreamIndex;
// the index of the video stream
private final int mVideoStreamIndex;
/**
* Create a concatenator.
*
* @param audioStreamIndex index of audio stream
* @param videoStreamIndex index of video stream
*/
public MediaConcatenator(int audioStreamIndex, int videoStreamIndex)
{
mAudoStreamIndex = audioStreamIndex;
mVideoStreamIndex = videoStreamIndex;
}
public void onAudioSamples(IAudioSamplesEvent event)
{
IAudioSamples samples = event.getAudioSamples();
// set the new time stamp to the original plus the offset established
// for this media file
long newTimeStamp = samples.getTimeStamp() + mOffset;
// keep track of predicted time of the next audio samples, if the end
// of the media file is encountered, then the offset will be adjusted
// to this time.
mNextAudio = samples.getNextPts();
// set the new timestamp on audio samples
samples.setTimeStamp(newTimeStamp);
// create a new audio samples event with the one true audio stream
// index
super.onAudioSamples(new AudioSamplesEvent(this, samples,
mAudoStreamIndex));
}
public void onVideoPicture(IVideoPictureEvent event)
{
IVideoPicture picture = event.getMediaData();
long originalTimeStamp = picture.getTimeStamp();
// set the new time stamp to the original plus the offset established
// for this media file
long newTimeStamp = originalTimeStamp + mOffset;
// keep track of predicted time of the next video picture, if the end
// of the media file is encountered, then the offset will be adjusted
// to this this time.
//
// You'll note in the audio samples listener above we used
// a method called getNextPts(). Video pictures don't have
// a similar method because frame-rates can be variable, so
// we don't now. The minimum thing we do know though (since
// all media containers require media to have monotonically
// increasing time stamps), is that the next video timestamp
// should be at least one tick ahead. So, we fake it.
mNextVideo = originalTimeStamp + 1;
// set the new timestamp on video samples
picture.setTimeStamp(newTimeStamp);
// create a new video picture event with the one true video stream
// index
super.onVideoPicture(new VideoPictureEvent(this, picture,
mVideoStreamIndex));
}
public void onClose(ICloseEvent event)
{
// update the offset by the larger of the next expected audio or video
// frame time
mOffset = Math.max(mNextVideo, mNextAudio);
if (mNextAudio < mNextVideo)
{
// In this case we know that there is more video in the
// last file that we read than audio. Technically you
// should pad the audio in the output file with enough
// samples to fill that gap, as many media players (e.g.
// Quicktime, Microsoft Media Player, MPlayer) actually
// ignore audio time stamps and just play audio sequentially.
// If you don't pad, in those players it may look like
// audio and video is getting out of sync.
// However kiddies, this is demo code, so that code
// is left as an exercise for the readers. As a hint,
// see the IAudioSamples.defaultPtsToSamples(...) methods.
}
}
public void onAddStream(IAddStreamEvent event)
{
// overridden to ensure that add stream events are not passed down
// the tool chain to the writer, which could cause problems
}
public void onOpen(IOpenEvent event)
{
// overridden to ensure that open events are not passed down the tool
// chain to the writer, which could cause problems
}
public void onOpenCoder(IOpenCoderEvent event)
{
// overridden to ensure that open coder events are not passed down the
// tool chain to the writer, which could cause problems
}
public void onCloseCoder(ICloseCoderEvent event)
{
// overridden to ensure that close coder events are not passed down the
// tool chain to the writer, which could cause problems
}
}
</tavtexttoavrequest>