Example #1
0
def openh264_multilayer_encoder(input_name, usagetype, width, height, frame_rate, target_br_list, max_br_list, rc_mode, frame_skip=1):
    layer_num = __init__.get_did_from_resolution(width, height) + 1

    total_target_br = sum(target_br_list[0:layer_num])
    total_max_br = sum(max_br_list[0:layer_num])

    bs_name  = input_name.split(os.sep)[-1] + '_br' + str(total_target_br) + '.264'
    log_name = input_name.split(os.sep)[-1] + '_br' + str(total_target_br) + '.log'
    if '.yuv' not in input_name:
        input_name += '.yuv'

    cmdline = '%s -org %s -utype %d -bf %s -sw %d -sh %d -frin %f -numtl 2 -rc %s -fs %d -trace 255 ' \
              % ("./h264enc", input_name, usagetype, bs_name,
                 width, height, frame_rate, rc_mode, frame_skip)

    cmdline += ' -numl %d -tarb %d -maxbrTotal %d ' %(layer_num, total_target_br, total_max_br)

    for i in range(layer_num):
        cmdline += ' -dw %d %d -dh %d %d -frout %d %f -ltarb %d %d -lmaxb %d %d '\
                   %(i, width/(2**(layer_num-1-i)),
                     i, height/(2**(layer_num-1-i)),
                     i, frame_rate,
                     i, target_br_list[i],
                     i, max_br_list[i])

    cmdline += '1> %s 2> %s' \
              % (log_name, log_name)
    if DEBUG:
        sys.stdout.write(cmdline+'\n')
    p = subprocess.Popen(cmdline, stderr=subprocess.PIPE, shell=True)
    sys.stdout.write(p.communicate()[1])
    return bs_name, log_name
Example #2
0
    def read_logs(self, files):
        self.name = files
        current_file = open(files, 'rU')
        lines = current_file.readlines()
        for line in lines:
            r = RateControlUtil.SETTING_TYPE_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                self.usage_type = int(r.groups()[0])
                continue

            r = RateControlUtil.LAYER_SETTING_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                self.get_settings(cur_dt, r)
                continue

            r = RateControlUtil.SETOPTION_BR_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                RateControlUtil.option_br_update(self.settings, cur_dt,
                                                 int(r.group(1)))
                continue

            r = RateControlUtil.SETOPTION_MAXBR_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                RateControlUtil.option_max_br_update(self.settings, cur_dt,
                                                     int(r.group(1)))
                continue

            r = RateControlUtil.ENCODER_STAT_LOG_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                ts = self.check_ts(r.group(14))
                encoded_bytes = int(r.group(13))
                self.stats.append((cur_dt, ts, encoded_bytes))

                self.idr.append(int(r.group(12)))
                self.frame_skipped.append(int(r.group(9)))
                continue

            r = RateControlUtil.VIDEO_LAYER_LOG_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                did = __init__.get_did_from_resolution(int(r.group(1)),
                                                       int(r.group(2)))
                br = int(r.group(4))
                if br > 0:
                    self.layer_stats.append((cur_dt, did, br))
                continue

        current_file.close()
    def read_logs(self, files):
        self.name = files
        current_file = open(files, 'rU')
        lines = current_file.readlines()
        for line in lines:
            r = RateControlUtil.SETTING_TYPE_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                self.usage_type = int(r.groups()[0])
                continue

            r = RateControlUtil.LAYER_SETTING_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                self.get_settings(cur_dt, r)
                continue

            r = RateControlUtil.SETOPTION_BR_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                RateControlUtil.option_br_update(self.settings, cur_dt, int(r.group(1)))
                continue

            r = RateControlUtil.SETOPTION_MAXBR_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                RateControlUtil.option_max_br_update(self.settings, cur_dt, int(r.group(1)))
                continue

            r = RateControlUtil.ENCODER_STAT_LOG_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                ts = self.check_ts(r.group(14))
                encoded_bytes = int(r.group(13))
                self.stats.append((cur_dt, ts, encoded_bytes))

                self.idr.append(int(r.group(12)))
                self.frame_skipped.append(int(r.group(9)))
                continue

            r = RateControlUtil.VIDEO_LAYER_LOG_RE.search(line)
            if r is not None:
                cur_dt = RateControlUtil.extract_timestamp(line)
                did = __init__.get_did_from_resolution(int(r.group(1)),int(r.group(2)))
                br = int(r.group(4))
                if br>0:
                    self.layer_stats.append((cur_dt, did, br))
                continue

        current_file.close()
Example #4
0
def call_multilayer_encoder(input_name,
                            usagetype,
                            width,
                            height,
                            frame_rate,
                            target_br_list,
                            max_br_list,
                            rc_mode,
                            frame_skip=1):
    layer_num = __init__.get_did_from_resolution(width, height) + 1

    total_target_br = sum(target_br_list[0:layer_num])
    total_max_br = sum(max_br_list[0:layer_num])

    bs_name = input_name.split(
        os.sep)[-1] + '_br' + str(total_target_br) + '.264'
    log_name = input_name.split(
        os.sep)[-1] + '_br' + str(total_target_br) + '.log'
    if '.yuv' not in input_name:
        input_name += '.yuv'

    cmdline = '%s -org %s -utype %d -bf %s -sw %d -sh %d -frin %f -numtl 2 -rc %s -fs %d -trace 255 ' \
              % ("./h264enc", input_name, usagetype, bs_name,
                 width, height, frame_rate, rc_mode, frame_skip)

    cmdline += ' -numl %d -tarb %d -maxbrTotal %d ' % (
        layer_num, total_target_br, total_max_br)

    for i in range(layer_num):
        cmdline += ' -dw %d %d -dh %d %d -frout %d %f -ltarb %d %d -lmaxb %d %d '\
                   %(i, width/(2**(layer_num-1-i)),
                     i, height/(2**(layer_num-1-i)),
                     i, frame_rate,
                     i, target_br_list[i],
                     i, max_br_list[i])

    cmdline += '1> %s 2> %s' \
              % (log_name, log_name)
    if DEBUG:
        sys.stdout.write(cmdline + '\n')
    p = subprocess.Popen(cmdline, stderr=subprocess.PIPE, shell=True)
    sys.stdout.write(p.communicate()[1])
    return bs_name, log_name
Example #5
0
    def plot_overall_graph(self):
        max_d_layer = max([item['did'] for item in self.settings])
        axes_count = 2 if max_d_layer == 0 else (1 + self.MAX_D_LAYER)
        axes_count += 1 if max(self.idr) > 0 else 0
        axes_count += 1 if max(self.frame_skipped) > 0 else 0
        print('draw %d charts\n' % axes_count)
        fig, axes = plt.subplots(axes_count, 1, sharex=True)
        plt.xlabel('time')

        axes[0].plot(self.dt_list, self.br_list, label='actual_bit_rate')
        axes[0].legend()

        if max_d_layer > 0:
            for layer_idx in range(self.MAX_D_LAYER):
                cur_list = [
                    item for item in self.settings
                    if layer_idx == __init__.get_did_from_resolution(
                        item['width'], item['height'])
                ]
                if cur_list == []:
                    axes[layer_idx + 1].plot(self.dt_list,
                                             self.br_list,
                                             label='actual_bit_rate')
                else:
                    for info in ('max_bit_rate', 'target_bit_rate_upper'):
                        axes[layer_idx +
                             1].plot([item['ts'] for item in cur_list],
                                     [item[info] for item in cur_list],
                                     label=info + '_%d' % layer_idx)

                cur_list = [
                    item for item in self.layer_stats if item[1] == layer_idx
                ]
                if cur_list == []:
                    axes[layer_idx + 1].plot(self.dt_list,
                                             self.br_list,
                                             label='actual_bit_rate')
                    axes[layer_idx + 1].legend()
                else:
                    axes[layer_idx + 1].plot([item[0] for item in cur_list],
                                             [item[2] for item in cur_list],
                                             label='layer_%d' % layer_idx)
                    axes[layer_idx + 1].legend()

        else:
            cur_list = [item for item in self.settings]
            for info in ('max_bit_rate', 'target_bit_rate_upper',
                         'target_bit_rate'):
                axes[0].plot([item['ts'] for item in cur_list],
                             [item[info] for item in cur_list],
                             label=info)
            axes[1].plot(
                [item['ts'] for item in self.settings],
                [item['width'] + item['height'] for item in self.settings],
                label='resolution')
            axes[1].legend()

        axes_idx = 2 if max_d_layer == 0 else (1 + self.MAX_D_LAYER)
        if max(self.idr) > 0:
            axes[axes_idx].plot([item[0] for item in self.stats[1:]],
                                RateControlUtil.get_derive(self.idr),
                                '-o',
                                label='idr_count')
            axes[axes_idx].legend()
            axes_idx += 1

        if max(self.frame_skipped) > 0:
            axes[axes_idx].plot([item[0] for item in self.stats[1:]],
                                RateControlUtil.get_derive(self.frame_skipped),
                                '-o',
                                label='frame_skipped_count')
            axes[axes_idx].legend()
        x = [item[0] for item in self.stats[1:]]
        y = RateControlUtil.get_derive(self.frame_skipped)
        for p1, p2 in zip(x, y):
            print("%s,%d\n" % (p1, p2))

        plt.savefig('RatesinLog.png')
        plt.show()
    def plot_overall_graph(self):
        max_d_layer = max([item['did'] for item in self.settings])
        axes_count = 2 if max_d_layer == 0 else (1+self.MAX_D_LAYER)
        axes_count += 1 if max(self.idr) > 0 else 0
        axes_count += 1 if max(self.frame_skipped) > 0 else 0
        print('draw %d charts\n' %axes_count)
        fig, axes = plt.subplots(axes_count, 1, sharex=True)
        plt.xlabel('time')

        axes[0].plot(self.dt_list, self.br_list, label='actual_bit_rate')
        axes[0].legend()

        if max_d_layer>0:
            for layer_idx in range(self.MAX_D_LAYER):
                cur_list = [item for item in self.settings
                            if layer_idx == __init__.get_did_from_resolution(item['width'],item['height'])]
                if cur_list == []:
                    axes[layer_idx+1].plot(self.dt_list, self.br_list, label='actual_bit_rate')
                else:
                    for info in ('max_bit_rate', 'target_bit_rate_upper'):
                        axes[layer_idx+1].plot([item['ts'] for item in cur_list],
                                 [item[info] for item in cur_list],
                                 label=info+'_%d' %layer_idx)

                cur_list = [item for item in self.layer_stats if item[1]==layer_idx]
                if cur_list == []:
                    axes[layer_idx+1].plot(self.dt_list, self.br_list, label='actual_bit_rate')
                    axes[layer_idx+1].legend()
                else:
                    axes[layer_idx+1].plot([item[0] for item in cur_list],
                                 [item[2] for item in cur_list],
                                 label='layer_%d' %layer_idx)
                    axes[layer_idx+1].legend()

        else:
            cur_list = [item for item in self.settings]
            for info in ('max_bit_rate', 'target_bit_rate_upper', 'target_bit_rate'):
                axes[0].plot([item['ts'] for item in cur_list],
                                 [item[info] for item in cur_list],
                                 label=info)
            axes[1].plot([item['ts'] for item in self.settings],
                     [item['width']+item['height'] for item in self.settings], label='resolution')
            axes[1].legend()

        axes_idx = 2 if max_d_layer==0 else (1+self.MAX_D_LAYER)
        if max(self.idr) > 0:
            axes[axes_idx].plot([item[0] for item in self.stats[1:]],
                                  RateControlUtil.get_derive(self.idr),
                                  '-o', label='idr_count')
            axes[axes_idx].legend()
            axes_idx += 1

        if max(self.frame_skipped) > 0:
            axes[axes_idx].plot([item[0] for item in self.stats[1:]],
                                  RateControlUtil.get_derive(self.frame_skipped),
                                  '-o', label='frame_skipped_count')
            axes[axes_idx].legend()
        x=[item[0] for item in self.stats[1:]]
        y=RateControlUtil.get_derive(self.frame_skipped)
        for p1,p2 in zip(x,y):
            print("%s,%d\n" %(p1,p2))

        plt.savefig('RatesinLog.png')
        plt.show()
Example #7
0
    def plot_overall_graph(self):
        max_d_layer = max([item["did"] for item in self.settings])
        axes_count = 2 if max_d_layer == 0 else (1 + self.MAX_D_LAYER)
        axes_count += 1 if max(self.idr) > 0 else 0
        axes_count += 1 if max(self.frame_skipped) > 0 else 0
        print("draw %d charts\n" % axes_count)
        fig, axes = plt.subplots(axes_count, 1, sharex=True)
        plt.xlabel("time")

        axes[0].plot(self.dt_list, self.br_list, label="actual_bit_rate")
        axes[0].legend()

        if max_d_layer > 0:
            for layer_idx in range(self.MAX_D_LAYER):
                cur_list = [
                    item
                    for item in self.settings
                    if layer_idx == __init__.get_did_from_resolution(item["width"], item["height"])
                ]
                if cur_list == []:
                    axes[layer_idx + 1].plot(self.dt_list, self.br_list, label="actual_bit_rate")
                else:
                    for info in ("max_bit_rate", "target_bit_rate_upper"):
                        axes[layer_idx + 1].plot(
                            [item["ts"] for item in cur_list],
                            [item[info] for item in cur_list],
                            label=info + "_%d" % layer_idx,
                        )

                cur_list = [item for item in self.layer_stats if item[1] == layer_idx]
                if cur_list == []:
                    axes[layer_idx + 1].plot(self.dt_list, self.br_list, label="actual_bit_rate")
                    axes[layer_idx + 1].legend()
                else:
                    axes[layer_idx + 1].plot(
                        [item[0] for item in cur_list], [item[2] for item in cur_list], label="layer_%d" % layer_idx
                    )
                    axes[layer_idx + 1].legend()

        else:
            cur_list = [item for item in self.settings]
            for info in ("max_bit_rate", "target_bit_rate_upper", "target_bit_rate"):
                axes[0].plot([item["ts"] for item in cur_list], [item[info] for item in cur_list], label=info)
            axes[1].plot(
                [item["ts"] for item in self.settings],
                [item["width"] + item["height"] for item in self.settings],
                label="resolution",
            )
            axes[1].legend()

        axes_idx = 2 if max_d_layer == 0 else (1 + self.MAX_D_LAYER)
        if max(self.idr) > 0:
            axes[axes_idx].plot(
                [item[0] for item in self.stats[1:]], CodecLogUtil.get_derive(self.idr), "-o", label="idr_count"
            )
            axes[axes_idx].legend()
            axes_idx += 1

        if max(self.frame_skipped) > 0:
            axes[axes_idx].plot(
                [item[0] for item in self.stats[1:]],
                CodecLogUtil.get_derive(self.frame_skipped),
                "-o",
                label="frame_skipped_count",
            )
            axes[axes_idx].legend()
        x = [item[0] for item in self.stats[1:]]
        y = CodecLogUtil.get_derive(self.frame_skipped)
        for p1, p2 in zip(x, y):
            print("%s,%d\n" % (p1, p2))

        plt.savefig("RatesinLog.png")
        plt.show()