亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? encryptts.c

?? Sun公司Dream項(xiàng)目
?? C
字號(hào):

/*
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the "License").  You may not use this file except
 * in compliance with the License.
 *
 * You can obtain a copy of the license at
 * http://www.opensource.org/licenses/cddl1.php
 * See the License for the specific language governing
 * permissions and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * HEADER in each file and include the License file at
 * http://www.opensource.org/licenses/cddl1.php.  If 
 * applicable, add the following below this CDDL HEADER, 
 * with the fields enclosed by brackets "[]" replaced 
 * with your own identifying information: 
 * Portions Copyright [yyyy]
 * [name of copyright owner]
 */ 

/*
 * $(@)EncryptTs.cc $Revision: 1.5 $ $Date: 2006/09/29 21:50:22 $
 * 
 * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
 */

#include "dreamcas/EcmGenerator.h"
#include "dreamcas/Scrambler.h"
#include "mpeg2/TsDemuxer.h"
#include "mpeg2/FileWriter.h"
#include "mpeg2/mpeg2ts_demux_stub.h"

#include <stdexcept>
#include <stdio.h>

#include "ca_crypto/crypto.h"

#include <cerrno>
#include <fstream>

#include <boost/progress.hpp>

using namespace std;
namespace m2t=mpeg2ts;

using boost::shared_ptr;
using namespace dream::cas;

std::string usage("encryptTs [-d ] [-c <Ecm file>] [-m <Emm file>] [-t <ECM Inserted TS file>] <mpeg2 ts file> <output ts file>"
                  "\n\t -d    Use Debug Encryption Keys"
                  "\n\t -c    file ECMs are written to"
                  "\n\t -m    file to write EMM into"
                  "\n\t -t    temporary TS file with ECM TS inserted (no scrambling on Elementary streams)\n");

static unsigned getPmtPid( std::string tsfile );
static m2t::PmtList getPmts( std::string tsfile );
static unsigned long long fileSize( std::string& filename );
static void generateEcmInsertedTsFile( std::string inputTsFilename,
                                       std::string outputTsFilename,
                                       Emm emm, 
                                       EcmGenerator::EncryptionDebugKey encKeyType );
static  TsBytes wrapEmmInTs( const Emm& emm );


int main(int argc, char *argv[])
{
    if( argc < 3 ) {
        std::cout << usage << std::endl;
        return 1;
    }

    char *ecmFile = NULL;
    char *emmFile = NULL;
    char *tmpTsFileWithEcm = NULL;
    EcmGenerator::EncryptionDebugKey encKeyType = EcmGenerator::GenerateNewKey;
    Emm emm(MODE_CTR, KeyGenerator::generateKey(), 
                      KeyGenerator::generateKey());
    int c;

    while( (c=getopt(argc, argv, "dc:m:t:")) != -1 )
    {
        switch(c)
        {
        case 'd':
            encKeyType = EcmGenerator::UseDebugKey;
            emm = Emm( MODE_CTR, std::string("2222222222222222"),
                                 std::string("0123456789012345"));
            break;
        case 'c':
            ecmFile = optarg;
            break;
        case 'm':
            emmFile = optarg;
            break;
        case 't':
            tmpTsFileWithEcm = optarg;
            break;
        default:
            std::cout << usage << std::endl;
            return 1;
        }
    }

    try 
    {
        std::string infile( argv[optind] );
        
        if( emmFile ) {
        	TsBytes emmTs = wrapEmmInTs( emm );
        	std::fstream emmStrm( emmFile, std::ios::out|std::ios::binary );
        	if( !emmStrm ) {
        	    std::cout << "ERROR Opening file " << emmFile << std::endl;
        	    return -1;
        	}
        	emmStrm.write( (const char*)emmTs.data, sizeof(emmTs.data) );
        }
        	
        if( tmpTsFileWithEcm != NULL )
            generateEcmInsertedTsFile( infile, tmpTsFileWithEcm, emm, encKeyType );
        
        m2t::TsFilter tsfilter;
        
        m2t::FileWriterPtr writer( new m2t::FileWriter(argv[optind+1]) );

        unsigned pmtPid = getPmtPid(infile);
        m2t::PmtList pmts = getPmts(infile);

        EcmGeneratorPtr ecmGenerator;
        
        ecmGenerator = EcmGeneratorPtr( new EcmGenerator(writer, emm, ecmFile,
                                            encKeyType) );
        
        ecmGenerator->encryptProgram( EcmGenerator::ALL_PROGRAMS );
        
        m2t::PmtFilterPtr pmtFilter( new m2t::PmtFilter );
        pmtFilter->setCallback( ecmGenerator.get() );
        m2t::PatFilterPtr patFilter( new m2t::PatFilter );
        patFilter->setCallback( ecmGenerator.get() );
        
        tsfilter.setFilter( m2t::TsFilter::NullPid, writer );
        tsfilter.setFilter( m2t::TsFilter::PatPid, patFilter );
        tsfilter.setFilter( pmtPid, pmtFilter );
        tsfilter.setFilter( m2t::TsFilter::PatPid, writer );

        // TODO:Make sure this ts stream isn't CAS'ed already.
        
        ScramblerFilterPtr scrambler(new ScramblerFilter( writer, ecmGenerator ) );
        
        // No need to set the 'writer' as the filter for PMT data. The 
        // EcmGenerator, which acts as the PMT callback re-writes the PMT data
        // and sends it to the writer.
        
        // The following pipelines are set up:
        //
        // tsfilter | Scrambler | FileWriter  (for elementary stream PIDs)
        // tsfilter | PatFilter | EcmGenerator | FileWriter
        //                                                 EcmFileWriter
        //                                          Ecms < 
        //                                       /         FileWriter
        // tsfilter | PmtFilter | EcmGenerator < 
        //                                       ModifiedPmts | FileWriter
        
        for(m2t::PmtList::const_iterator itpmt=pmts.begin(); itpmt!=pmts.end(); ++itpmt )
            for(m2t::PmtEntryList::const_iterator it=(*itpmt).entries.begin();
                    it!=(*itpmt).entries.end(); ++it )
            {
                tsfilter.setFilter( (*it).elementaryPid.to_ulong(), scrambler );
            }
            
        std::fstream instrm( infile.c_str(), std::ios::in|std::ios::binary );
        if( !instrm ) {
            std::cout << "ERROR Opening file: " << infile << ": " << strerror(errno) << std::endl;
            return 1;
        }

        std::cout << "\n\n     Encrypting TS file\n\n";
        
        boost::progress_display progressBar( fileSize(infile) );
        
        while(1)
        {
            char tspkt[188];
            
            instrm.read( tspkt, sizeof(tspkt) );
            if( instrm.eof() ) {
                break;
            }
            
            tsfilter.process( m2t::Buffer((unsigned char*)tspkt, instrm.gcount() ) );
            
            progressBar += instrm.gcount();
        }
        
    }catch(std::exception& e){
        std::cout << "Exception: " << e.what() << std::endl;
        return 1;
    }

    return 0;
}

static void generateEcmInsertedTsFile( std::string infile, std::string outputTsFilename,
                                       Emm emm, EcmGenerator::EncryptionDebugKey encKeyType )
{
    m2t::TsFilter tsfilter;
    
    m2t::FileWriterPtr writer( new m2t::FileWriter(outputTsFilename.c_str()) );
    
    
    unsigned pmtPid = getPmtPid(infile);
    m2t::PmtList pmts = getPmts(infile);
    
    EcmGeneratorPtr ecmGenerator( new EcmGenerator(writer, emm, NULL,
    encKeyType) );
    
    ecmGenerator->encryptProgram( EcmGenerator::ALL_PROGRAMS );
    
    m2t::PmtFilterPtr pmtFilter( new m2t::PmtFilter );
    pmtFilter->setCallback( ecmGenerator.get() );
    m2t::PatFilterPtr patFilter( new m2t::PatFilter );
    patFilter->setCallback( ecmGenerator.get() );
    
    tsfilter.setFilter( m2t::TsFilter::NullPid, writer );
    tsfilter.setFilter( m2t::TsFilter::PatPid, patFilter );
    tsfilter.setFilter( pmtPid, pmtFilter );
    tsfilter.setFilter( m2t::TsFilter::PatPid, writer );
    
    // TODO:Make sure this ts stream isn't CAS'ed already.
    
    
    // No need to set the 'writer' as the filter for PMT data. The 
    // EcmGenerator, which acts as the PMT callback re-writes the PMT data
    // and sends it to the writer.
    
    // The following pipelines are set up:
    //
    // tsfilter | FileWriter  (for elementary stream PIDs)
    // tsfilter | PatFilter | EcmGenerator | FileWriter
    //                                                 EcmFileWriter
    //                                          Ecms < 
    //                                       /         FileWriter
    // tsfilter | PmtFilter | EcmGenerator < 
    //                                       ModifiedPmts | FileWriter
    
    for(m2t::PmtList::const_iterator itpmt=pmts.begin(); itpmt!=pmts.end(); ++itpmt )
        for(m2t::PmtEntryList::const_iterator it=(*itpmt).entries.begin();
            it!=(*itpmt).entries.end(); ++it )
        {
            tsfilter.setFilter( (*it).elementaryPid.to_ulong(), writer );
        }
        
    std::fstream instrm( infile.c_str(), std::ios::in|std::ios::binary );
    if( !instrm ) {
        std::cout << "ERROR Opening file: " << infile << ": " << strerror(errno) << std::endl;
        throw std::runtime_error("Could not open input file");
    }
    
    std::cout << " \n\n    Inserting ECM into Temporary MPEG TS file\n\n";
    
    boost::progress_display progressBar( fileSize(infile) );
    
    while(1)
    {
        char tspkt[188];
        
        instrm.read( tspkt, sizeof(tspkt) );
        if( instrm.eof() ) {
            break;
        }
        
        tsfilter.process( m2t::Buffer((unsigned char*)tspkt, instrm.gcount() ) );
        
        progressBar += instrm.gcount();
    }
}

unsigned getPmtPid( std::string tsfile )
{
    m2t::TsDemuxer demuxer( tsfile.c_str() );
    std::pair<m2t::Pat, m2t::PmtList> patPmts = demuxer.getPatProgramList();
        
    if( patPmts.first.entries.size() != 1 ) {
        std::cout << "ERROR: Exactly 1 PMT PID is expected in PAT. Found "
                  << patPmts.first.entries.size() << std::endl;
        throw std::runtime_error("PMT not found");
    }
        
    return patPmts.first.entries[0].programMapPid.to_ulong();
    
}

static m2t::PmtList getPmts( std::string tsfile )
{
    m2t::TsDemuxer demuxer( tsfile );
    
    return demuxer.getProgramList();
    
}

static unsigned long long fileSize( std::string& filename )
{
    std::fstream strm( filename.c_str(), std::ios::binary|std::ios::in );
    if( !strm ){
        std::cout << "ERROR opening file: " << filename << ": " << strerror(errno) << std::endl;
        throw std::runtime_error( strerror(errno) );
    }
    
    strm.seekg( 0, std::ios::end );
    
    return strm.tellg();
    
}

TsBytes wrapEmmInTs( const Emm& emm )
{
    std::cout << "wrapEmmInTs: " << std::endl;
    PsiBytes emmPsiBytes;
    
    dream::cas::EmmSection emmSection;
    emmSection.emms.push_back( emm );
    
    m2t::OutputBitBuffer outb( emmPsiBytes.data, sizeof(emmPsiBytes.data) );
    
    outb << emmSection;
    
    assert( outb.dataAvailable().second == 0 );
    
    emmPsiBytes.length = outb.dataAvailable().first;
    
    TsBytes tspkt = createTransportPacketForPsi( 600 /*FIXME: hard coded pid*/, 1, emmPsiBytes );
    return tspkt;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黑人精品欧美一区二区蜜桃| 欧美一区在线视频| 成人小视频免费观看| 日韩午夜在线观看视频| 亚洲图片欧美色图| 欧美丝袜自拍制服另类| 中文字幕一区二区三区乱码在线| 日韩免费在线观看| 国产成人自拍网| 亚洲精品日日夜夜| 久久综合色天天久久综合图片| 91麻豆免费看片| 6080yy午夜一二三区久久| 久久精品一区二区三区四区| 不卡电影免费在线播放一区| 麻豆91在线看| 国产精品麻豆一区二区| 丰满少妇在线播放bd日韩电影| 欧美在线观看一区二区| 久久久国产午夜精品| 青青青爽久久午夜综合久久午夜| 99re成人精品视频| 最新热久久免费视频| 欧美日韩日日夜夜| 538在线一区二区精品国产| 在线观看亚洲a| 亚洲精品一区二区三区精华液| 亚洲成年人网站在线观看| 欧美午夜精品一区| 亚洲三级理论片| 日本一区二区三区视频视频| 欧美一区二区三区男人的天堂| 免费观看91视频大全| 久久久99精品免费观看不卡| 99国产精品久久久| 麻豆国产91在线播放| 亚洲美女免费视频| 在线中文字幕不卡| 亚洲欧美一区二区三区国产精品| 91麻豆精品国产91久久久 | 欧美精品一区二区三区高清aⅴ | 26uuu久久综合| 欧美中文字幕一区二区三区亚洲| 国产成人亚洲综合a∨婷婷图片| 亚洲午夜影视影院在线观看| 国产欧美精品一区二区三区四区| 欧美亚洲国产一区在线观看网站| 国产伦精一区二区三区| 久久一区二区三区四区| 欧美在线观看视频一区二区| 国产乱国产乱300精品| 26uuu精品一区二区在线观看| 欧美亚日韩国产aⅴ精品中极品| 国产九色sp调教91| 久久99精品网久久| 国产欧美一区二区精品性| 欧美日韩一区成人| 欧美在线免费播放| www.在线成人| 香蕉成人伊视频在线观看| 中文字幕日韩av资源站| 久久新电视剧免费观看| 欧美va在线播放| aaa亚洲精品| 国产夫妻精品视频| 精品在线观看免费| 久久精品国产免费| 日本一二三四高清不卡| 91丨九色丨蝌蚪富婆spa| 国产一区二区三区四区五区美女 | 久久国内精品自在自线400部| 五月婷婷激情综合| 亚洲精品一线二线三线| 在线不卡中文字幕| 成人精品视频一区| 国产黄色91视频| 成人性生交大片免费看在线播放 | 亚洲精品一区二区三区在线观看| 日韩三级电影网址| 日韩免费观看高清完整版| 欧美精品tushy高清| 欧美久久久久久久久久| 欧美精品色综合| 日韩片之四级片| 精品成人一区二区三区| 国产亚洲视频系列| 久久久国产午夜精品| 国产欧美精品国产国产专区| 国产精品久久久久久久久搜平片| 欧美中文字幕一区| 在线电影一区二区三区| 日韩精品一区二区三区视频在线观看 | 国产日韩av一区| 国产精品久久久久9999吃药| 国产精品区一区二区三| 综合网在线视频| 亚洲国产综合人成综合网站| 亚洲成人www| 成人激情免费视频| 99九九99九九九视频精品| 在线视频一区二区三| 7777精品伊人久久久大香线蕉的 | 久久 天天综合| 国产成人综合网| 色噜噜狠狠色综合中国| 欧美视频在线一区| 日韩三级免费观看| 日本一区二区三区四区| 亚洲精品ww久久久久久p站| 亚洲一区免费观看| 国产精品午夜在线| 亚洲精品免费在线播放| 日韩电影免费在线观看网站| 亚洲婷婷综合久久一本伊一区| 夜夜揉揉日日人人青青一国产精品 | 2017欧美狠狠色| 亚洲女人小视频在线观看| 亚洲不卡av一区二区三区| 国产毛片精品一区| 在线免费观看日本欧美| 精品日产卡一卡二卡麻豆| 中文字幕一区三区| 久久99精品国产.久久久久 | 蜜臀av一区二区| 91在线视频播放| 精品国一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 九色综合狠狠综合久久| 91麻豆视频网站| 国产午夜精品在线观看| 午夜一区二区三区视频| 成人妖精视频yjsp地址| 欧美大度的电影原声| 亚洲精品自拍动漫在线| 国产乱子伦视频一区二区三区| 欧美色中文字幕| 中文字幕一区二区日韩精品绯色| 美女国产一区二区三区| 欧美性猛片xxxx免费看久爱| 国产精品乱码久久久久久| 麻豆精品一区二区| 欧美日韩在线播| 亚洲欧美日韩国产手机在线| 国产一区二区h| 欧美一区二区黄色| 婷婷久久综合九色综合绿巨人| 91免费在线视频观看| 国产婷婷色一区二区三区| 美国毛片一区二区| 欧美日韩三级在线| 亚洲一区在线视频| 99麻豆久久久国产精品免费| 久久久久久久久久久电影| 麻豆成人久久精品二区三区小说| 欧美日韩三级一区二区| 亚洲一区二区三区在线播放| 色国产综合视频| 亚洲日本在线天堂| www.在线欧美| 成人免费一区二区三区在线观看| 顶级嫩模精品视频在线看| 中文字幕一区二区三区在线播放 | 中文av一区特黄| 国产精品69毛片高清亚洲| 久久综合九色欧美综合狠狠| 奇米影视一区二区三区| 日韩亚洲欧美在线| 毛片一区二区三区| 精品国产a毛片| 国产剧情一区在线| 国产性色一区二区| 成人免费观看av| 亚洲视频一区二区在线观看| 成人国产精品免费观看视频| 中文无字幕一区二区三区| 成人h动漫精品| 亚洲特黄一级片| 欧美三级韩国三级日本一级| 日韩专区中文字幕一区二区| 国产精一品亚洲二区在线视频| 久久久亚洲精华液精华液精华液| 国产精品夜夜嗨| 中文字幕欧美一| 在线观看一区二区视频| 亚洲bdsm女犯bdsm网站| 91精品国产91久久久久久一区二区| 人人狠狠综合久久亚洲| 久久色视频免费观看| 成人高清视频免费观看| 一区二区三区国产| 日韩视频国产视频| 欧美日韩在线播放| 久久精品国产精品亚洲精品| 欧美v亚洲v综合ⅴ国产v| 成人激情免费视频| 亚洲综合区在线| 精品国产一区二区三区四区四| 国产成人精品影视| 亚洲乱码国产乱码精品精小说| 欧美日韩国产高清一区二区三区 |