This is my blog: vuvanson.tk

Go to Blogger Vi-et Spaces.

This is my blog: sonblog.tk

Go to Blogger Vi-et Spaces.

This is my blog: vi-et.tk

Go to Blogger Vi-et Spaces.

This is my facebook: https://www.facebook.com/vusonbk

Go to Facebook Blogger Vi-et Spaces.

This is my facebook page: https://www.facebook.com/ViEtSpaces

Go to Facebook Page Blogger Vi-et Spaces.

Thứ Ba, 18 tháng 2, 2020

Luyện Tập " Vẫy Tay Đạt Ma Dịch Cân Kinh"

Bài 1. Tác dụng kì diệu sau 20 năm vẩy tay

Đầu năm 1991, khi về nghỉ hưu, mới tròn 60 tuổi tôi đã có nhiều bệnh mạn tính: Huyết áp cao, viêm đại tràng, viêm họng hạt, trĩ nội…
Huyết áp có khi lên tới 160/100. Trĩ gây chảy máu liên tục có chu kì kéo dài cả nửa tháng. Viêm đại tràng luôn làm bụng quặn đau, táo bón rất khó chịu. Còn viêm họng hạt cứ hai ba tháng lại bị một lần, gây sốt nhẹ, ho khan kéo dài cả tuần lễ, uống kháng sinh, nhai lá “sống đời”, lá dẻ quạt, chanh muối… cũng chỉ đỡ một phần nào…
Sau Tết Tân Mùi đầu năm 1991, có ông bạn thân cùng quân ngũ thời chống Pháp khuyên tôi: “Ông nên tập vẩy tay đi, rất tốt. Chữa được nhiều bệnh thông thường, thậm chí còn phòng tránh được cả ung thư”. Mới đầu, tôi không tin, sau lại nghĩ mình cứ thử làm xem sao. Thế là bắt đầu nhập cuộc. Vừa tập theo hướng dẫn của bạn, tôi vừa tìm đọc các tài liệu của Trung Quốc. Qua đó, biết đây là phương pháp “Dịch cân kinh” một cách tập luyện đã có từ hơn 2.000 năm về trước của các võ sư, võ sinh Tây Tạng để rèn luyện sức khỏe trên đường hành hương kiếm sống qua sa mạc vùng Tây Á khắc nghiệt, chống chọi với bệnh tật và bọn “lục lâm thảo khấu” cướp đường.

Thứ Ba, 11 tháng 2, 2020

Sự khác nhau giữa parameter và argument


Chắc hẳn nhiều người vẫn còn boăn khoăn về sự khác nhau giữa hai thuật ngữ này khi đọc một số ebook và tham khảo tài liệu. Và sau đây là sự khác biệt giữa hai thuật ngữ này.
  1. Parameter (Tham số)Đây là những gì chúng ta gọi khi định nghĩa một hàm. Parameter sẽ đại diện cho một giá trị mà hàm của bạn sẽ nhận được khi được gọi. Ví dụ sau khai báo hàm có 2 tham số là x và y:
  2. int Add(int x, int y)
    {
        return (x+y);
    }
  3. Argument (Đối số)
    Đây là đại diện cho giá trị truyền cho parameter khi chúng ta thực hiện lời gọi hàm. Mỗi argument sẽ tương ứng với một parameter khi khai báo. Ví dụ sau thực hiện lời gọi hàm Add bên trên và truyền vào hai đối số là 3 và 5:
  4. int Sum = Add(3, 5);

Parameter là tên biến được khai báo trong phần định nghĩa hàm.

Argument là giá trị biến thực được truyền vào khi gọi hàm.

Trong C++
#include "stdafx.h"
#include <iostream>
 
int Sum(int a /*đây là Parameter*/, int b /*đây là Parameter*/)
{
    return a + b;
}
 
int main()
{
    std::cout << "Sum Program:" << "\n" << Sum(5 /*đây là Argument*/ ,10 /*cái này cũng là Argument*/) << "\n";
    system("pause" /*và cái này cũng là Argument*/);
    return 0;
}

Còn đây là C#
namespace ConsoleApplicationCS
{
    class Program
    {
        static void Main(string[] args /*đây là Parameter*/)
        {
            System.Console.WriteLine("Sum Program:" /*còn đây là Argument*/);
            System.Console.WriteLine(Sum(5, 10 /*đây cũng là Argument*/));
            System.Console.ReadLine();
        }
 
        static int Sum (int a, int b /*cả 2 đều là Parameter*/)
        {
            return a + b;
        }
    }
}

Nguồn bài viết: Sưu tầm

Thứ Sáu, 7 tháng 2, 2020

Cấu trúc của MPD MPEG-DASH

MPEG-DASH Media Presentation Description (MPD) là dạng XML document chứa thông tin về các phân đoạn media, các mối quan hệ và thông tin cần thiết để chọn giữa chúng và các siêu dữ liệu khác có thể được client cần.
Bài post này mô tả các phần quan trọng nhất của MPD, bắt đầu từ top-level (Period) và đến bottom level (Segment).

Period

Period nằm trong top-level của MPD cấp cao nhất, mô tả phần nội dung với thời gian bắt đầu và thời lượng là bao nhiêu. Period có thể được sử dụng cho scence (cảnh) hoặc chapter (chương) để tách biệt phần quảng cáo khỏi nội dung chương trình.

Adaptation Sets

Adaptation Set chứa luồng media hoặc tập hợp các luồng media. Trong trường hợp đơn giản nhất, một Period có thể có một Adaptation Set chứa tất cả nội dung âm thanh và hình ảnh, nhưng để giảm băng thông, mỗi luồng có thể được chia vào trong một Adaptation khác nhau. Một trường hợp phổ biến là một bộ Adaptive Video và nhiều bộ Adaptive Audio (giống như option có nhiều ngôn ngữ). Adaptive có thể chứa phụ đề (subtitle) hoặc metadata tùy biến.
Adaptation Set thường được lựa chọn bởi người dùng hoặc bởi các tác nhân người dùng (trình duyệt web hoặc TV) bằng cách sử dụng tùy chọn của người dùng (như ngôn ngữ hoặc nhu cầu truy cập của họ).

Representations

Representation cho phép bộ Adaptive chứa cùng một nội dung được mã hóa theo các cách khác nhau. Trong hầu hết các trường hợp, Representation sẽ được cung cấp ở screen size và bandwidth. Điều này cho phép client yêu cầu nội dung chất lượng cao nhất mà có thể phát mà không cần chờ buffer, không lãng phí băng thông với các pixel không cần thiết (ví dụ TV 720p không cần nội dung 1080p). Representation cũng có thể được mã hóa bằng các codec khác nhau, cho phép hỗ trợ client với các codec được hỗ trợ khác nhau (như xảy ra trong trình duyệt, với một số hỗ trợ MPEG-4 AVC / h.264 và một số VP8 hỗ trợ) hoặc để cung cấp Representation chất lượng cao hơn cho các client mới hơn trong khi vẫn hỗ trợ client cũ (ví dụ cung cấp cả h.264 và h.265). Nhiều codec cũng có thể hữu ích trên các thiết bị chạy bằng pin, Representation thường được chọn tự động, nhưng một số player cho phép người dùng ghi đè các option (đặc biệt là độ phân giải). Người dùng có thể chọn đưa ra option Representation của riêng mình nếu họ không muốn lãng phí băng thông trong một video (có thể họ chỉ quan tâm đến âm thanh) hoặc nếu họ sẵn sàng dừng video để đổi lại chất lượng chuẩn high quality.

SubRepresentation

SubRepresentation chứa thông tin chỉ áp dụng cho một luồng phương tiện trong Representation. Ví dụ: nếu một Representations có chứa cả âm thanh và video, thì sẽ có một SubRepftimeation để cung cấp thêm thông tin bổ sung là chỉ áp dụng cho âm thanh. Thông tin bổ sung này có thể là các codec cụ thể, tỷ lệ lấy mẫu (sampling rate), nhúng các subtitle (embeded subtitle). SubRepftimeations cũng cung cấp thông tin cần thiết để trích xuất một luồng từ một bộ chứa đa kênh hoặc để trích xuất một phiên bản chất lượng thấp hơn của luồng (như chỉ các I-frame, rất hữu ích trong chế độ chuyển tiếp nhanh – fast-forward mode).

Media Segment

Media Segment là các file media mà client DASH phát, nói chung bằng cách phát chúng qua lại nếu như chúng là cùng một file (mặc dù có thể phức tạp hơn khi chuyển đổi giữa các Representation). Các định dạng sẽ được đề cập chi tiết hơn bởi bài đăng của tôi trên hồ sơ, nhưng hai bộ chứa được mô tả bởi MPEG là Định dạng tệp phương tiện cơ sở ISO - ISO Base Media File Format (ISOBMFF), tương tự như định dạng bộ chứa MPEG-4 và MPEG-TS. WebM trong DASH được mô tả trong một tài liệu trên wiki của dự án WebM .
Location của media segment có thể được chỉ định bằng BaseURL cho single-segment của Representation, mộ danh sách các phân đoạn (SegmentList) hoặc mẫu segment (SegmentTemplate). Thông tin áp dụng cho tất cả các segment có thể được tìm thấy trong SegmentBase. Thời gian bắt đầu và thời lượng bắt đầu một segment có thể được mô tả bằng SegmentTimeline (đặc biệt quan trọng đối với phát trực tiếp, do đó client có thể nhanh chóng xác định phân đoạn mới nhất). Thông tin này cũng có thể xuất hiện ở các mức cao hơn trong MPD, trong trường hợp đó thông tin cung cấp là mặc định trừ khi bị ghi đè bởi thông tin thấp hơn trong hệ thống phân cấp XML. Điều này đặc biệt hữu ích với SegmentTemplate.
Các phân đoạn có thể ở các tệp riêng biệt (phổ biến cho phát trực tiếp) hoặc chúng có thể là các dải byte trong một tệp duy nhất (phổ biến cho tĩnh / "on-demand").

Index Segments

Index Segment (Phân đoạn chỉ mục) có hai loại: một Phân đoạn chỉ mục Representation cho toàn bộ Representation hoặc Phân đoạn chỉ mục duy nhất cho mỗi Media Segment. Phân đoạn chỉ mục Representation luôn là một file riêng biệt, nhưng Index Segment đơn có thể là một phạm vi byte trong cùng một file với Media Sengment.
Index Segment chứa các box 'sidx' của ISOBMFF, với thông tin về thời lượng của Media Segment (theo cả byte và thời gian), các loại điểm truy cập luồng và thông tin gửi tùy chọn trong các hộp 'ssix' (cùng thông tin, nhưng trong các phân đoạn). Trong trường hợp Representation Index Segment, các hộp 'sidx' nối tiếp nhau, nhưng chúng được đặt trước một 'sidx' cho chính phân đoạn chỉ mục.

Thí dụ

Trước khi hoàn thiện, mình sẽ đưa ra một ví dụ và có nhận xét (chú thích) về MPD, để cho các bạn biết MPEG-DASH hoạt động như thế nào.
<?xml version="1.0"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:full:2011" minBufferTime="PT1.5S">
<!— Phần quảng cáo -->
<Period duration="PT30S">
<BaseURL>ad/</BaseURL>
<!-- Toàn bộ nội dung của Adaptation Set -->
<AdaptationSet mimeType="video/mp2t">
<!-- 720p Representation at 3.2 Mbps -->
<Representation id="720p" bandwidth="3200000" width="1280" height="720">
<!-- Chỉ có một segment, vì quảng cáo chỉ dài có 30s -->
<BaseURL>720p.ts</BaseURL>
<SegmentBase>
<RepresentationIndex sourceURL="720p.sidx"/>
</SegmentBase>
</Representation>
<!-- 1080p Representation at 6.8 Mbps -->
<Representation id="1080p" bandwidth="6800000" width="1920" height="1080">
<BaseURL>1080p.ts</BaseURL>
<SegmentBase>
<RepresentationIndex sourceURL="1080p.sidx"/>
</SegmentBase>
</Representation>
</AdaptationSet>
</Period>
<!-- Một nội dung thông thường -->
<Period duration="PT5M">
<BaseURL>main/</BaseURL>
<!-- Chỉ chứa video -->
<AdaptationSet mimeType="video/mp2t">
<BaseURL>video/</BaseURL>
<!-- 720p Representation at 3.2 Mbps -->
<Representation id="720p" bandwidth="3200000" width="1280" height="720">
<BaseURL>720p/</BaseURL>
<!-- Đầu tiên, chúng ta sẽ list tất cả các segment ra -->
<!-- Timescale là "ticks per second" giá trị tick tắc đồng hồ trên một giây, vì thế mỗi segment có độ dài là 1 phút -->
<SegmentList timescale="90000" duration="5400000">
<RepresentationIndex sourceURL="representation-index.sidx"/>
<SegmentURL media="segment-1.ts"/>
<SegmentURL media="segment-2.ts"/>
<SegmentURL media="segment-3.ts"/>
<SegmentURL media="segment-4.ts"/>
<SegmentURL media="segment-5.ts"/>
<SegmentURL media="segment-6.ts"/>
<SegmentURL media="segment-7.ts"/>
<SegmentURL media="segment-8.ts"/>
<SegmentURL media="segment-9.ts"/>
<SegmentURL media="segment-10.ts"/>
</SegmentList>
</Representation>
<!-- 1080p Representation at 6.8 Mbps -->
<Representation id="1080p" bandwidth="6800000" width="1920" height="1080">
<BaseURL>1080/</BaseURL>
<!-- Bởi vì tất cả segments đều có name giống nhau, nên chúng ta sẽ sử dụng SegmentTemplate -->
<SegmentTemplate media="segment-$Number$.ts" timescale="90000">
<RepresentationIndex sourceURL="representation-index.sidx"/>
<!-- Bằng cách thêm SegmentTimeline, cho nên client có thể dễ dàng thấy được có bao nhiêu segment
-->
<SegmentTimeline>
<!-- This reads: Bắt đầu từ time 0, có tất cả 10 segments với một duration of
(5400000 / @timescale) seconds -->
<S t="0" r="10" d="5400000"/>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
<!-- Chỉ chứa audio -->
<AdaptationSet mimeType="audio/mp2t">
<BaseURL>audio/</BaseURL>
<!-- Chúng ta chỉ cần có một audio representation, bởi vì audio bandwidth thì không quan trọng lắm -->
<Representation id="audio" bandwidth="128000">
<SegmentTemplate media="segment-$Number$.ts" timescale="90000">
<RepresentationIndex sourceURL="representation-index.sidx"/>
<SegmentTimeline>
<S t="0" r="10" d="5400000"/>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
</Period>
</MPD>
Phần kết luận
Điều này sẽ cung cấp đủ thông tin để hiểu cấu trúc của MPD và ý tưởng chung về cách hoạt động của một client DASH cơ bản. Lần tới, tôi sẽ thảo luận về siêu dữ liệu bổ sung, có thể được sử dụng để làm cho client thông minh hơn nhiều và cung cấp trải nghiệm người dùng tốt hơn.

Giảm Độ Trễ Streaming với Chunked CMAF

Do hiện nay trên streaming sử dụng chủ yếu 2 loại giao thức HLS/MPEG-DASH nên chuẩn CMAF (The Common Media Application Format) đã được Apple và Microsoft hợp tác tạo ra để kết hợp lại sử dụng livestream trên các playback.
CMAF đặc tả một số logical media object sau :
  • CMAF Track : chứa media sample bao gồm video, audio và subtitle. Các media sample được chứa trong ISO Base Media File Format (ISO_BMFF) và được mã hóa encode bởi MPEG Common Encryption (COMMON_ENC). Các track này được tạo thành từ một CMAF Header và một hoặc nhiều các CMAF Fragments.
  • CMAF Switching Set: chứa các track thay thế để chuyển đổi các CMAF Fragment thay đổi luồng thích ứng với bit rates và resolution khác nhau.
  • Aligned CMAF Switching Set: từ 2 hoặc nhiều CMAF Switching Set được encode từ cùng một source với các mã hóa hóa khác nhau.
  • CMAF Selection Set: một nhóm các Switching Set của cùng một loại sample media bao gồm các nội dung thay thế (ví dụ các language khác nhau, hoặc các góc camera khác nhau) hoặc các chuẩn encode khác nhau (ví dụ các codec…)
  • CMAF Presentation: một hoặc nhiều presentation về đồng bộ hóa theo thời gian của các selection set.