當前位置: 首頁>>代碼示例>>C#>>正文


C# Atom.Find方法代碼示例

本文整理匯總了C#中Atom.Find方法的典型用法代碼示例。如果您正苦於以下問題:C# Atom.Find方法的具體用法?C# Atom.Find怎麽用?C# Atom.Find使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在Atom的用法示例。


在下文中一共展示了Atom.Find方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。

示例1: Mp4Hash

        public static void Mp4Hash(string inpath, string outpath)
        {
            FileInfo f = new FileInfo(inpath);
            Stream i = File.OpenRead(inpath);
            BinaryReader reader = new BinaryReader(i);
            Stream o = File.Open(outpath,FileMode.Create,FileAccess.Write);
            BinaryWriter writer = new BinaryWriter(o);
            Atom atm =new Atom();
            atm.Size = f.Length+8;
            atm.Read(reader);
            atm.RemoveAll(d => d.Name == "free");
            Atom mdat = atm.Find(d => d.Name == "mdat");
            long original = mdat.Position;
            atm.Remove(mdat);
            atm.Add(mdat);
            Atom fnd= atm.Find(d => d.Name == "moov");
            fnd.RemoveAll(d => d.Name == "udta");
            fnd.ReCalcSize();
            atm.ReCalcPosition();
            //Relocate
            foreach (Atom a in fnd)
            {
                a.ReadData(reader);
                byte[] nm=new byte[4];
                byte[] nm2 = new byte[8];
                for (int x = 0; x < a.Size - 16;x++)
                {
                    Array.Copy(a.Data,x,nm,0,4);
                    string name = Encoding.ASCII.GetString(nm);
                    if ((name == "stco") && (x-4>=0))
                    {
                        Array.Copy(a.Data,x-4,nm,0,4);
                        Array.Reverse(nm);
                        uint size = BitConverter.ToUInt32(nm, 0);
                        if (size + x + 4 > a.Size)
                            continue;
                        Array.Copy(a.Data,x+8,nm, 0,4);
                        Array.Reverse(nm);
                        uint cnt = BitConverter.ToUInt32(nm, 0);
                        if (x+12+cnt*4>a.Size)
                            continue;
                        for (int j = 0; j < cnt; j++)
                        {
                            Array.Copy(a.Data,x+12+j*4,nm,0,4);
                            Array.Reverse(nm);
                            int offset = BitConverter.ToInt32(nm, 0);
                            offset += (int)(mdat.ExpectedPosition-original);
                            byte[] ne = BitConverter.GetBytes(offset);
                            Array.Reverse(ne);
                            Array.Copy(ne,0,a.Data,x+12+j*4,4);
                        }
                    }
                    else if ((name == "co64") && (x - 4 >= 0))
                    {
                        Array.Copy(a.Data, x - 4, nm, 0, 4);
                        Array.Reverse(nm);
                        uint size = BitConverter.ToUInt32(nm, 0);
                        if (size + x + 4 > a.Size)
                            continue;
                        Array.Copy(a.Data, x + 8, nm, 0, 4);
                        Array.Reverse(nm);
                        uint cnt = BitConverter.ToUInt32(nm, 0);
                        if (x + 12 + cnt * 8 > a.Size)
                            continue;
                        for (int j = 0; j < cnt; j++)
                        {
                            Array.Copy(a.Data, x + 12 + j * 8, nm2, 0, 8);
                            Array.Reverse(nm2);
                            long offset = BitConverter.ToInt64(nm2, 0);
                            offset += (long)(mdat.ExpectedPosition - original);
                            byte[] ne = BitConverter.GetBytes(offset);
                            Array.Reverse(ne);
                            Array.Copy(ne, 0, a.Data, x + 12 + j * 8, 8);
                        }

                    }
                }
            }

            foreach (Atom a in atm)
                a.Write(writer);
            writer.Close();
            reader.Close();
            o.Close();
            i.Close();
        }
開發者ID:maxpiva,項目名稱:AnimeOfflineDownloader,代碼行數:86,代碼來源:Mp4.cs


注:本文中的Atom.Find方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。