
Recherche avancée
Médias (2)
-
GetID3 - Bloc informations de fichiers
9 avril 2013, par
Mis à jour : Mai 2013
Langue : français
Type : Image
-
GetID3 - Boutons supplémentaires
9 avril 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Image
Autres articles (47)
-
Des sites réalisés avec MediaSPIP
2 mai 2011, parCette page présente quelques-uns des sites fonctionnant sous MediaSPIP.
Vous pouvez bien entendu ajouter le votre grâce au formulaire en bas de page. -
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs -
Changer son thème graphique
22 février 2011, parLe thème graphique ne touche pas à la disposition à proprement dite des éléments dans la page. Il ne fait que modifier l’apparence des éléments.
Le placement peut être modifié effectivement, mais cette modification n’est que visuelle et non pas au niveau de la représentation sémantique de la page.
Modifier le thème graphique utilisé
Pour modifier le thème graphique utilisé, il est nécessaire que le plugin zen-garden soit activé sur le site.
Il suffit ensuite de se rendre dans l’espace de configuration du (...)
Sur d’autres sites (5022)
-
convert mp3 to wav using xuggle getting exception
24 juin 2013, par FelixI am trying to convert mp3 to wav and the code is here :
String mp3 = "F:\\work\\pic2talk38512.mp3";
String wav = "F:\\work\\pic2talk38512.wav";
TranscodeAudioAndVideo.transcodeTest(mp3, wav);
public static void transcode(String sourceUrl, String destinationUrl) {
IMediaReader reader = ToolFactory.makeReader(sourceUrl);
reader.addListener(ToolFactory.makeWriter(destinationUrl, reader));
while (reader.readPacket() == null)
do {
} while (false);
}I got this exception :
java.lang.UnsupportedOperationException: could not guess codec
at com.xuggle.xuggler.IContainerFormat.establishOutputCodecId(IContainerFormat.java:454)
at com.xuggle.xuggler.IContainerFormat.establishOutputCodecId(IContainerFormat.java:327)
at com.xuggle.xuggler.IContainerFormat.establishOutputCodecId(IContainerFormat.java:300)
at com.xuggle.mediatool.MediaWriter.addStreamFromContainer(MediaWriter.java:1134)
at com.xuggle.mediatool.MediaWriter.getStream(MediaWriter.java:1039)
at com.xuggle.mediatool.MediaWriter.encodeVideo(MediaWriter.java:742)
at com.xuggle.mediatool.MediaWriter.encodeVideo(MediaWriter.java:783)
at com.xuggle.mediatool.MediaWriter.onVideoPicture(MediaWriter.java:1434)
at com.xuggle.mediatool.AMediaToolMixin.onVideoPicture(AMediaToolMixin.java:166)
at com.xuggle.mediatool.MediaReader.dispatchVideoPicture(MediaReader.java:610)
at com.xuggle.mediatool.MediaReader.decodeVideo(MediaReader.java:519)
at com.xuggle.mediatool.MediaReader.readPacket(MediaReader.java:475)
at com.renren.intl.soundsns.pictalk.utils.TranscodeAudioAndVideo.transcodeTest(TranscodeAudioAndVideo.java:75)
at com.renren.intl.soundsns.pictalk.utils.TranscodeAudioAndVideoTest.convert(TranscodeAudioAndVideoTest.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)I know that xuggle can figure out the conversion by the extension.But why this time is failed ?
thanks
edit :
previously I can convert mp3 which params(MPEG 22.1KHZ 32kbps) to wav, but If I use the mp3(MPEG 44.1KHZ 62kbps) I got this exception ?
How this happened ?
-
RTMP Server forward to ffmpeg
7 janvier 2021, par Reza HashemiI'm looking into for a solution to accept rtmp connections and after demux forward to ffmpeg pipe.
Here is the solution I tried, I just put the part of Handeling Connection since its a long code based on :
https://github.com/gwuhaolin/livego


func (s *Server) handleConn(conn *core.Conn) error {
 if err := conn.HandshakeServer(); err != nil {
 conn.Close()
 log.Println("handleConn HandshakeServer err: ", err)
 return err
 }
 connServer := core.NewConnServer(conn)

 if err := connServer.ReadMsg(); err != nil {
 conn.Close()
 log.Println("handleConn read msg err: ", err)
 return err
 }
 appname, name, url := connServer.GetInfo()
 if connServer.IsPublisher() {
 //todo: check token if is valid
 connServer.PublishInfo.Name = appname
 reader := NewVirReader(connServer)
 s.handler.HandleReader(reader)
 log.Println("new publisher: %+v", reader.Info())

 if s.getter != nil {
 writeType := reflect.TypeOf(s.getter)
 log.Println("handleConn:writeType=%v", writeType)
 writer := s.getter.GetWriter(reader.Info())
 s.handler.HandleWriter(writer)
 }
 flvWriter := new(flvBus.Bus)
 flvWriter.SetBackend(q)
 s.handler.HandleWriter(flvWriter.GetWriter(reader.Info()))
 } else {
 writer := NewVirWriter(connServer)
 log.Println("new player: %+v", writer.Info())
 s.handler.HandleWriter(writer)
 }

 return nil
}



then on flv bus :
assume that ctx is the pipe0 of ffmpeg.


package flvBus

import (
 "github.com/gwuhaolin/livego/av"
 "github.com/gwuhaolin/livego/protocol/amf"
 "github.com/gwuhaolin/livego/utils/pio"
 "github.com/gwuhaolin/livego/utils/uid"
 "time"
)

var (
 flvHeader = []byte{0x46, 0x4c, 0x56, 0x01, 0x05, 0x00, 0x00, 0x00, 0x09}
)

const (
 headerLen = 11
)

type FLVWriter struct {
 Uid string
 av.RWBaser
 app, title, url string
 buf []byte
 closed chan struct{}
 ctx Writer
}

func NewFLVWriter(app, title, url string, ctx Writer) *FLVWriter {
 ret := &FLVWriter{
 Uid: uid.NewId(),
 app: app,
 title: title,
 url: url,
 ctx: ctx,
 RWBaser: av.NewRWBaser(time.Second * 10),
 closed: make(chan struct{}),
 buf: make([]byte, headerLen),
 }

 ret.ctx.Write(flvHeader)
 pio.PutI32BE(ret.buf[:4], 0)
 ret.ctx.Write(ret.buf[:4])
 return ret
}

func (writer *FLVWriter) Write(p *av.Packet) error {
 writer.RWBaser.SetPreTime()
 h := writer.buf[:headerLen]

 typeID := av.TAG_VIDEO
 if !p.IsVideo {
 if p.IsMetadata {
 var err error
 typeID = av.TAG_SCRIPTDATAAMF0
 p.Data, err = amf.MetaDataReform(p.Data, amf.DEL)
 if err != nil {
 return err
 }
 } else {
 typeID = av.TAG_AUDIO
 }
 }
 dataLen := len(p.Data)
 timestamp := p.TimeStamp
 timestamp += writer.BaseTimeStamp()
 writer.RWBaser.RecTimeStamp(timestamp, uint32(typeID))

 preDataLen := dataLen + headerLen
 timestampbase := timestamp & 0xffffff
 timestampExt := timestamp >> 24 & 0xff

 pio.PutU8(h[0:1], uint8(typeID))
 pio.PutI24BE(h[1:4], int32(dataLen))
 pio.PutI24BE(h[4:7], int32(timestampbase))
 pio.PutU8(h[7:8], uint8(timestampExt))

 if _, err := writer.ctx.Write(h); err != nil {
 return err
 }

 if _, err := writer.ctx.Write(p.Data); err != nil {
 return err
 }

 pio.PutI32BE(h[:4], int32(preDataLen))
 if _, err := writer.ctx.Write(h[:4]); err != nil {
 return err
 }

 return nil
}

func (writer *FLVWriter) Wait() {
 select {
 case <-writer.closed:
 return
 }
}

func (writer *FLVWriter) Close(error) {
 //writer.ctx.Close()
 close(writer.closed)
}

func (writer *FLVWriter) Info() (ret av.Info) {
 ret.UID = writer.Uid
 ret.URL = writer.url
 ret.Key = writer.app + "/" + writer.title
 return
}



but at the end it return me pipe:0 : Invalid data found when processing input.


How can I forward captured frames to ffmpeg ?
Also any other solutions are welcome.


-
Merge commit '9c1e111406bd4cbb04d8e8611b71bebf203bec5e'
7 novembre 2017, par James AlmerMerge commit '9c1e111406bd4cbb04d8e8611b71bebf203bec5e'
* commit '9c1e111406bd4cbb04d8e8611b71bebf203bec5e' :
flac : Convert to the new bitstream reader
bitstream : Avoid undefined behavior in bitstream_skip()This commit is a noop, see
https://ffmpeg.org/pipermail/ffmpeg-devel/2017-April/209609.htmlMerged-by : James Almer <jamrial@gmail.com>