Android 录制的视频封包flv

public class ReadT implements Runnable {

    private String filename;
    private boolean stop;

    private FileDescriptor fd;
    private BufferedOutputStream bos;
    private String name;
    private byte[] cdata;

    public ReadT(String filename, String name, byte[] cdata) {
        this.filename = filename;
        this.name = name;
        this.cdata = cdata;
    }

    public void setBos(OutputStream os) {
        bos = new BufferedOutputStream(os);
    }

    public ReadT(FileDescriptor fd) {
        this.fd = fd;
    }

    public static byte[] int2Byte(int v) {
        byte[] b = new byte[4];
        b[0] = (byte) ((v >>> 24) & 0xFF);
        b[1] = (byte) ((v >>> 16) & 0xFF);
        b[2] = (byte) ((v >>> 8) & 0xFF);
        b[3] = (byte) ((v >>> 0) & 0xFF);
        return b;
    }

    @Override
    public void run() {
        byte[] tmp = new byte[8192];

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        try {
            FileInputStream fi = null;

            fi = new FileInputStream(filename);

            int skip = 6152;   // android 2.2 是 0
            if(android.os.Build.VERSION.RELEASE.startsWith("2.2"))
                skip = 0;
            int len = 0;
            while (skip > 0) {
                len = fi.read(tmp, 0, skip - len);
                if (len > -1)
                    skip -= len;
                else {
                    Thread.sleep(200);
                }

            }

            bos.write(int2Byte(name.getBytes().length));    // 服务器根据这个值获取name长度
            bos.write(name.getBytes());
            bos.write(int2Byte(cdata.length));    // 服务器根据这个值获取name长度
            bos.write(cdata);


            while (!stop) {

                len = fi.read(tmp);
                if (len < 0) {
                    Thread.sleep(100);
                } else {
                    bos.write(tmp, 0, len);

                }
            }
            bos.flush();
            bos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }


    }



    public void setStop(boolean stop) {
        this.stop = stop;
    }

    private static byte[] hex2byte(String s) throws Exception {
        char c, c1;
        int x;
        if (s.length() % 2 != 0)
            throw new Exception("密钥格式不正确");
        byte[] ret = new byte[s.length() / 2];

        for (int i = 0; i < s.length(); i++) {
            c = s.charAt(i);
            c1 = s.charAt(++i);
            if (!(c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f'))
                throw new Exception("密钥格式不正确");
            if (!(c1 >= '0' && c1 <= '9' || c1 >= 'A' && c1 <= 'F' || c1 >= 'a' && c1 <= 'f'))
                throw new Exception("密钥格式不正确");
            x = Integer.decode("0x" + c + c1).intValue();
            if (x > 127) {
                ret[i / 2] = (byte) (x | 0xffffff00);
            } else {
                ret[i / 2] = (byte) (x);
            }
        }
        return ret;
    }
}

 

 

public class KernelHandler implements Runnable {
    //Local data loopback
    private Socket receiver;

    private boolean connected = true;

    public static Map<String, FlvProperties> FLV_PROPER = new HashMap<String, FlvProperties>();


    private long frameDuration;


    public TopicPublisher publisher;

    //internal video buffer and frame timing
    VideoBuffer videoBuffer = null;
    TimeStampEstimator frameTimeStamp = null;



    public FlvProperties getFlvProperties(byte[] buf) {
        MediaDetect.getHeaderData(buf);
        MediaPackage.buildVideoHeader(MediaDetect.spsData, MediaDetect.spsDataLength, MediaDetect.ppsData, MediaDetect.ppsDataLength);

        return new FlvProperties(MediaPackage.FlvHeader, MediaPackage.videoHeader);
    }

    public static int bytes2int(byte b[]) {
        int s = 0;
        s = ((((b[0] & 0xff) << 8 | (b[1] & 0xff)) << 8) | (b[2] & 0xff)) << 8
                | (b[3] & 0xff);
        return s;
    }

    public KernelHandler(Socket socket, long duration) {

        receiver = socket;
        frameDuration = duration;

        if (videoBuffer == null)
            videoBuffer = new VideoBuffer(128, 64 * 1024);                //about two seconds
        if (frameTimeStamp == null)
            frameTimeStamp = new TimeStampEstimator(frameDuration);


    }


    public void repareStreaming() {

        videoBuffer.reset();
        frameTimeStamp.reset(frameDuration);
    }


    public int getVideoFlag() {
        return videoBuffer.getVideoFlag();
    }

    public long getTimeStamp() {
        return videoBuffer.getTimeStamp();
    }

    public byte[] getReadBuffer() {
        return videoBuffer.getReadBuffer();
    }

    public int getReadLength() {
        return videoBuffer.getReadLength();
    }

    public void releaseRead() {
        videoBuffer.releaseRead();
    }


    public void run() {

        System.out.println("client  connect !");
        InputStream fis;
        final int frame_size = 64 * 1024;
        byte[] buffer = new byte[frame_size];
        int dlen;
        int package_size;

        //Create video byte stream object
        try {
            fis = receiver.getInputStream();
            fillBuffer(buffer, 0, 4, fis);   //  读取取客户端名字参数长度
            int namelength = bytes2int(buffer);
            System.out.println("--client len---" + namelength);
            fillBuffer(buffer, 0, namelength, fis);
            String clientname = new String(buffer, 0, namelength);
            System.out.println(namelength + "--clientname---" + clientname);
            fillBuffer(buffer, 0, 4, fis);   //   读取取H264参数长度
            int headlength = bytes2int(buffer);
            byte[] cdata = new byte[headlength];
            fillBuffer(cdata, 0, headlength, fis);
            //CDATA_PS.put(clientname, cdata);
            FLV_PROPER.put(clientname, getFlvProperties(cdata));
            try {
                publisher = new TopicPublisher(clientname);
                new Thread(new Distribution()).start();
            } catch (Exception e) {
                e.printStackTrace();
            }

            /*
            File targetFLV = new File("/sdcard/temp.flv");
            localFLV = new FileOutputStream(targetFLV);

            localFLV.write(MediaPackage.FlvHeader);
            MediaPackage.buildVideoHeader(MediaDetect.spsData, MediaDetect.spsDataLength, MediaDetect.ppsData, MediaDetect.ppsDataLength );
            localFLV.write(MediaPackage.videoHeader);
            */

        } catch (Exception e1) {
            System.out.println("Create video byte stream object error");
            e1.printStackTrace();
            return;
        }

        //jump header offset
        try {
            dlen = -1;
            dlen = fillBuffer(buffer, 0, 32,fis);
            if (dlen != 32) {
                fis.close();
                return;
            }
            //System.out.println("-------------header:"+dlen);
        } catch (IOException e) {
            System.out.println("header offset error");
            e.printStackTrace();
            return;
        }

        //First frame duration computing
        frameTimeStamp.setFirstFrameTiming();

        while (true) {
            dlen = fillBuffer(buffer, 0, 4, fis);
            //System.out.println("-------------header   size:"+dlen);
            if (dlen != 4) {
                break;
            }

            package_size = (buffer[1] & 0xFF) * 65536 + (buffer[2] & 0xFF) * 256 + (buffer[3] & 0xFF);
            //System.out.println("-------------package_size:"+package_size);
            dlen = fillBuffer(buffer, 4, package_size, fis);
            //System.out.println("-------------dlen = fillBuffer:"+dlen);
            if (dlen != package_size) {

                break;
            }

            while (true) {
                //System.out.println("-------------package buffer list");
                if (videoBuffer.isEmptySpace()) {
                    // System.out.println("-------------videoBuffer add");
                    addNewPackage(buffer, package_size + 4);   //每接收到一个视频包放入缓冲
                    break;
                }

                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }


            }


        }

        try {
            receiver.close();
            connected = false;
            publisher.close();
            System.out.println("connect close");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private void addNewPackage(byte[] buf, int size) {
        videoBuffer.writeFrame(buf, size, frameTimeStamp.getSequenceTimeStamp(), 0);
        frameTimeStamp.update();
    }

    private int fillBuffer(byte[] buf, int offset, int size, InputStream fis) {
        int dlen;
        int buf_len = 0;
        int target_size = size;
        while (target_size > 0) {
            try {
                dlen = fis.read(buf, offset + buf_len, target_size);
            } catch (IOException e) {
                e.printStackTrace();
                return -1;
            }

            if (dlen >= 0) {
                buf_len += dlen;
                target_size -= dlen;
            } else {
                return -1;
            }
        }

        return size;
    }

    //Video Ring Buffer manager
    public class VideoBuffer {
        private class VideoPackage {
            byte[] data;
            int size;
            boolean flag;
            int vflag;
            long ts;
        }

        VideoPackage[] buffers;

        int readIndex = 0;
        int writeIndex = 0;

        public VideoBuffer(int bufferNum, int pkgSize) {
            buffers = new VideoPackage[bufferNum];

            for (int i = 0; i < bufferNum; i++) {
                VideoPackage vPkg = new VideoPackage();
                vPkg.data = new byte[pkgSize];
                buffers[i] = vPkg;
            }
            reset();
        }

        public void reset() {
            for (int i = 0; i < buffers.length; i++) {
                VideoPackage vPkg = buffers[i];
                vPkg.size = 0;
                vPkg.flag = false;
                vPkg.ts = 0;
            }
            readIndex = 0;
            writeIndex = 0;
        }

        private void updateWriteIndex() {
            if (writeIndex < (buffers.length - 1))
                writeIndex++;
            else
                writeIndex = 0;
        }

        public int getVideoFlag() {
            VideoPackage vPkg = buffers[readIndex];
            if (vPkg.flag == true)
                return vPkg.vflag;

            return -1;
        }

        public long getTimeStamp() {
            VideoPackage vPkg = buffers[readIndex];
            if (vPkg.flag == true)
                return vPkg.ts;

            return 0;
        }

        public byte[] getReadBuffer() {
            VideoPackage vPkg = buffers[readIndex];
            if (vPkg.flag == true)
                return vPkg.data;

            return null;
        }

        public int getReadLength() {
            VideoPackage vPkg = buffers[readIndex];
            if (vPkg.flag == true)
                return vPkg.size;

            return -1;
        }

        public void releaseRead() {
            synchronized (this) {
                VideoPackage vPkg = buffers[readIndex];
                if (vPkg.flag == false)
                    return;

                vPkg.flag = false;

                if (readIndex < (buffers.length - 1))
                    readIndex++;
                else
                    readIndex = 0;
            }
        }

        public boolean isEmptySpace() {
            VideoPackage vPkg = buffers[writeIndex];
            if (vPkg.flag == true)
                return false;

            return true;
        }

        public boolean writeFrame(byte[] newData, int size, long ts, int vflag) {

            VideoPackage vPkg = buffers[writeIndex];
            if (vPkg.flag == true)
                return false;

            System.arraycopy(newData, 0, vPkg.data, 0, size);
            vPkg.size = size;
            vPkg.ts = ts;
            vPkg.vflag = vflag;

            synchronized (this) {
                vPkg.flag = true;
                updateWriteIndex();
                return true;
            }
        }

    }


    //Frame smooth timestamp generator
    class TimeStampEstimator {
        final int durationHistoryLength = 2048;
        private long durationHistory[];
        int durationHistoryIndex = 0;
        long durationHistorySum = 0;
        long lastFrameTiming = 0;
        long sequenceDuration = 0;

        public void update() {
            long currentFrameTiming = System.currentTimeMillis();
            long newDuration = currentFrameTiming - lastFrameTiming;
            lastFrameTiming = currentFrameTiming;

            durationHistorySum -= durationHistory[durationHistoryIndex];
            durationHistorySum += newDuration;
            durationHistory[durationHistoryIndex] = newDuration;
            durationHistoryIndex++;
            if (durationHistoryIndex >= durationHistoryLength)
                durationHistoryIndex = 0;

            //毫秒为单位
            sequenceDuration += (int) ((1.0 * durationHistorySum / durationHistoryLength));
        }

        public void setFirstFrameTiming() {
            lastFrameTiming = System.currentTimeMillis() - durationHistorySum / durationHistoryLength;
            sequenceDuration = 0;
        }

        public long getSequenceTimeStamp() {
            return sequenceDuration;
        }

        public void reset(long frameDuration) {
            if (durationHistory == null)
                durationHistory = new long[durationHistoryLength];
            durationHistorySum = 0;
            for (int i = 0; i < durationHistoryLength; i++) {
                durationHistory[i] = frameDuration;            //us
                durationHistorySum += frameDuration;
            }

            lastFrameTiming = 0;
            sequenceDuration = 0;
            durationHistoryIndex = 0;
        }

        public TimeStampEstimator(long frameDuration) {
            reset(frameDuration);
        }
    }


    public class Distribution implements Runnable {

        @Override
        public void run() {
            doStreaming(null);
        }
    }




    public void doStreaming(OutputStream os) {

        // BufferedOutputStream targetOS = new BufferedOutputStream(os, 64);


        byte[] videoBuffer = new byte[1024 * 64];
        int videoLen;

        byte[] tempBuffer;
        int vflag;
        long ts;
        int tempSize;

        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        while (connected) {
//            if (oslist.size() > 0) {
            tempBuffer = getReadBuffer();   //缓冲里读取
            if (tempBuffer != null) {

                vflag = getVideoFlag();
                ts = getTimeStamp();
                tempSize = getReadLength();

                //建立 flv 视频包
                videoLen = MediaPackage.buildFlvPackage(tempBuffer, tempSize, ts, vflag, videoBuffer);

                releaseRead();

                try {
                    publisher.publish(videoBuffer, videoLen);   //视频重新打包,推送进activemq

                } catch (Exception e) {
                    e.printStackTrace();
                    break;
                }

            } else {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
//            }
        }

//        try {
//            targetOS.close();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }


    }
}

 

128 thoughts on “Android 录制的视频封包flv”

  1. I just arrived in Chiang Mai. I wanted to post on my blog, at Blogspot, but all of the headings are now in Thai, not English. Is the problem with my computer, or the hotel’s wi-fi service, or what? How can I get things back to English again?.

  2. I was thinking of starting a blog so I did some research into it on the internet and came across a lot of stuff that talks about legal issues and blogging. I’m not planning on blogging about controversial issues, (my blog would focus on posts about books, movies, culture, theater, music etc, and all material would be solely my own opinions) so what legal issues are involved with blogging? . Should I write a copyright disclaimer or are blog disclaimers actually worthless?.

  3. BittAPI permite: • Verificar su saldo de Bittrex con un solo clic • Realizar sus pedidos de compra / venta • Realizar un seguimiento de sus pedidos
    servicios de google
    El subaru forester rediseГ±ado todavГ­a pone la funciГіn antes que la forma para que todos la disfruten: las predicciones de litecoin del condado de montgomery bitcoin ethereum

  4. When you think of a facial, do you think of massage and layers of moisturizer? Many people do. What they should be thinking about is results. A medical facial
    deep chemical peel before and after
    Fabrication of a White-Light-Emitting Diode by Doping Gallium into ZnO Nanowire on a p-GaN Substrate – The Journal of Physical Chemistry C (ACS Publice Books

  5. I’m looking for out what the most prominent blog sites are when it comes to news as well as sights and mobile phone stuff.

  6. Dubai es una tierra de leche y miel que ofrece oportunidades ilimitadas para cualquiera que haga su mejor trabajo. La ciudad mГЎs poblada de los Emiratos
    social security
    UzbekistГЎn turismo audiencia de seguridad social discapacidad audiencia Obtenga una nueva tarjeta de seguridad social, nГєmero de telГ©fono de seguridad social, cambio de nombre de seguridad social, oficina de administraciГіn de seguridad social, oficinas de seguridad social

  7. A girl from pune when met an accident around five months before with four wheeler, no one expected that she would win the race against life. She met some
    pelvic tilt
    Npo bill fraught with challenges – plp leader the tribune escoliosis sintomas

  8. I am brand-new to website design as I have no prior experience and also understand little HTML. I just would like to know what the most effective software application is to acquire to develop blog sites. I have actually downloaded and install CS5 Layout Costs with Dreamweaver and Photoshop, but I realize this is a little innovative for me and also costly!!!. Does anyone have ideas of software or methods to construct blog sites and also websites quickly and also cost-effective?. MANY THANKS!.

  9. I have been a yahoo individuals for some years now. I am just beginning to make use of the devices which they give, among which being article. I have actually created a blog and wants to understand if my post are being seen by others. If not then does any person recognize exactly how I obtain my blogs posts review.

  10. Where can I find reputable blog sites that are concentrated on or at the very least dig seriously into penis enlargement?

  11. Isnt it strange that these stories are only now surfacing? You folks really showed your hand by remarking on his personality. You dont like his style as a person, so you just thought that youd point out that (you think) hes a jerk.
    Burning tongue and lips

  12. Simply obtained a Blogger account, it functions excellent, yet exactly how do I discover various users blogs I like with search. I bear in mind there is a way, however I am not seeing it now. Thanks for your aid.

  13. Just how do I begin a blog under a pen-name as well as maintain my anonymity. Just how do you then get regular readers?

  14. I’ve been trying to find blogs where blog writer covers penis enhancement or a minimum of looks into the subject of penis enlargement with an independent as well as severe voice. What are the leading blogs of this type?.

  15. Reflexology sessions typically last about 30 to 60 minutes and may incorporate balls, brushes and dowels to achieve the desired effect. There is no regulation of reflexology in the United States, but there is a certification board that requires the therapist have at least 200 hours of education at a recognized institution.
    Reflexology techniques

  16. img_back_hernia. コメントを残す コメントをキャンセル. メールアドレスが公開されることはありません。 * が付いている欄は必須項目です. コメント. 名前 * メールアドレス * サイト. 最近の投
    educational attainment

  17. I’ve had the brownish/pink mucus for a few days; ovulation was last week.. it’s early for a home pregnancy test but I did anyway – couldn’t contain myself! but knew it’d likely be negative and it was. really hoping to have a positive pregnancy test in the next couple of weeks.
    Tea tree oil for yeast infection

  18. I obtained 2 networked blog site setting of a solitary blog site in facebook. I wish to delete of them. Is there any type of means to delete only one networked blog maintaining the one more as it is?.

  19. I like reviewing individual blog sites, Mommy blogs, etc. What is the very best method to find these sorts of blogs online? The most effective method I have is simply adhering to faves people have – mosting likely to one blog owners “faves” after that the following blog owners faves, etc … I have actually tried Google Blogsearch but all that offers me is old newspaper article, and so on. Nothing individual whatsoever … Exactly how do you search for individual blog sites?.

  20. 95 24/7 Support Instant Start IG Power likes Free Video Views Buy Now 500 likes $ 4. https://krootez.com Packages & Prices 100 Real views Delay your views No Password Required Instant Delivery 24/7 Support $1. Instead of manually liking other people’s Instagram videos and photos, we’ve made it fully automatic.

  21. Regardless of which electric toothbrush you use, you will find significantly improved teeth cleaning and oral health. Electric toothbrushes do a far better job of removing plaque and tartar from your teeth and guns. They do a superior job reversing symptoms of gingivitis, as compared to a manual toothbrushes.
    What causes tartar on your teeth

  22. If somebody like Julia Roberts or Natalie Portman had an individual blog site where they published images of their trips or something, would certainly you still take them seriously as actors? Do you believe stars with personal blog sites are much less reliable as well as taken less seriously than those who do not? In addition, would certainly you visit their blog sites to see what they depend on?.

  23. Dry nails and skin and itchiness; Difficulty in swallowing ; Loss of appetite; Changed appearance including a pale complexion, decreased pinkness of the lips and nailbeds, smooth and red tongue
    Yellow flaky nails

  24. careers in collagen and botox injections positive stories The most prominent psychological defense mechanisms including repression denial (and many people want plastic surgery for the same reason) Facelift Raleigh NC clinically known as rhytidectomy is a procedure used to reduce the visible effects of gravity and aging in the middle and lower parts of the face.
    Common botox injection sites

  25. I have read so many articlespostsarticles or reviewscontent regardingconcerningabouton the topic of the blogger lovers butexcepthowever this articlepostpiece of writingparagraph is reallyactuallyin facttrulygenuinely a nicepleasantgoodfastidious articlepostpiece of writingparagraph, keep it up.

  26. Having read this I thought it wasI believed it was veryreallyextremelyrather informativeenlightening. I appreciate you taking the timefinding the timespending some time and effortand energy to put this articlethis short articlethis informative articlethis informationthis content together. I once again find myselfmyself personally spending way too mucha significant amount ofa lot of time both reading and commentingleaving commentsposting comments. But so what, it was still worth itworthwhile!

  27. HiWhat’s upHi thereHello to every body, it’s my first visitgo to seepay a visitpay a quick visit of this blogweblogwebpagewebsiteweb site; this blogweblogwebpagewebsiteweb site containsconsists ofincludescarries awesomeremarkableamazing and reallyactuallyin facttrulygenuinely goodfineexcellent stuffinformationdatamaterial fordesigned forin favor ofin support of readersvisitors.

  28. I’veI have been exploring for a little bita littlea bit for any high-qualityhigh quality articles or blogweblog posts in thison this kind ofsort of spaceareahouse . Exploring in Yahoo I at lasteventuallyfinallyultimately stumbled upon this siteweb sitewebsite. ReadingStudying this infoinformation So i’mi am satisfiedgladhappy to expressshowexhibitconvey that I haveI’ve a veryan incredibly just rightgoodexcellent uncanny feeling I found outcame upondiscovered exactlyjust what I needed. I so muchsuch a lotmost without a doubtno doubtundoubtedlysurelycertainlyfor suredefinitelyunquestionablyindisputablyindubitably will make certainsure to don?tdo not put out of your mindforgetfail to rememberoverlookdisregardomit this siteweb sitewebsite and giveand provides it a looka glance on a constanta continuinga relentless basisregularly.

  29. When IAfter I originallyinitially commentedleft a comment I seem to haveappear to have clickedclicked on the -Notify me when new comments are added- checkbox and nowand from now on each time aevery time awhenever a comment is added I getI recieveI receive four4 emails with the samewith the exact same comment. Is therePerhaps there isThere has to be a waya meansan easy method you canyou are able to remove me from that service? ThanksMany thanksThank youCheersThanks a lotAppreciate itKudos!

  30. You reallyactually make it seemappear so easyreally easy with yourtogether with youralong with your presentation howeverbut I in findingfindto find this topicmatter to be reallyactually somethingone thing whichthat I thinkI feelI believe I wouldI mightI’d neverby no means understand. It kind of feelsIt sort of feelsIt seems too complicatedcomplex and veryextremely widebroadextensivelargevasthuge for me. I amI’m taking a looklookinghaving a look forwardahead for youron yourin yourto your nextsubsequent postsubmitpublishput up, I willI’ll try toattempt to get the hangholdgraspclingdangle of it!

  31. I am changing holding companies as well as wish to relocate my WordPress Blogs over. Does anybody understand of a very easy means to accomplish this?.

  32. NiceExcellentGreat post. I used to beI was checking continuouslyconstantly this blogweblog and I amI’m inspiredimpressed! VeryExtremely usefulhelpful informationinfo speciallyparticularlyspecifically the finallastultimateremainingclosing phasepartsection 🙂 I take care ofcare fordeal withmaintainhandle such infoinformation a lotmuch. I used to beI was seekinglooking for this particularcertain infoinformation for a long timevery longlengthy time. Thank youThanks and good luckbest of luck.

  33. I’m reallytruly enjoying the design and layout of your blogsitewebsite. It’s a very easy on the eyes which makes it much more enjoyablepleasant for me to come here and visit more often. Did you hire out a designerdeveloper to create your theme? ExcellentGreatFantasticExceptionalOutstandingSuperb work!

  34. GreetingsHiyaHey thereHeyGood dayHowdyHi thereHello thereHiHello! I know this is kinda off topic however ,neverthelesshoweverbut I’d figured I’d ask. Would you be interested in exchangingtrading links or maybe guest writingauthoring a blog articlepost or vice-versa? My websitesiteblog goes overdiscussesaddressescovers a lot of the same subjectstopics as yours and I feelbelievethink we could greatly benefit from each other. If you happen to beyou might beyou areyou’re interested feel free to sendshoot me an e-mailemail. I look forward to hearing from you! AwesomeTerrificSuperbWonderfulFantasticExcellentGreat blog by the way!

  35. HelloHiHello thereHi thereHowdyGood dayHey there! I justI simply would like towant towish to give you aoffer you a hugebig thumbs up for thefor your greatexcellent infoinformation you haveyou’ve gotyou have got hereright here on this post. I will beI’ll beI am coming back toreturning to your blogyour siteyour websiteyour web site for more soon.

  36. HiWhat’s upHi thereHello friendsmatescolleagues, how is everythingallthe whole thing, and what you wantdesirewish forwould like to say regardingconcerningabouton the topic of this articlepostpiece of writingparagraph, in my view its reallyactuallyin facttrulygenuinely awesomeremarkableamazing fordesigned forin favor ofin support of me.

  37. HiWhat’s upHi thereHello to allevery one, the contents presentexisting at this websiteweb sitesiteweb page are reallyactuallyin facttrulygenuinely awesomeremarkableamazing for people experienceknowledge, well, keep up the nicegood work fellows.

  38. The graph presents the evolution of bitcoin price index from June 2017 to June 2019. The bitcoin price index is an average of bitcoin prices across leading global exchanges.
    litecoin usd

  39. No matter ifWhen some one searches for his requirednecessaryessentialvital thing, sothustherefore he/she wantsneedsdesireswishes to be available that in detail, sothustherefore that thing is maintained over here.

  40. For latestnewestmost recentmost up-to-datehottest newsinformation you have to visitgo to seepay a visitpay a quick visit internetwebworld wide webworld-wide-webthe web and on internetwebworld-wide-webthe web I found this websiteweb sitesiteweb page as a bestmost excellentfinest websiteweb sitesiteweb page for latestnewestmost recentmost up-to-datehottest updates.

  41. GreateExcellent articlepiecespost. Keep writingposting such kind of informationinfo on your blogpagesite. Im really impressed by your blogyour siteit.

  42. I haveI’ve been surfingbrowsing onlineon-line more thangreater than three3 hours these daysnowadaystodaylatelyas of late, yetbut I neverby no means founddiscovered any interestingfascinatingattention-grabbing article like yours. It’sIt is lovelyprettybeautiful worthvalueprice enoughsufficient for me. In my opinionPersonallyIn my view, if all webmasterssite ownerswebsite ownersweb owners and bloggers made just rightgoodexcellent contentcontent material as you didyou probably did, the internetnetweb will beshall bemight bewill probably becan bewill likely be much morea lot more usefulhelpful than ever before.

  43. HelpfulUsefulValuable infoinformation. FortunateLucky me I foundI discovered your siteweb sitewebsite accidentallyby chanceby accidentunintentionally, and I amI’m surprisedstunnedshocked why this twist of fatecoincidenceaccident did notdidn’t came abouthappenedtook place in advanceearlier! I bookmarked it.

  44. I would like toI mustI’d like toI have to thank you for the efforts you haveyou’ve put in writing thispenning this blogwebsitesite. I am hopingI’m hopingI really hope to seeto viewto check out the same high-grade blog postscontent from youby you in the futurelater on as well. In factIn truth, your creative writing abilities has inspiredmotivatedencouraged me to get my ownmy very ownmy own, personal blogwebsitesite now 😉

  45. Does your sitewebsiteblog have a contact page? I’m having a tough timeproblemstrouble locating it but, I’d like to sendshoot you an e-mailemail. I’ve got some creative ideasrecommendationssuggestionsideas for your blog you might be interested in hearing. Either way, great sitewebsiteblog and I look forward to seeing it developimproveexpandgrow over time.

  46. It’s very easysimpletrouble-freestraightforwardeffortless to find out any topicmatter on netweb as compared to bookstextbooks, as I found this articlepostpiece of writingparagraph at this websiteweb sitesiteweb page.

  47. Can you tell us more about thisI’d like to find out moreDo you have any video of that? I’d carelikelovewant to find out more detailssome additional information.

  48. LONDON, June 13, 2019 /PRNewswire/ — Cryptoindex, the leading crypto index, announced that 500,000 traditional traders using Reuters and Bloomberg terminals will be able to access information on
    cryptocat

  49. MarvelousWonderfulExcellentFabulousSuperb, what a blogweblogwebpagewebsiteweb site it is! This blogweblogwebpagewebsiteweb site providesgivespresents usefulhelpfulvaluable datainformationfacts to us, keep it up.

  50. HelloHeyHi there, You haveYou’ve performeddone a greatan excellenta fantastican incredible job. I willI’ll definitelycertainly digg it and for my partpersonallyindividuallyin my opinionin my view recommendsuggest to my friends. I amI’m sureconfident they willthey’ll be benefited from this siteweb sitewebsite.

  51. I would like toI mustI’d like toI have to thank you for the efforts you haveyou’ve put in writing thispenning this blogwebsitesite. I am hopingI’m hopingI really hope to seeto viewto check out the same high-grade blog postscontent from youby you in the futurelater on as well. In factIn truth, your creative writing abilities has inspiredmotivatedencouraged me to get my ownmy very ownmy own, personal blogwebsitesite now 😉

  52. HiWhat’s upHi thereHello everyone, it’s my first visitgo to seepay a visitpay a quick visit at this websiteweb sitesiteweb page, and articlepostpiece of writingparagraph is reallyactuallyin facttrulygenuinely fruitful fordesigned forin favor ofin support of me, keep up posting suchthesethese types of articlespostsarticles or reviewscontent.

  53. My relativesfamily membersfamily alwaysall the timeevery time say that I am wastingkilling my time here at netweb, butexcepthowever I know I am getting experienceknowledgefamiliarityknow-how everydaydailyevery dayall the time by reading suchthes nicepleasantgoodfastidious articlespostsarticles or reviewscontent.

  54. My brother suggestedrecommended I would possiblymightmay like this blogwebsiteweb site. He used to bewaswas once totallyentirely right. This postsubmitpublishput up actuallytruly made my day. You cann’tcan not believeconsiderimagine justsimply how so muchmucha lot time I had spent for this informationinfo! Thank youThanks!

  55. Thank youThanks for any otheranothersome otherevery other greatwonderfulfantasticmagnificentexcellent articlepost. WhereThe place else may justmaycould anyoneanybody get that kind oftype of informationinfo in such a perfectan ideal waymethodmeansapproachmanner of writing? I haveI’ve a presentation nextsubsequent week, and I amI’m at theon the look forsearch for such informationinfo.

  56. What a stuffinformationdatamaterial of un-ambiguity and preserveness of preciousvaluable experienceknowledgefamiliarityknow-how regardingconcerningabouton the topic of unexpectedunpredicted feelingsemotions.

  57. NiceExcellentGreat post. I used to beI was checking continuouslyconstantly this blogweblog and I amI’m inspiredimpressed! VeryExtremely usefulhelpful informationinfo speciallyparticularlyspecifically the finallastultimateremainingclosing phasepartsection 🙂 I take care ofcare fordeal withmaintainhandle such infoinformation a lotmuch. I used to beI was seekinglooking for this particularcertain infoinformation for a long timevery longlengthy time. Thank youThanks and good luckbest of luck.

  58. HeyHowdyHi thereHeyaHey thereHiHello! I’m at work browsingsurfing around your blog from my new iphoneiphone 4iphone 3gsapple iphone! Just wanted to say I love readingreading through your blog and look forward to all your posts! Keep upCarry on the excellentgreatfantasticoutstandingsuperb work!

  59. There isThere’s definatelycertainly a lot toa great deal to know aboutlearn aboutfind out about this subjecttopicissue. I likeI loveI really like all theall of the points you madeyou’ve madeyou have made.

  60. HiWhat’s upHi thereHello, alwaysfor all timeall the timeconstantlyevery time i used to check blogweblogwebpagewebsiteweb site posts here earlyin the early hours in the morningdawnbreak of daydaylight, becausesinceasfor the reason that i likeloveenjoy to learngain knowledge offind out more and more.

  61. HelloGreetingsHey thereHeyGood dayHowdyHi thereHello thereHi! This is my first visit to your blog! We are a groupcollectionteam of volunteers and starting a new initiativeproject in a community in the same niche. Your blog provided us valuableusefulbeneficial information to work on. You have done a marvellousoutstandingextraordinarywonderful job!

  62. HelpfulUsefulValuable infoinformation. FortunateLucky me I foundI discovered your siteweb sitewebsite accidentallyby chanceby accidentunintentionally, and I amI’m surprisedstunnedshocked why this twist of fatecoincidenceaccident did notdidn’t came abouthappenedtook place in advanceearlier! I bookmarked it.

  63. I’m impressedamazed, I must sayI have to admit. RarelySeldom do I encountercome across a blog that’s bothequallyboth equally educative and entertainingengaginginterestingamusing, and let me tell youwithout a doubt, you haveyou’ve hit the nail on the head. The issue isThe problem is something thatsomething whichsomethingan issue that not enoughtoo few people arefolks aremen and women are speaking intelligently about. I amI’mNow i’m very happy that II stumbled acrossfoundcame across this in myduring my search forhunt for something relating to thisconcerning thisregarding this.

  64. I am requesting my mother. She doesn’t necessarily intend to earn money off them, her objective is to utilize her blog (once prominent) and use it as referrals to potentially assist her get a news article. She has a title for one called “Solution to Life’s Issues”. Where can she publish blogs as well as they become prominent? She uploaded it already on WordPress however there are 3 million individuals uploading blogs hers obtains lost in the mix. Any tips?.

  65. I found that site very usefull and this survey is very cirious, I ‘ ve never seen a blog that demand a survey for this actions, very curious

  66. No doubt this is an excellent post I got a lot of knowledge after reading good luck. Theme of blog is excellent there is almost everything to read, Brilliant post.

  67. This is a smart blog. I mean it. You have so much knowledge about this issue, and so much passion. You also know how to make people rally behind it, obviously from the responses.

  68. This is a smart blog. I mean it. You have so much knowledge about this issue, and so much passion. You also know how to make people rally behind it, obviously from the responses.

  69. (It has been simply incredibly generous with you to provide openly what exactly many individuals would’ve marketed for an ebook to end up making some cash for their end, primarily given that you could have tried it in the event you wanted.

  70. No doubt this is an excellent post I got a lot of knowledge after reading good luck. Theme of blog is excellent there is almost everything to read, Brilliant post.

  71. (I wish to show thanks to you just for bailing me out of this particular trouble.As a result of checking through the net and meeting techniques that were not productive, I thought my life was done.

  72. (Thanks a lot very much for the high quality and results-oriented help. I won’t think twice to endorse your blog post to anybody who wants and needs support about this area.

  73. (that I started to visit your website after finding a very interesting post about some info that I was looking for. I have to admit that after receiving some of these great post on my email and reading through them, I have found on this blog a huge source of valuable information that helps me climb to a higher level everyday.)

  74. No doubt this is an excellent post I got a lot of knowledge after reading good luck. Theme of blog is excellent there is almost everything to read, Brilliant post.

  75. Thank you for such a well written article. It’s full of insightful information and entertaining descriptions. Your point of view is the best among many.

  76. (that I started to visit your website after finding a very interesting post about some info that I was looking for. I have to admit that after receiving some of these great post on my email and reading through them, I have found on this blog a huge source of valuable information that helps me climb to a higher level everyday.)

  77. No doubt this is an excellent post I got a lot of knowledge after reading good luck. Theme of blog is excellent there is almost everything to read, Brilliant post.

  78. (Your good knowledge and kindness in playing with all the pieces were very useful. I don’t know what I would have done if I had not encountered such a step like this.

  79. No doubt this is an excellent post I got a lot of knowledge after reading good luck. Theme of blog is excellent there is almost everything to read, Brilliant post.

  80. Thanks for sharing the post.. parents are worlds best person in each lives of individual..they need or must succeed to sustain needs of the family.

  81. HiWhat’s upHi thereHello to allevery oneevery single one, it’s reallyactuallyin facttrulygenuinely a nicepleasantgoodfastidious for me to visitgo to seepay a visitpay a quick visit this websiteweb sitesiteweb page, it containsconsists ofincludes valuablepreciouspricelessimportanthelpfuluseful Information.

  82. Right nowCurrentlyAt this time it seemssoundslooksappears like BlogEngineMovable TypeDrupalExpression EngineWordpress is the besttoppreferred blogging platform out thereavailable right now. (from what I’ve read) Is that what you’reyou are using on your blog?

  83. I alwaysconstantlyevery time spent my half an hour to read this blogweblogwebpagewebsiteweb site’s articlespostsarticles or reviewscontent everydaydailyevery dayall the time along with a cupmug of coffee.

  84. Having read this I thought it wasI believed it was veryreallyextremelyrather informativeenlightening. I appreciate you taking the timefinding the timespending some time and effortand energy to put this articlethis short articlethis informative articlethis informationthis content together. I once again find myselfmyself personally spending way too mucha significant amount ofa lot of time both reading and commentingleaving commentsposting comments. But so what, it was still worth itworthwhile!

  85. ReallyActuallyIn factTrulyGenuinely no matter ifwhen someone doesn’t understandknowbe aware of thenafter thatafterward its up to other userspeopleviewersvisitors that they will helpassist, so here it happensoccurstakes place.

  86. I’m wanting to take a look at blogs having songs I such as, however filtering through all the removed, outdated and crap blogs is an inconvenience. I recognize there are hundreds of blog sites, is there an excellent resource to look for the preferred ones?.

  87. I simply want to mention I am beginner to blogging and site-building and really enjoyed this page. Most likely I’m want to bookmark your site . You amazingly have exceptional articles. Kudos for sharing with us your web page.

  88. I enjoyI likeI loveI quite likeI really like readingreading throughlooking through a postan article that will makethat can make peoplemen and women think. Also, thanks forthank you formany thanks for allowingallowing forpermitting me to comment!

  89. I like the valuablehelpful informationinfo you provide in your articles. I willI’ll bookmark your weblogblog and check again here frequentlyregularly. I amI’m quite certainsure I willI’ll learn lots ofmanya lot ofplenty ofmany new stuff right here! Good luckBest of luck for the next!

  90. HeyHowdyHi thereHeyaHey thereHiHello just wanted to give you a quickbrief heads up and let you know a few of the imagespictures aren’t loading correctlyproperly. I’m not sure why but I think its a linking issue. I’ve tried it in two different browsersinternet browsersweb browsers and both show the same resultsoutcome.

  91. of courseobviouslynaturallycertainly like your web-sitewebsiteweb site howeverbut you need tohave to testchecktake a look at the spelling on quite a fewseveral of your posts. A numberSeveralMany of them are rife with spelling problemsissues and I in findingfindto find it very bothersometroublesome to tellto inform the truththe reality on the other handhoweverthen againnevertheless I willI’ll certainlysurelydefinitely come backagain again.

  92. I simply want to say I’m beginner to blogging and certainly liked you’re web site. Most likely I’m likely to bookmark your site . You absolutely have fabulous articles. Bless you for sharing your website page.

  93. I amI’m extremelyreally inspiredimpressed with yourtogether with youralong with your writing talentsskillsabilities and alsoas smartlywellneatly as with the layoutformatstructure for youron yourin yourto your blogweblog. Is thisIs that this a paid subjecttopicsubject mattertheme or did you customizemodify it yourselfyour self? Either wayAnyway staykeep up the niceexcellent qualityhigh quality writing, it’sit is rareuncommon to peerto seeto look a nicegreat blogweblog like this one these daysnowadaystoday..

  94. This articlepostpiece of writingparagraph providesoffersgivespresents clear idea fordesigned forin favor ofin support of the new userspeopleviewersvisitors of blogging, that reallyactuallyin facttrulygenuinely how to do bloggingblogging and site-buildingrunning a blog.

  95. I was recommendedsuggested this blogwebsiteweb site by my cousin. I amI’m not sure whether this post is written by him as no onenobody else know such detailed about my problemdifficultytrouble. You areYou’re amazingwonderfulincredible! Thanks!

  96. My coderprogrammerdeveloper is trying to persuadeconvince me to move to .net from PHP. I have always disliked the idea because of the expensescosts. But he’s tryiong none the less. I’ve been using Movable-typeWordPress on a number ofa variety ofnumerousseveralvarious websites for about a year and am nervousanxiousworriedconcerned about switching to another platform. I have heard fantasticvery goodexcellentgreatgood things about blogengine.net. Is there a way I can transferimport all my wordpress contentposts into it? Any kind ofAny help would be reallygreatly appreciated!

发表评论

电子邮件地址不会被公开。 必填项已用*标注