package Ġio . github . ken ney code . vide ost udio . Util Ċ Ċ import Ġandroid . media . Media Extractor Ċ import Ġandroid . media . Media Format Ċ import Ġandroid . media . Media Mux er Ċ import Ġjava . nio . ByteBuffer Ċ import Ġandroid . media . Media Codec Ċ import Ġandroid . util . Log Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠCode d Ġby Ġk enn ey Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . github . com / ken ney code / Video Studio Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġ éŁ³ é¢ĳ / è§Ĩé¢ĳ è£ ģ åī ª åĻ¨ Ċ Ġ* ĠĠĠĠĠ Ġaudio / video Ġclip per Ċ Ġ* Ċ Ġ**/ Ċ Ċ class ĠMedia Clip per Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġenum Ġclass ĠMED IA _ TYPE Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA UDIO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV IDE O ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ éŁ³ é¢ĳ / è§Ĩé¢ĳ æĹ¶ éķ¿ è£ ģ åī ª ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġinput Path ĠĠĠĠ Ġæ º Ĳ éŁ³ é¢ĳ / è§Ĩé¢ĳ è·¯å¾Ħ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġoutput Path ĠĠĠ Ġ è£ ģ åī ª åĲİçļĦ éŁ³ é¢ĳ / è§Ĩé¢ĳ è·¯å¾Ħ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠstartTime ĠĠĠĠ Ġ è£ ģ åī ª å¼Ģå§ĭ æĹ¶éĹ´ ï¼Į åįķä½į æĺ¯ ç§Ĵ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠendTime ĠĠĠĠĠĠ Ġ è£ ģ åī ª ç»ĵæĿŁ æĹ¶éĹ´ ï¼Į åįķä½į æĺ¯ ç§Ĵ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmedia Type ĠĠĠĠ Ġ åªĴ ä½ĵ ç±»åŀĭ ï¼Į é»ĺè®¤ æĺ¯ è§Ĩé¢ĳ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ@ see ĠMED IA _ TYPE ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġclip ( input Path : ĠString , Ġoutput Path : ĠString , ĠstartTime : ĠFloat , ĠendTime : ĠFloat , Ġmedia Type : MEDIA _ TYPE Ġ= ĠMED IA _ TYPE . VIDEO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime Us Ġ= Ġ( startTime Ġ* Ġ 1 0 0 0 0 0 0 ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠendTime Us Ġ= Ġ( endTime Ġ* Ġ 1 0 0 0 0 0 0 ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Extractor (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset DataSource ( input Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextractor Track Index Ġ= Ġget Track Index ( this , Ġmedia Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Track ( extractor Track Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek To ( startTime Us , ĠMedia Extractor . SEEK _ TO _ CLOSE ST _ SYNC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo Format Ġ= Ġget Track Format ( extractor Track Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Format . set Integer ( Media Format . KEY _ DURATION , Ġ( endTime Us Ġ- ĠstartTime Us ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Mux er Ġ= ĠMedia Mux er ( output Path , ĠMedia Mux er . Output Format . MUX ER _ OUTPUT _ M PEG _ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmux er Track Index Ġ= Ġmedia Mux er . add Track ( video Format ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Mux er . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbyte Buffer Ġ= ĠByteBuffer . allocate ( video Format . getInteger ( Media Format . KEY _ MAX _ INPUT _ SIZE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Size Ġ= Ġread Sample Data ( byte Buffer , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sample Size Ġ< Ġ 0 Ġ|| Ġsample Time Ġ> ĠendTime Us ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" debug gg g ", Ġ" sample Size Ġ= Ġ$ sample Size , Ġsample Time Ġ= Ġ$ sample Time , ĠendTime Us Ġ= Ġ$ endTime Us ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Info Ġ= ĠMedia Codec . Buffer Info (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġsample Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġsample Flags ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresentation Time Us Ġ= Ġsample Time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Mux er . write Sample Data ( mux er Track Index , Ġbyte Buffer , Ġbuffer Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadvance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Mux er . stop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Mux er . release () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġèİ·åıĸ éŁ³ é¢ĳ / è§Ĩé¢ĳ è½ ¨ éģĵ index ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmedia Extractor ĠMedia Extractor ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmedia Type ĠĠĠĠ Ġ åªĴ ä½ĵ ç±»åŀĭ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ Ġ@ see ĠMED IA _ TYPE ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ è½ ¨ éģĵ index ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Track Index ( media Extractor : ĠMedia Extractor , Ġmedia Type : ĠMED IA _ TYPE ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( track Index Ġin Ġ 0 Ġuntil Ġmedia Extractor . track Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Extractor . get Track Format ( track Index ). let Ġ{ Ġtrack Format Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmine Type Ġ= Ġif Ġ( media Type Ġ== ĠMED IA _ TYPE . VIDEO ) Ġ{ Ġ" video " Ġ} Ġelse Ġ{ Ġ" audio " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( track Format . getString ( Media Format . KEY _ MIME ). contains ( mine Type )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrack Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ