<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Cách Stream video Camera trên trình duyệt một cách mượt mà nhất sử dụng python Flask + FFmpeg &#40;HLS&#41; |  Hoclaptrinh99.com</title>
<meta name="description" content="Cách Stream video Camera trên trình duyệt một cách mượt mà nhất sử dụng python Flask + FFmpeg &#40;HLS&#41; - Savefile - Blog -...">
<meta name="keywords" content="blog lập trình">
<meta name="news_keywords" content="blog lập trình">
<meta name="author" content="Học Lập Trình 99">
<meta name="copyright" content="Học Lập Trình 99 [hoclaptrinh99@gmail.com]">
<meta name="generator" content="NukeViet v5.0">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="google-site-verification" content="BSwsW_B32JEmlT2cuZD1IQZqLeh5J64CB7lFDySkFVY">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Cách Stream video Camera trên trình duyệt một cách mượt mà nhất sử dụng python Flask + FFmpeg &#40;HLS&#41;">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Blog - https&#x3A;&#x002F;&#x002F;hoclaptrinh99.com&#x002F;blog&#x002F;savefile&#x002F;khac&#x002F;cach-stream-video-camera-tren-trinh-duyet-mot-cach-muot-ma-nhat-su-dung-python-flask-ffmpeg-hls-8.html">
<meta property="og:site_name" content="Học Lập Trình 99">
<meta property="og:image" content="https://hoclaptrinh99.com/uploads/opengrap.png">
<meta property="og:image:url" content="https://hoclaptrinh99.com/uploads/opengrap.png">
<meta property="og:image:type" content="image/png">
<meta property="og:image:width" content="1058">
<meta property="og:image:height" content="887">
<meta property="og:image:alt" content="Học Lập Trình 99">
<meta property="og:url" content="https://hoclaptrinh99.com/blog/savefile/khac/cach-stream-video-camera-tren-trinh-duyet-mot-cach-muot-ma-nhat-su-dung-python-flask-ffmpeg-hls-8.html">
<link rel="shortcut icon" href="https://hoclaptrinh99.com/uploads/500058390_729034789638068_2489363526938716286_n.jpg">
<link rel="canonical" href="https://hoclaptrinh99.com/blog/savefile/khac/cach-stream-video-camera-tren-trinh-duyet-mot-cach-muot-ma-nhat-su-dung-python-flask-ffmpeg-hls-8.html">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/" title="Blog" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/nukeviet/" title="Blog - NUKEVIET" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/php-mysql/" title="Blog - PHP MYSQL" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/html-css-js/" title="Blog - HTML CSS JS" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/python/" title="Blog - PYTHON" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/linux/" title="Blog - LINUX" type="application/rss+xml">
<link rel="alternate" href="https://hoclaptrinh99.com/blog/rss/khac/" title="Blog - KHÁC" type="application/rss+xml">
<link rel="search" type="application/opensearchdescription+xml" href="https://hoclaptrinh99.com/seek/opensearch/blog/" title="Blog">
<link rel="preload" as="font" href="/assets/fonts/fontawesome-webfont.woff2" type="font/woff2" crossorigin>
<link rel="preload" as="font" href="/themes/default/fonts/NukeVietIcons.woff2" type="font/woff2" crossorigin>
<link rel="preload" as="image" href="/themes/ts_sharecode/images/header.png" type="image/png">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/js/sweetalert.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/toastr.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/tienganh.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/php-email-form/validate.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/bootstrap/js/bootstrap.bundle.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/waypoints/jquery.waypoints.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/counterup/counterup.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/jquery.easing/jquery.easing.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/owl.carousel/owl.carousel.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/aos/aos.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/assets/js/select2/select2.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://hoclaptrinh99.com/themes/ts_sharecode/js/bootstrap.min.js" type="text/javascript">
<link rel="preload" as="style" href="/assets/css/core.r.min.css?t=1764339859" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/bootstrap.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/style.responsive.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css_custom/sweetalert.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/toastr.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/animate.css/animate.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/owl.carousel/assets/owl.carousel.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/remixicon/remixicon.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/boxicons/css/boxicons.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/icofont/icofont.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/bootstrap/css/bootstrap.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/assets/js/select2/select2.min.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/aos/aos.css" type="text/css">
<link rel="preload" as="style" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/custom.css" type="text/css">
<link rel="stylesheet" href="/assets/css/core.r.min.css?t=1764339859">
<link rel="stylesheet" href="https://hoclaptrinh99.com/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/bootstrap.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/style.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/style.responsive.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css_custom/sweetalert.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/toastr.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/css/style.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/animate.css/animate.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/owl.carousel/assets/owl.carousel.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/remixicon/remixicon.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/boxicons/css/boxicons.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/icofont/icofont.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/assets/js/select2/select2.min.css">
<link rel="stylesheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/aos/aos.css">
<link rel="StyleSheet" href="https://hoclaptrinh99.com/themes/ts_sharecode/css/custom.css">
<style type="text/css">
    body{background: #fff;}
</style>
    </head>
    <body>
<div class="container-fluid"style="background-color:#fff;">
<div id="print">
    <div id="hd_print">
        <h2 class="pull-left">Học Lập Trình 99</h2>
        <p class="pull-right"><a title="Học Lập Trình 99" href="https://hoclaptrinh99.com/">https://hoclaptrinh99.com</a></p>
    </div>
    <div class="clear"></div>
    <hr />
    <div id="content">
        <h1>Cách Stream video Camera trên trình duyệt một cách mượt mà nhất sử dụng python Flask + FFmpeg &#40;HLS&#41;</h1>
        <ul class="list-inline">
            <li>Thứ hai, 03 Tháng M. một 2025 10:53 SA</li>
            <li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="https://hoclaptrinh99.com/#" data-toggle="winCMD" data-cmd="print">In ra</a></li>
            <li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="https://hoclaptrinh99.com/#"  data-toggle="winCMD" data-cmd="close">Đóng cửa sổ này</a></li>
        </ul>
        <div class="clear"></div>
        <div id="hometext">
            Trong bài viết này tôi sẽ chia sẻ cho các bạn các sử dụng link rtsp đã lấy được ở camera sau đó muốn show lên trình duyệt mà không bị giật lag thì làm Flask + FFmpeg (HLS) theo hướng dẫn dưới đây
        </div>
                <div class="imghome">
            <img alt="Cách Stream video Camera trên trình duyệt một cách mượt mà nhất sử dụng python Flask + FFmpeg &#40;HLS&#41;" src="https://hoclaptrinh99.com/uploads/blog/2025_11/image_11.png" width="460" class="img-thumbnail" />
        </div>
        <div class="clear"></div>
        <div id="bodytext" class="clearfix">
            <h2>Cách bước stream video lên trình duyệt sử dụng Flask + FFmpeg (HLS):</h2><h3>Trên window thực hiện dowload:&nbsp;</h3><ul><li>Vào trang chính thức: <a href="https://ffmpeg.org/download.html">https://ffmpeg.org/download.html</a></li></ul><figure class="image"><img style="aspect-ratio:1500/529;" src="https://hoclaptrinh99.com/uploads/news/2025_11/image_11.png" width="1500" height="529" /></figure><ul><li>Click “<span style="background-color:rgb(255,251,255);color:rgb(33,26,19);"><strong>Windows builds by BtbN</strong></span>” sau đó thực hiện tìm đến: <a href="https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip">ffmpeg-master-latest-win64-gpl.zip</a> để download thực hiện lưu vào máy</li></ul><figure class="image"><img style="aspect-ratio:942/533;" src="https://hoclaptrinh99.com/uploads/news/2025_11/image_12.png" width="942" height="533" /></figure><ul><li><p>Giải nén, thêm thư mục <code>bin</code> vào biến môi trường <code>PATH</code>.</p><figure class="image"><img style="aspect-ratio:1333/710;" src="https://hoclaptrinh99.com/uploads/news/2025_11/image_13.png" width="1333" height="710" /></figure></li><li>Mở lại <strong>cmd / PowerShell</strong>, gõ: <code>ffmpeg -version</code></li></ul><p><strong>Sau khi cài xong, test lại RTSP stream: ffmpeg -rtsp_transport tcp -i &quot;rtsp://admin:100225a@mnnsv.drayddns.com:15554/ch1/main&quot; -f null -</strong></p><p>Nếu bạn thấy khung log liên tục hiện <code>frame=... fps=... bitrate=...</code> → tức là FFmpeg <strong>đọc được stream</strong> ✅</p><p><strong>Sau đó chạy proxy MJPEG về Flask:</strong></p><pre><code class="language-plaintext">ffmpeg -rtsp_transport tcp -i &quot;rtsp://admin:100225a@mnnsv.drayddns.com:15554/ch1/main&quot; `
-vf scale=640:360 `
-f mjpeg -q:v 5 -r 15 -listen 1 “http://127.0.0.1:8090/feed1.ffm”</code></pre><h2>Trên linux:</h2><p>Đối với Ubuntu thì sử dùng câu lênh:</p><pre><code class="language-plaintext">sudo apt update
sudo apt install ffmpeg -y</code></pre><p><strong>Sau khi cài xong, test lại RTSP stream: ffmpeg -rtsp_transport tcp -i &quot;rtsp://admin:100225a@mnnsv.drayddns.com:15554/ch1/main&quot; -f null -</strong></p><p>Nếu bạn thấy khung log liên tục hiện <code>frame=... fps=... bitrate=...</code> → tức là FFmpeg <strong>đọc được stream</strong> ✅</p><pre><code class="language-plaintext">Mở cổng 8090
sudo ufw allow 8090/tcp
sudo ufw reload</code></pre><p><strong>Sau đó chạy proxy MJPEG về Flask:</strong></p><pre><code class="language-plaintext">ffmpeg -rtsp_transport tcp -i &quot;rtsp://admin:100225a@mnnsv.drayddns.com:15554/ch1/main&quot; -vf scale=640:360 -f mjpeg -q:v 5 -r 15 -listen 1 &quot;http://103.200.20.206:8090/feed1.mjpg&quot;</code></pre><p>Tiếp theo đoạn code stream để lấy dữ liệu video;</p><p>Tạo 1 Thư mục: Project:</p><p>project/<br />├── app.py<br />└── templates/<br />&nbsp; &nbsp;└── index.html</p><p>app.py:</p><pre><code class="language-plaintext">from flask import Flask, Response
import cv2
app = Flask(__name__)
def gen_frames():
    cap = cv2.VideoCapture(&quot;http://127.0.0.1:8090/feed1.ffm&quot;)
    while True:
        success, frame = cap.read()
        if not success:
            break
        else:
            _, buffer = cv2.imencode(&#039;.jpg&#039;, frame)
            yield (b&#039;--frame\r\n&#039;
                   b&#039;Content-Type: image/jpeg\r\n\r\n&#039; + buffer.tobytes() + b&#039;\r\n&#039;)
@app.route(&#039;/video_feed&#039;)
def video_feed():
    return Response(gen_frames(),
                    mimetype=&#039;multipart/x-mixed-replace; boundary=frame&#039;)
@app.route(&#039;/&#039;)
def index():
    return &#039;&lt;img src=&quot;/video_feed&quot; width=&quot;640&quot; /&gt;&#039;
if __name__ == &#039;__main__&#039;:
    app.run(host=&#039;0.0.0.0&#039;, port=5000)
</code></pre><p><strong>file index.html</strong></p><pre><code class="language-plaintext">&lt;!DOCTYPE html&gt;
&lt;html&gt;
 &lt;head&gt;
   &lt;title&gt;RTSP Stream&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
   &lt;h2&gt;Camera Live Stream&lt;/h2&gt;
   &lt;img src=&quot;{{ url_for(&#039;video_feed&#039;) }}&quot; width=&quot;720&quot; /&gt;
 &lt;/body&gt;
&lt;/html&gt;</code></pre><p>Trên linux tương tự chỉ cần thay đổi IP là xong</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>
        </div>
                <div id="author">
                        <p>
                <strong>Tác giả:</strong>
                <a href="https://hoclaptrinh99.com/blog/author/Nguyen-Lam/">Nguyễn Lâm</a>
            </p>
        </div>
    </div>
    <div id="footer" class="clearfix">
        <div id="url">
            <strong>URL của bản tin này: </strong><a href="https://hoclaptrinh99.com/blog/savefile/khac/cach-stream-video-camera-tren-trinh-duyet-mot-cach-muot-ma-nhat-su-dung-python-flask-ffmpeg-hls-8.html" title="Cách Stream video Camera trên trình duyệt một cách mượt mà nhất sử dụng python Flask + FFmpeg &#40;HLS&#41;">https://hoclaptrinh99.com/blog/savefile/khac/cach-stream-video-camera-tren-trinh-duyet-mot-cach-muot-ma-nhat-su-dung-python-flask-ffmpeg-hls-8.html</a>
        </div>
        <div class="clear"></div>
        <div class="copyright">
            &copy; Học Lập Trình 99
        </div>
        <div id="contact">
            <a href="mailto:hoclaptrinh99@gmail.com">hoclaptrinh99@gmail.com</a>
        </div>
    </div>
</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng site, <a data-toggle="timeoutsesscancel" href="https://hoclaptrinh99.com/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
<script src="https://hoclaptrinh99.com/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_assets_dir="assets",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="blog",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=1,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",nv_turnstile_sitekey="",XSSsanitize=1,nv_jsdate_get="dd-mm-yyyy",nv_jsdate_post="dd/mm/yyyy",nv_gfx_width="150",nv_gfx_height="40",nv_gfx_num="6";</script>
<script src="https://hoclaptrinh99.com/assets/js/language/vi.js"></script>
<script src="https://hoclaptrinh99.com/assets/js/DOMPurify/purify3.js"></script>
<script src="https://hoclaptrinh99.com/assets/js/global.js"></script>
<script src="https://hoclaptrinh99.com/assets/js/site.js"></script>
<script src="https://hoclaptrinh99.com/themes/default/js/news.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/js/main.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/js/sweetalert.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/toastr.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/toastr/tienganh.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/php-email-form/validate.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/waypoints/jquery.waypoints.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/counterup/counterup.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/jquery.easing/jquery.easing.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/owl.carousel/owl.carousel.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/js/main.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/assets/vendor/aos/aos.js"></script>
<script src="https://hoclaptrinh99.com/assets/js/select2/select2.min.js"></script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/js/custom.js"></script>
<script>        // Debug AOS
        console.log("Checking AOS...");
        function initAOS() {
            if (typeof AOS !== "undefined") {
                console.log("AOS found, initializing...");
                AOS.init({
                    duration: 1000,
                    easing: "ease-in-out",
                    once: false,
                    mirror: true,
                    offset: 50,
                    delay: 0
                });
                console.log("AOS initialized successfully");
            } else {
                console.error("AOS library not found!");
            }
        }
        if (document.readyState === "loading") {
            document.addEventListener("DOMContentLoaded", initAOS);
        } else {
            initAOS();
        }</script>
<script src="https://hoclaptrinh99.com/themes/ts_sharecode/js/bootstrap.min.js"></script>
<script>
        $(function() {
            // Check wallet transaction status - chỉ hiển thị 1 lần
            $.ajax({
                url: '/index.php?language=vi&nv=wallet&op=check_transaction',
                type: 'POST',
                dataType: 'json',
                success: function(response) {
                    if (response.status === 'success' && response.transaction_info) {
                        swal({
                            title: "Thông báo",
                            text: response.transaction_info,
                            type: "success"
                        });
                    }
                },
                error: function() {
                    console.log('Error checking wallet transaction');
                }
            });
        });
        </script>
</body>
</html>